<?xml version="1.0"?>

<!-- We need to pick a sensible target namespace URL; see the schema
     tag below -->

<xsd:schema
    targetNamespace="http://bogusnamespace.com/inference_pilot_evaluation/annotation"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:inf="http://bogusnamespace.com/inference_pilot_evaluation/annotation"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified">

  <!-- First define the non-trivial field types -->
  <!-- Polarity -->
  <xsd:simpleType name="polarityType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="true"/>
      <xsd:enumeration value="unknown"/>
      <xsd:enumeration value="false"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- Force -->
  <xsd:simpleType name="forceType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="strict"/>
      <xsd:enumeration value="plausible"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- Source -->
  <xsd:simpleType name="sourceType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="linguistic"/>
      <xsd:enumeration value="world"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!-- Provenance -->
  <xsd:complexType name="provenanceType">
    <xsd:simpleContent>
      <xsd:extension base="xsd:string">
        <xsd:attribute name="type">
          <xsd:simpleType>
            <xsd:restriction base="xsd:string">
	      <xsd:enumeration value="unedited"/>
	      <xsd:enumeration value="edited"/>
	      <xsd:enumeration value="hand-crafted"/>
	    </xsd:restriction>
          </xsd:simpleType>
        </xsd:attribute>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>

  <!-- Next, define the complex "answer" element type that will
       contain all fields that can vary for different answers to the
       same passage/question -->
  <xsd:complexType name="answerType">
    <xsd:sequence>
      <xsd:element name="response" type="xsd:string"/>
      <xsd:element name="because" type="xsd:string"
          minOccurs="0"/>
      <xsd:element name="assumptions" type="xsd:string"
          minOccurs="0"/>
      <xsd:element name="context-type" type="xsd:string"
          minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="comment" type="xsd:string" minOccurs="0"
          maxOccurs="unbounded"/>
    </xsd:sequence>
    <!-- For some odd reason, XML Schema forces us to define
         attributes after having defined the subtags -->
    <xsd:attribute name="id" type="xsd:string"/>
    <xsd:attribute name="polarity" type="inf:polarityType"/>
    <xsd:attribute name="force" type="inf:forceType"/>
    <xsd:attribute name="source" type="inf:sourceType"/>
  </xsd:complexType>

  <!-- Define the main parent tag for each passage/question and
       associated answers -->
  <xsd:complexType name="inferenceType">
    <xsd:sequence>
      <xsd:element name="passage" type="xsd:string"/>
      <xsd:element name="question" type="xsd:string"/>
      <xsd:element name="provenance" type="inf:provenanceType"
          minOccurs="0"/>
      <xsd:element name="answer" type="inf:answerType" minOccurs="0"
          maxOccurs="unbounded"/>
      <xsd:element name="comment" type="xsd:string" minOccurs="0"
          maxOccurs="unbounded"/>
    </xsd:sequence>
    <!-- For some odd reason, XML Schema forces us to define
         attributes after having defined the subtags -->
    <xsd:attribute name="id" type="xsd:string"/>
  </xsd:complexType>

  <!-- Finally, define the top-level root element -->
  <xsd:element name="root">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="inference" type="inf:inferenceType"
            maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>

