<?xml version="1.0" encoding="UTF-8"?>
 
<xs:schema 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns="http://www.w3.org/2009/10/rif-test#"
  targetNamespace="http://www.w3.org/2009/10/rif-test#"
  elementFormDefault="qualified"
  version="1.0">

  <xs:group name="TestCase">  
    <xs:choice>
      <xs:element ref="PositiveEntailmentTest"/>
      <xs:element ref="NegativeEntailmentTest"/>
      <xs:element ref="PositiveSyntaxTest"/>
      <xs:element ref="NegativeSyntaxTest"/>
      <xs:element ref="ImportRejectionTest"/>                       
    </xs:choice>
  </xs:group>


<!-- Properties common to all test cases -->

  <xs:group name="commonTestCaseInfo"> 
    <xs:sequence>    
      <xs:element ref="status"/>
      <xs:element ref="dialect" maxOccurs="unbounded"/>
      <xs:element ref="Combinations" minOccurs="0"/>
      <xs:element ref="purpose"/>
      <xs:element ref="description" minOccurs="0"/>     
      <xs:element name="ImportedDocument" type="documentType" minOccurs="0" maxOccurs="unbounded"/>    
    </xs:sequence> 
  </xs:group> 

<!-- The different test case types -->

 <xs:element name="PositiveEntailmentTest">
  <xs:complexType>
    <xs:sequence>
      <xs:group ref="commonTestCaseInfo"/>
      <xs:element name="PremiseDocument" type="documentType"/>
      <xs:element name="ConclusionDocument" type="documentType"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:string" use="required"/>
    <xs:attribute name="src" type="xs:anyURI" use="required"/>
   </xs:complexType>
 </xs:element>

 <xs:element name="NegativeEntailmentTest">
  <xs:complexType>
    <xs:sequence>
      <xs:group ref="commonTestCaseInfo"/>
      <xs:element name="PremiseDocument" type="documentType"/>
      <xs:element name="NonConclusionDocument" type="documentType"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:string" use="required"/>
    <xs:attribute name="src" type="xs:anyURI" use="required"/>
   </xs:complexType>
 </xs:element>

 <xs:element name="PositiveSyntaxTest" type="syntaxTest"/>
 <xs:element name="NegativeSyntaxTest" type="syntaxTest"/>
 <xs:element name="ImportRejectionTest" type="syntaxTest"/>

 <xs:complexType name="syntaxTest">
   <xs:sequence>
     <xs:group ref="commonTestCaseInfo"/>
     <xs:element name="InputDocument" type="documentType"/>
   </xs:sequence>
    <xs:attribute name="id" type="xs:string" use="required"/>
    <xs:attribute name="src" type="xs:anyURI" use="required"/>
 </xs:complexType>

 <!-- other element definitions -->

 <xs:element name="Combinations">
   <xs:complexType>
     <xs:sequence>
        <xs:element name="profile" type="xs:anyURI" maxOccurs="unbounded"/>
     </xs:sequence>   
   </xs:complexType>
 </xs:element>

 <xs:element name="status" type="statusType"/>
 <xs:element name="dialect" type="dialectType"/>
 <xs:element name="purpose" type="descriptionType"/>
 <xs:element name="description" type="descriptionType"/>

 <!-- other type definitions -->
                       
 <xs:complexType name="documentType">
    <xs:sequence>
      <xs:element name="Normative">
        <xs:complexType>
           <xs:sequence>
             <xs:element name="name" type="xs:string"/>
             <xs:element name="remote" type="xs:anyURI" maxOccurs="unbounded"/>
           </xs:sequence>   
           <xs:attribute name="syntax" type="nSyntaxType"/>    
        </xs:complexType>
      </xs:element>
      <xs:element name="Presentation" minOccurs="0" maxOccurs="unbounded">
         <xs:complexType>
             <xs:simpleContent>
               <xs:extension base="xs:string">
                 <xs:attribute name="syntax" type="pSyntaxType" use="required"/>
               </xs:extension>  
             </xs:simpleContent>
         </xs:complexType>      
      </xs:element>
    </xs:sequence>  
 </xs:complexType>

 <xs:simpleType name="statusType">
    <xs:restriction base="xs:string">
       <xs:enumeration value="Approved" />
       <xs:enumeration value="Proposed" />
    </xs:restriction>
 </xs:simpleType>

 <xs:simpleType name="dialectType">
    <xs:restriction base="xs:string">
       <xs:enumeration value="Core" />
       <xs:enumeration value="BLD" />
       <xs:enumeration value="PRD" />
    </xs:restriction>
 </xs:simpleType>

<xs:simpleType name="nSyntaxType">
    <xs:restriction base="xs:string">
       <xs:enumeration value="RIF/XML" />
       <xs:enumeration value="RDF/XML" />
       <xs:enumeration value="NTriples" />
       <xs:enumeration value="Turtle" />
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="pSyntaxType">
    <xs:restriction base="xs:string">
       <xs:enumeration value="RIFBLD-PS" />
       <xs:enumeration value="RIFPRD-PS" />
       <xs:enumeration value="NTriples" />
       <xs:enumeration value="Turtle" />   
       <xs:enumeration value="OWL2 Functional Syntax" />
    </xs:restriction>
</xs:simpleType>

 <xs:complexType name="descriptionType" mixed="true">
    <xs:sequence>
      <xs:any namespace="http://www.w3.org/1999/xhtml"
      minOccurs="0" maxOccurs="unbounded"
      processContents="skip"/>
    </xs:sequence>
 </xs:complexType>


</xs:schema>
