<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:ox="http://www.w3.org/ns/owl2-xml"
    xmlns:ol="http://www.owllink.org/owllink-xml"
    targetNamespace="http://www.owllink.org/owllink-xml"
    elementFormDefault="qualified" attributeFormDefault="qualified">

  <xsd:import namespace="http://www.w3.org/ns/owl2-xml" schemaLocation="http://www.owllink.org/owl2.xsd"/>
  <xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>

  <!-- Olaf Noppens -->

  <!-- REQUESTS -->
  
  <xsd:complexType name="Request"/>

  <xsd:complexType name="KBRequest">
    <xsd:complexContent>
      <xsd:extension base="ol:Request">
        <xsd:attribute name="kb" type="xsd:anyURI" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="KBRequestWithAxioms">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
         <xsd:group ref="ox:Axiom" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="KBRequestWithOneDescription">
    <xsd:complexContent>
        <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:group ref="ox:Description"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
    
  <xsd:complexType name="KBRequestWithTwoDescriptions">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:group ref="ox:Description"/>
          <xsd:group ref="ox:Description"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="KBRequestWithTwoOrMoreDescriptions">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:group ref="ox:Description" minOccurs="2" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="KBRequestWithOneObjectPropertyExpression">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:group ref="ox:ObjectPropertyExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="KBRequestWithTwoObjectPropertyExpressions">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:group ref="ox:ObjectPropertyExpression"/>
          <xsd:group ref="ox:ObjectPropertyExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="KBRequestWithTwoOrMoreObjectPropertyExpressions">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:group ref="ox:ObjectPropertyExpression" minOccurs="2" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="KBRequestWithOneDataPropertyExpression">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:group ref="ox:DataPropertyExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="KBRequestWithTwoDataPropertyExpressions">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:group ref="ox:DataPropertyExpression"/>
          <xsd:group ref="ox:DataPropertyExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="KBRequestWithTwoOrMoreDataPropertyExpressions">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:group ref="ox:DataPropertyExpression" minOccurs="2" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="RequestWithOneClass">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:element  ref="ox:OWLClass"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

   <xsd:complexType name="RequestWithOneObjectProperty">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:element  ref="ox:ObjectProperty"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="RequestWithOneDataProperty">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:element  ref="ox:DataProperty"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <xsd:complexType name="KBRequestWithOneDataPropertyConstant">
    <xsd:complexContent>
      <xsd:extension base="ol:Request">
        <xsd:sequence>
          <xsd:element ref="ox:DataProperty"/>
          <xsd:element ref="ox:Constant"/>  
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <xsd:complexType name="RequestWithOneIndividualDataProperty">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:element ref="ox:Individual"/>
          <xsd:element ref="ox:DataProperty"/>
        </xsd:sequence>
      </xsd:extension>    
    </xsd:complexContent>
  </xsd:complexType>
  

<xsd:complexType name="RequestWithOneIndividualOProperty">
  <xsd:complexContent>
    <xsd:extension base="ol:KBRequest">
      <xsd:sequence>
        <xsd:element ref="ox:Individual"/>
        <xsd:element ref="ox:ObjectProperty"/>
      </xsd:sequence>
    </xsd:extension>    
  </xsd:complexContent>
</xsd:complexType>
  
  <xsd:complexType name="KBRequestWithOneIndividualAndObjectPropertyNegativeAttribute">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:element ref="ox:Individual" maxOccurs="1" minOccurs="1"/>
          <xsd:element ref="ox:ObjectProperty" maxOccurs="1" minOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="negative" type="xsd:boolean" default="false"/>
      </xsd:extension>    
    </xsd:complexContent>
  </xsd:complexType>
  
  
  <xsd:complexType name="RequestWithOneIndividualDescription">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:element ref="ox:Individual"/>
          <xsd:group ref="ox:Description"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
 
  <xsd:complexType name="RequestWithOneIndividual">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:element ref="ox:Individual"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  
  <xsd:complexType name="KBRequestWithOneIndividualAndNegativeAttribute">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:element ref="ox:Individual"/>
        </xsd:sequence>
        <xsd:attribute name="negative" type="xsd:boolean" default="false"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <xsd:complexType name="KBRequestWithOneLiterallAndNegativeAttribute">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:element ref="ox:Constant"/>
        </xsd:sequence>
        <xsd:attribute name="negative" type="xsd:boolean" default="false"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <xsd:complexType name="RequestWithTwoIndividuals">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:element ref="ox:Individual"/>
          <xsd:element ref="ox:Individual"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  <xsd:complexType name="RequestWithTwoOrMoreIndividuals">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence minOccurs="2" maxOccurs="unbounded">
          <xsd:element ref="ox:Individual"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="KBRequestWithIndividualConstant">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:element ref="ox:Individual"/>
          <xsd:element ref="ox:Constant"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  
  <!--  OWLlink Management directives  -->
  
  <xsd:complexType name="Version">
    <xsd:attribute name="major" use="required"/>
    <xsd:attribute name="minor" use="required"/>
    <xsd:attribute name="build" use="optional"/>
  </xsd:complexType>

  <xsd:element name="Datatype">
    <xsd:complexType>
      <xsd:attribute name="URI" type="xsd:anyURI" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="Literal">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:string">
          <xsd:attribute name="URI" type="xsd:anyURI" use="optional"/>
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:group name="DataRange">
    <xsd:choice>
      <xsd:element ref="ol:Datatype" maxOccurs="1"/>
      <xsd:element ref="ol:OneOf" maxOccurs="1"/>
      <xsd:element ref="ol:List" maxOccurs="1"/>
    </xsd:choice>
  </xsd:group>
    
  <!--<xsd:group name="Values">
    <xsd:sequence>
      <xsd:element ref="ol:Literal"></xsd:element>
    </xsd:sequence>
  </xsd:group>-->
  
  <xsd:element name="List">
    <xsd:complexType>
      <xsd:choice minOccurs="1" maxOccurs="unbounded">
        <xsd:group ref="ol:DataRange"></xsd:group>
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="OneOf">
    <xsd:complexType>
      <xsd:sequence minOccurs="1" maxOccurs="unbounded">
        <xsd:element ref="ol:Literal" minOccurs="1" maxOccurs="1"/>
      </xsd:sequence> 
    </xsd:complexType>
  </xsd:element>
  
  
<xsd:complexType name="Setting">
  <xsd:sequence>
    <xsd:group ref="ol:DataRange" maxOccurs="unbounded"/>
       <xsd:element ref="ol:Literal" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="key" type="xsd:string" use="required"></xsd:attribute>
</xsd:complexType>
  
  <xsd:element name="Setting" type="ol:Setting"/>
  <xsd:element name="Property" type="ol:Setting"></xsd:element>
<!--
<xsd:complexType name="Setting">
  <xsd:sequence>
    <xsd:element name="type" minOccurs="1" maxOccurs="1">
      <xsd:complexType>
        <xsd:group ref="ol:DataRange"></xsd:group>
      </xsd:complexType>
    </xsd:element>
    <xsd:element name="value" maxOccurs="unbounded">
      <xsd:complexType>
        <xsd:group ref="ol:Values"></xsd:group>
      </xsd:complexType>
    </xsd:element>
  </xsd:sequence>
  <xsd:attribute name="key" type="xsd:string" use="required"/>
</xsd:complexType>
  -->
  
    <xsd:group name="Setup" >
       <xsd:sequence>
             <xsd:choice minOccurs="1" maxOccurs="unbounded">
               <xsd:element ref="ol:Setting"/>
               <xsd:element ref="ol:Property"/>
              </xsd:choice>             
         </xsd:sequence>
    </xsd:group>
  
  <xsd:element name="GetDescription" type="ol:Request"/>     
  <xsd:element name="GetSettings" type="ol:KBRequest"/>
  <xsd:element name="CreateKB">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:Request">
          <xsd:attribute name="kb" type="xsd:string" use="optional"/>
          <xsd:attribute name="name" type="xsd:string" use="optional"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element> 
  <xsd:element name="ReleaseKB" type="ol:KBRequest"/>
  <xsd:element name="Set">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequest">
          <xsd:sequence >
            <xsd:element ref="ol:Literal" minOccurs="1" maxOccurs="unbounded"/>
          </xsd:sequence>
          <xsd:attribute name="key" type="xsd:string" use="required"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <!-- Ask-KB-->
  <xsd:element name="IsKBSatisfiable" type="ol:KBRequest"/>
  <xsd:element name="IsKBStructurallyConsistent" type="ol:KBRequest"/>
  <xsd:element name="IsTBoxConsistent" type="ol:KBRequest"/>
  <!-- Ask-RetrieveingKBEntities --> 
  <xsd:element name="GetAllAnnotationProperties" type="ol:KBRequest"/>
  <xsd:element name="GetAllObjectProperties" type="ol:KBRequest"/>
  <xsd:element name="GetAllDatatypes" type="ol:KBRequest"/>
  <xsd:element name="GetAllIndividuals" type="ol:KBRequest"/>
  <xsd:element name="GetAllDataProperties" type="ol:KBRequest"/>
  <xsd:element name="GetAllClasses" type="ol:KBRequest"/>  
  <!-- Ask-ClassAsks-->
  <xsd:element name="IsClassSatisfiable" type="ol:KBRequestWithOneDescription"/>
  <xsd:element name="IsClassSubsumedBy" type="ol:KBRequestWithTwoDescriptions"/> <!-- The first class is the subclass and the second one is the superclass -->
  <xsd:element name="AreClassesDisjoint" type="ol:KBRequestWithTwoOrMoreDescriptions"/>
  <xsd:element name="AreClassesEquivalent" type="ol:KBRequestWithTwoOrMoreDescriptions"/>
  <!-- Ask-ClassQueries -->
  <xsd:element name="GetSubClasses">
  <xsd:complexType>
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequestWithOneDescription">
        <xsd:attribute name="direct" type="xsd:boolean" default="false" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  </xsd:element>
  <xsd:element name="GetSuperClasses">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequestWithOneDescription">
          <xsd:attribute name="direct" type="xsd:boolean" default="false" use="optional"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <!-- Ask-ClassHierarchy -->
  <xsd:element name="GetEquivalentClasses" type="ol:KBRequestWithOneDescription"/>
  <xsd:element name="GetSubClassHierarchy" >
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequest">
          <xsd:sequence minOccurs="0" maxOccurs="1">
            <xsd:element ref ="ox:OWLClass"></xsd:element>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <!-- Ask-Individuals -->
  <xsd:element name="AreIndividualsEquivalent" type="ol:RequestWithTwoOrMoreIndividuals"/>
  <xsd:element name="AreIndividualsDisjoint" type="ol:RequestWithTwoOrMoreIndividuals"/>
  <xsd:element name="IsInstanceOf">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:RequestWithOneIndividualDescription">
          <xsd:attribute name="direct" type="xsd:boolean" default="false" use="optional"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <!-- Ask-IndividuualClassQuerysynsets -->
  
  <xsd:element name="GetFlattenTypes">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:RequestWithOneIndividual">
          <xsd:attribute name="direct" type="xsd:boolean" default="false" use="optional"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="GetTypes">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:RequestWithOneIndividual">
          <xsd:attribute name="direct" type="xsd:boolean" default="false" use="optional"></xsd:attribute>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="GetEquivalentIndividuals" type="ol:RequestWithOneIndividual"/>
  <xsd:element name="GetDisjointIndividuals" type="ol:RequestWithOneIndividual"/>
  <xsd:element name="GetFlattenDisjointIndividuals" type="ol:RequestWithOneIndividual"/>
  
  <!-- Ask-IndividualPropertyQueries -->
  <xsd:element name="GetObjectPropertiesOfSource" type="ol:KBRequestWithOneIndividualAndNegativeAttribute"/>
  <xsd:element name="GetObjectPropertiesBetween"> <!-- the first one is the source individual, the second one the target individual -->
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequestWithOneIndividualAndNegativeAttribute">
          <xsd:sequence>
            <xsd:element ref="ox:Individual"></xsd:element>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="GetObjectPropertiesOfFiller" type="ol:KBRequestWithOneIndividualAndNegativeAttribute"/>
  
  
  <xsd:element name="AreIndividualsRelated">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequest">
          <xsd:sequence>
            <xsd:element ref="ox:Individual" minOccurs="1" maxOccurs="1"/>
            <xsd:group ref="ox:ObjectPropertyExpression" minOccurs="1" maxOccurs="1"/>
            <xsd:element ref="ox:Individual" minOccurs="1" maxOccurs="1"/>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="IsIndividualRelatedWithConstant">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequest">
          <xsd:sequence>
            <xsd:element ref="ox:Individual" minOccurs="1" maxOccurs="1"/>
            <xsd:element ref="ox:DataProperty" minOccurs="1" maxOccurs="1"/>
            <xsd:element ref="ox:Constant" minOccurs="1" maxOccurs="1"/>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  
  
  <!-- Ask-IndividualDataPropertyQueries -->
  <xsd:element name="GetDataPropertiesOfSource">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequest">
          <xsd:sequence>
            <xsd:element ref="ox:Individual" minOccurs="1" maxOccurs="1"/>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="GetDataPropertiesBetween">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequestWithOneIndividualAndNegativeAttribute">
          <xsd:sequence>
            <xsd:element ref="ox:Constant"></xsd:element>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="GetDataPropertiesOfConstant" type ="ol:KBRequestWithOneLiterallAndNegativeAttribute"/>
  <!-- Ask-IndividualIndividualQueries -->
  <xsd:element name="GetInstances">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequestWithOneDescription">
          <xsd:attribute name="direct" type="xsd:boolean" default="false"></xsd:attribute>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element> 
  <xsd:element name="GetObjectPropertyFillers" type="ol:KBRequestWithOneIndividualAndObjectPropertyNegativeAttribute"/>
  <xsd:element name="GetObjectPropertySources" type="ol:KBRequestWithOneIndividualAndObjectPropertyNegativeAttribute"/>
  <!-- Ask-IndividualIndividualQueriesFlatten-->
  <xsd:element name="GetFlattenInstances"> 
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequestWithOneDescription">
          <xsd:attribute name="direct" type="xsd:boolean" default="false"></xsd:attribute>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element> 
  <xsd:element name="GetFlattenObjectPropertyFillers" type="ol:KBRequestWithOneIndividualAndObjectPropertyNegativeAttribute"/>
  <xsd:element name="GetFlattenObjectPropertySources" type="ol:KBRequestWithOneIndividualAndObjectPropertyNegativeAttribute"/>
  <!-- Ask-IndividualIndividualDataQueriesSynsets-->
  <xsd:element name="GetDataPropertyFillers" type="ol:RequestWithOneIndividualDataProperty"/>
  <xsd:element name="GetDataPropertySources">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequestWithOneDataPropertyConstant">
          <xsd:attribute ref="ol:negative"></xsd:attribute>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <!-- Ask-IndividualIndividualDataQueriesFlatten -->
  <xsd:element name="GetFlattenDataPropertySources">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequestWithOneDataPropertyConstant">
          <xsd:attribute ref="ol:negative"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <!-- Ask-ObjectPropQueries -->
  <xsd:element name="GetSubObjectProperties">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequestWithOneObjectPropertyExpression">
          <xsd:attribute name="direct" type="xsd:boolean" default="false" use="optional"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
    </xsd:element>
    <xsd:element name="GetSuperObjectProperties">
      <xsd:complexType>
        <xsd:complexContent>
          <xsd:extension base="ol:KBRequestWithOneObjectPropertyExpression">
            <xsd:attribute name="direct" type="xsd:boolean" default="false" use="optional"/>
          </xsd:extension>
        </xsd:complexContent>
      </xsd:complexType>
    </xsd:element>
  <!--  Ask-Equivalence, Disjointness, Unsatisfiability -->
  <xsd:element name="GetUnsatisfiableObjectProperties" type="ol:KBRequest"/>
  <xsd:element name="GetEquivalentObjectProperties" type="ol:KBRequestWithOneObjectPropertyExpression"/>
  <xsd:element name="GetDisjointObjectProperties" type="ol:KBRequestWithOneObjectPropertyExpression"/>  
  <!--  Ask-ObjectPropHierarchy -->
  <xsd:element name="GetSubObjectPropertyHierarchy">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequest">
          <xsd:sequence minOccurs="0" maxOccurs="1">
            <xsd:element  ref="ox:ObjectProperty"/>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <!--  Ask-ObjectPropAsks -->
  <xsd:element name="AreObjectPropertiesEquivalent" type="ol:KBRequestWithTwoOrMoreObjectPropertyExpressions"/>      
  <xsd:element name="IsObjectPropertySubsumedBy" type="ol:KBRequestWithTwoObjectPropertyExpressions"/><!-- The first property is the subproperty and the second one is the superproperty -->
  <xsd:element name="IsObjectPropertySatisfiable" type="ol:KBRequestWithOneObjectPropertyExpression"/>
  <xsd:element name="AreObjectPropertiesDisjoint" type="ol:KBRequestWithTwoOrMoreObjectPropertyExpressions"/>
  <xsd:element name="IsObjectPropertySymmetric" type="ol:KBRequestWithOneObjectPropertyExpression"/>
  <xsd:element name="IsObjectPropertyTransitive" type="ol:KBRequestWithOneObjectPropertyExpression"/>
  <xsd:element name="IsObjectPropertyFunctional" type="ol:KBRequestWithOneObjectPropertyExpression"/>
  <xsd:element name="IsObjectPropertyInverseFunctional" type="ol:KBRequestWithOneObjectPropertyExpression"/>
  <xsd:element name="IsObjectPropertyReflexive" type="ol:KBRequestWithOneObjectPropertyExpression"/>
  <xsd:element name="IsObjectPropertyIrreflexive" type="ol:KBRequestWithOneObjectPropertyExpression"/>
  <xsd:element name="IsObjectPropertyAsymmetric" type="ol:KBRequestWithOneObjectPropertyExpression"/>
  <xsd:element name="Tell" type="ol:KBRequestWithAxioms"/>
    
    <!-- Ask-DataPropQueries -->
    <xsd:element name="GetSubDataProperties">
      <xsd:complexType>
        <xsd:complexContent>
          <xsd:extension base="ol:RequestWithOneDataProperty">
            <xsd:attribute name="direct" type="xsd:boolean" default="false" use="optional"/>
          </xsd:extension>
        </xsd:complexContent>
      </xsd:complexType>
    </xsd:element>
    <xsd:element name="GetSuperDataProperties">
      <xsd:complexType>
        <xsd:complexContent>
          <xsd:extension base="ol:RequestWithOneDataProperty">
            <xsd:attribute name="direct" type="xsd:boolean" default="false" use="optional"/>
          </xsd:extension>
        </xsd:complexContent>
      </xsd:complexType>
    </xsd:element>
<!-- disjointness, equivalence, unsatisfiability -->
  <xsd:element name="GetUnsatisfiableDataProperties" type="ol:KBRequest"/>
  <xsd:element name="GetEquivalentDataProperties" type="ol:KBRequestWithOneDataPropertyExpression"/>
  <xsd:element name="GetDisjointDataProperties" type="ol:KBRequestWithOneDataPropertyExpression"/>
    <!--  Ask-DataPropHierarchy -->
  <xsd:element name="GetSubDataPropertyHierarchy">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequest">
          <xsd:sequence minOccurs="0" maxOccurs="1">
            <xsd:element  ref="ox:DataProperty"/>
            </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  

    
    
    <!--  Ask-ObjectPropAsks -->
    <xsd:element name="AreDataPropertiesEquivalent" type="ol:KBRequestWithTwoOrMoreDataPropertyExpressions"/>      
    <xsd:element name="IsDataPropertySubsumedBy" type="ol:KBRequestWithTwoDataPropertyExpressions"/><!-- The first property is the subproperty and the second one is the superproperty -->
    <xsd:element name="IsDataPropertySatisfiable" type="ol:KBRequestWithOneDataPropertyExpression"/>
    <xsd:element name="AreDataPropertiesDisjoint" type="ol:KBRequestWithTwoOrMoreDataPropertyExpressions"/>
    <xsd:element name="IsDataPropertyFunctional" type="ol:KBRequestWithOneDataPropertyExpression"/>

    
  <xsd:group name="Request">
    <xsd:choice>
      <!--  Management -->
     <xsd:element ref="ol:GetDescription"/>
      <xsd:element ref="ol:GetSettings"/>
      <xsd:element ref="ol:CreateKB"/>
        <xsd:element ref="ol:ReleaseKB"/>
      <xsd:element ref="ol:Set"/>
      <xsd:element ref="ol:IsKBSatisfiable"/>
      <xsd:element ref="ol:IsKBStructurallyConsistent"/>
      <xsd:element ref="ol:IsTBoxConsistent" />
      <!-- Ask-RetrieveingKBEntities --> 
      <xsd:element ref="ol:GetAllAnnotationProperties"/>
      <xsd:element ref="ol:GetAllObjectProperties"/>
      <xsd:element ref="ol:GetAllDatatypes"/>
      <xsd:element ref="ol:GetAllIndividuals"/>
      <xsd:element ref="ol:GetAllDataProperties"/>
      <xsd:element ref="ol:GetAllClasses"/>  
      <!-- Ask-ClassAsks-->
      <xsd:element ref="ol:IsClassSatisfiable"/>
      <xsd:element ref="ol:IsClassSubsumedBy"/>
      <xsd:element ref="ol:AreClassesDisjoint"/>
      <xsd:element ref="ol:AreClassesEquivalent"/>
      <!-- Ask-ClassQueries -->
      <xsd:element ref="ol:GetSubClasses" />
      <xsd:element ref="ol:GetSuperClasses"/>
      <!-- Ask-ClassHierarchy -->
      <xsd:element ref="ol:GetEquivalentClasses"/>
      <xsd:element ref="ol:GetSubClassHierarchy" />
      <!-- Ask-Individuals -->
      <xsd:element ref="ol:AreIndividualsEquivalent"/>
      <xsd:element ref="ol:AreIndividualsDisjoint"/>
      <xsd:element ref="ol:IsInstanceOf"/>
      <!-- Ask-IndividuualClassQuerysynsets -->
      <xsd:element ref="ol:GetTypes"/>
      <xsd:element ref="ol:GetFlattenTypes"/>
      <xsd:element ref="ol:GetEquivalentIndividuals"/>
      <xsd:element ref="ol:GetDisjointIndividuals"/>
      <xsd:element ref="ol:GetFlattenDisjointIndividuals"/>
      <!-- Ask-IndividualPropertyQueries -->
      <xsd:element ref="ol:GetObjectPropertiesOfSource" />
      <xsd:element ref="ol:GetObjectPropertiesBetween"/> 
      <xsd:element ref="ol:GetObjectPropertiesOfFiller" />
      <!-- Ask-IndividualDataPropertyQueries -->
      <xsd:element ref="ol:GetDataPropertiesOfSource"/>
      <xsd:element ref="ol:GetDataPropertiesBetween"/>
      <xsd:element ref="ol:GetDataPropertiesOfConstant"/>
      <!-- Ask-IndividualIndividualQueries -->
      <xsd:element ref="ol:GetInstances"/>
      <xsd:element ref="ol:GetObjectPropertyFillers"/>
      <xsd:element ref="ol:GetObjectPropertySources"/>
      <!-- Ask-IndividualIndividualQueriesFlatten-->
      <xsd:element ref="ol:GetFlattenInstances"/> 
      <xsd:element ref="ol:GetFlattenObjectPropertyFillers" />
      <xsd:element ref="ol:GetFlattenObjectPropertySources"/>
      <!-- Ask-IndividualIndividualDataQueriesSynsets-->
      <xsd:element ref="ol:GetDataPropertyFillers"/>
      <xsd:element ref="ol:GetDataPropertySources"/>
      <!-- Ask-IndividualIndividualDataQueriesFlatten -->
      <xsd:element ref="ol:GetFlattenDataPropertySources"/>
      <!-- Ask-ObjectPropQueries -->
      <xsd:element ref="ol:GetSubObjectProperties" />
      <xsd:element ref="ol:GetSuperObjectProperties"/>
      
      <xsd:element ref="ol:GetUnsatisfiableObjectProperties"/>
      <xsd:element ref="ol:GetEquivalentObjectProperties" />
      <xsd:element ref="ol:GetDisjointObjectProperties"/>
      
      <!--  Ask-ObjectPropHierarchy -->
      <xsd:element ref="ol:GetSubObjectPropertyHierarchy"/>
      <!--  Ask-ObjectPropAsks -->
      <xsd:element ref="ol:AreObjectPropertiesEquivalent" />      
      <xsd:element ref="ol:IsObjectPropertySubsumedBy" />
      <xsd:element ref="ol:IsObjectPropertySatisfiable" />
      <xsd:element ref="ol:AreObjectPropertiesDisjoint" />
      <xsd:element ref="ol:IsObjectPropertySymmetric" />
      <xsd:element ref="ol:IsObjectPropertyTransitive" />
      <xsd:element ref="ol:IsObjectPropertyFunctional"/>
      <xsd:element ref="ol:IsObjectPropertyInverseFunctional" />
      <xsd:element ref="ol:IsObjectPropertyReflexive"/>
      <xsd:element ref="ol:IsObjectPropertyIrreflexive" />
      <xsd:element ref="ol:IsObjectPropertyAsymmetric"/>
      
      <!--  Ask-DataPropAsks -->
      <xsd:element ref="ol:AreDataPropertiesEquivalent"/>      
      <xsd:element ref="ol:IsDataPropertySubsumedBy" />
      <xsd:element ref="ol:IsDataPropertySatisfiable" />
      <xsd:element ref="ol:AreDataPropertiesDisjoint" />
      <xsd:element ref="ol:IsDataPropertyFunctional" />
      
      <!-- Ask-DataPropQueries -->
      <xsd:element ref="ol:GetSubDataProperties"/>
      <xsd:element ref="ol:GetSuperDataProperties"/>
      
      <!-- disjointness, equivalence, unsatisfiability -->
      <xsd:element ref="ol:GetUnsatisfiableDataProperties"/>
      <xsd:element ref="ol:GetEquivalentDataProperties"/>
      <xsd:element ref="ol:GetDisjointDataProperties"/>
      
      <!--  Ask-DataPropHierarchy -->
      <xsd:element ref="ol:GetSubDataPropertyHierarchy"/>
      
      <xsd:element ref="ol:AreIndividualsRelated"/>
      <xsd:element ref="ol:IsIndividualRelatedWithConstant"/>
      
      <xsd:element ref="ol:Tell"/>
    </xsd:choice>
  </xsd:group>

  <xsd:element name="RequestMessage">
    <xsd:complexType>
      <xsd:group ref="ol:Request" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:complexType>
  </xsd:element>
  
  <!--  RESPONSES -->
  
  <xsd:complexType name="Response"/>
    
  <xsd:complexType name="KBResponse" >
    <xsd:complexContent>
      <xsd:extension base="ol:Response">
        <xsd:attribute name="warning" type="xsd:string" use="optional"/>
      </xsd:extension>

    </xsd:complexContent>
  </xsd:complexType>
  
  <xsd:complexType name="Error">
    <xsd:complexContent>
      <xsd:extension base="ol:Response">
        <xsd:attribute name="errorMessage" type="xsd:string" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  
  
  <xsd:group name="SetOfClasses">
      <xsd:sequence>
        <xsd:element ref="ox:OWLClass" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
    </xsd:group>
  
  <xsd:complexType name="SetOfClasses">
    <xsd:group ref="ol:SetOfClasses" minOccurs="0" maxOccurs="unbounded"/>
  </xsd:complexType>
  
  <xsd:complexType name="ClassSynset" >
    <xsd:sequence>
        <xsd:element ref="ox:OWLClass" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>    
  </xsd:complexType>
   
  <xsd:group name="SetOfClassSynsets">
    <xsd:sequence>
      <xsd:element name="ClassSynset" type="ol:ClassSynset" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>
  
  <xsd:group name="SetOfSubClassSynsets">
    <xsd:sequence>
      <xsd:element name="ClassSynset" type="ol:ClassSynset" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>
     
  <xsd:group name="SetOfIndividuals">
    <xsd:sequence>
      <xsd:element ref="ox:Individual" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>
  
    <xsd:complexType name="IndividualSynset">
    <xsd:sequence>
      <xsd:element ref="ox:Individual" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  
    <xsd:group name="SetOfIndividualSynsets">
    <xsd:sequence>
      <xsd:element name="IndividualSynset" type="ol:IndividualSynset" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
    </xsd:group>
  
  <xsd:group name="SetOfAnnotationProperties">
    <xsd:sequence>
      <xsd:element ref="ox:AnnotationProperty" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>
  
  <xsd:group name="SetOfConstants">
    <xsd:sequence>
      <xsd:element ref="ox:Constant" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>
  
  <xsd:group name="SetOfDatatypes">
    <xsd:sequence>
      <xsd:element ref="ox:Datatype" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>
  
  <xsd:group name="SetOfObjectProperties">
    <xsd:sequence>
      <xsd:element ref="ox:ObjectProperty" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>
  
  <xsd:complexType name="ObjectPropertySynset">
    <xsd:sequence>
      <xsd:element ref="ox:ObjectProperty" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  
  <xsd:group name="SetOfObjectPropertySynsets">
    <xsd:sequence>
      <xsd:element name="ObjectPropertySynset" type="ol:ObjectPropertySynset" minOccurs="0" maxOccurs="unbounded">
      </xsd:element>
    </xsd:sequence>
  </xsd:group>
  
  <xsd:group name="SetOfDataProperties">
    <xsd:sequence>
      <xsd:element ref="ox:DataProperty" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>
  
  <xsd:complexType name="DataPropertySynset">
    <xsd:sequence>
      <xsd:element ref="ox:DataProperty" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  
  <xsd:group name="SetOfDataPropertySynsets">
    <xsd:sequence>
      <xsd:element name="DataPropertySynset" type="ol:DataPropertySynset" minOccurs="0" maxOccurs="unbounded">
      </xsd:element>
    </xsd:sequence>
  </xsd:group>
  
  <xsd:element name="PublicKB">
    <xsd:complexType>
      <xsd:attribute name="kb" type="xsd:anyURI" use="required" />
      <xsd:attribute name="name" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="Description">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="OWLlinkVersion" type="ol:Version" minOccurs="1" maxOccurs="1"/>
        <xsd:element name="ReasonerVersion" type="ol:Version" minOccurs="1" maxOccurs="1"/>
        <xsd:group ref="ol:Setup" minOccurs="0"/>
        <xsd:element name="SupportedExtension" minOccurs="0" maxOccurs="unbounded">
          <xsd:complexType>
            <xsd:attribute name="URI" type="xsd:anyURI" use="required"></xsd:attribute>
          </xsd:complexType>
        </xsd:element>
        <xsd:element ref="ol:PublicKB" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <xsd:attribute name="message" type="xsd:string" use="optional"></xsd:attribute>
    </xsd:complexType>
  </xsd:element>
  
  
  <xsd:element name="KB">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:attribute name="kb" type="xsd:anyURI"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="Settings">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:sequence >
            <xsd:element name="Setting" type="ol:Setting" minOccurs="0" maxOccurs="unbounded"/>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="OK" type="ol:KBResponse"/>
  <xsd:element name="SetOfAnnotationProperties">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:group ref="ol:SetOfAnnotationProperties"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="SetOfClasses">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:group ref="ol:SetOfClasses"></xsd:group>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="SetOfIndividuals">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:group ref="ol:SetOfIndividuals"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="SetOfConstants">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:group ref="ol:SetOfConstants"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="SetOfDatatypes">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:group ref="ol:SetOfDatatypes"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="SetOfObjectProperties">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:group ref="ol:SetOfObjectProperties"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="SetOfDataProperties">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:group ref="ol:SetOfObjectProperties"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Ask-KB -->      <!-- Ask-ClassAsks-->
  <xsd:element name="StringResponse">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:attribute name="result" type="xsd:string"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="BooleanResponse">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:attribute name="result" type="xsd:boolean" use="required"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <!-- Ask-ClassQueries-->   
  <xsd:element name="SetOfClassSynsets">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:group ref="ol:SetOfClassSynsets"></xsd:group>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType> 
  </xsd:element>
  <!-- Ask-ClassHierarchy -->
  <xsd:element name="ClassHierarchy">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:sequence minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="ClassSubClassPair">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="ClassSynset" type="ol:ClassSynset"/>
                  <xsd:element name="SetOfSubClassSynsets">
                    <xsd:complexType>
                      <xsd:group ref="ol:SetOfSubClassSynsets"></xsd:group>
                    </xsd:complexType>
                  </xsd:element>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Ask-IndividualDataPropertyQueries -->
  <xsd:element name="SetOfDataPropertySynsets">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:group ref="ol:SetOfDataPropertySynsets"></xsd:group>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <!-- Ask-IndividualIndividualQueries -->
  
  <xsd:element name="SetOfIndividualSynsets">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:group ref="ol:SetOfIndividualSynsets"></xsd:group>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType> 
  </xsd:element>
  <!-- Ask-ObjectPropertyHierarchy -->
  <xsd:element name="ObjectPropertyHierarchy">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:Response">
          <xsd:sequence minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="ObjectPropertySubObjectPropertyPair"> 
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="ObjectPropertySynset" type="ol:ObjectPropertySynset"/>
                  <xsd:element name="SetOfSubObjectPropertySynsets">
                    <xsd:complexType>
                      <xsd:group ref="ol:SetOfObjectPropertySynsets"></xsd:group>
                    </xsd:complexType>
                  </xsd:element>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="SetOfObjectPropertySynsets">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:group ref="ol:SetOfObjectPropertySynsets"></xsd:group>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="ObjectPropertySynset">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:group ref="ol:SetOfObjectProperties"></xsd:group>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <!-- data property hierarchy -->
  <xsd:element name="DataPropertyHierarchy">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:Response">
          <xsd:sequence minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="DataPropertySubDataPropertyPair"> 
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="DataPropertySynset" type="ol:DataPropertySynset"/>
                  <xsd:element name="SetSubataPropertySynsets">
                    <xsd:complexType>
                      <xsd:group ref="ol:SetOfDataPropertySynsets"></xsd:group>
                    </xsd:complexType>
                  </xsd:element>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="Error" type="ol:Error"/>
  <xsd:element name="SyntaxError" type="ol:Error"/>
  <xsd:element name="KBError" type="ol:Error"/>
  <xsd:element name="SemanticError" type="ol:Error"/>
  
  
  <xsd:group name="Response">
    <xsd:choice>
      <!-- KB Management -->
      <xsd:element ref="ol:Description"/>
      <xsd:element ref="ol:KB"/>
      <xsd:element ref="ol:Settings"/>
      <xsd:element ref="ol:OK"/>
      <xsd:element ref="ol:SetOfAnnotationProperties"/>
      <xsd:element ref="ol:SetOfClasses"/>
      <xsd:element ref="ol:SetOfIndividuals"/>
      <xsd:element ref="ol:SetOfObjectProperties"/>
      <xsd:element ref="ol:SetOfDataProperties"/>
      <xsd:element ref="ol:SetOfConstants"/>
      <xsd:element ref="ol:SetOfDatatypes"/>
      <!-- Ask-KB -->      <!-- Ask-ClassAsks-->      
      <xsd:element ref="ol:BooleanResponse"/>
      <!-- Ask-ClassQueries-->   
      <xsd:element ref="ol:SetOfClassSynsets"/>
      <!-- Ask-ClassHierarchy -->
      <xsd:element ref="ol:ClassHierarchy"/>
      <!-- Ask-IndividualDataPropertyQueries -->
      <xsd:element ref="ol:SetOfDataPropertySynsets"/>
      <!-- Ask-IndividualIndividualQueries -->
      <xsd:element ref="ol:SetOfIndividualSynsets"/>
      <!-- Ask-ObjectPropertyHierarchy -->
      <xsd:element ref="ol:ObjectPropertyHierarchy"/>
      <xsd:element ref="ol:SetOfObjectPropertySynsets"/>
      <xsd:element ref="ol:ObjectPropertySynset"/>
      <!-- Ask-DataPropertyHierarchy -->
      <xsd:element ref="ol:DataPropertyHierarchy"/>
      
      <xsd:element ref="ol:Error"/>
      <xsd:element ref="ol:SyntaxError" />
      <xsd:element ref="ol:KBError"/>
      <xsd:element ref="ol:SemanticError"/>
      
      </xsd:choice>
  </xsd:group>

  <!--<xsd:element name="ResponseMessage">
    <xsd:complexType>
      <xsd:group ref="ol:Response" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:complexType>
    </xsd:element>-->
  
  <xsd:element name="ResponseMessage">
    <xsd:complexType>
      <xsd:group ref="ol:Response" minOccurs="1" maxOccurs="unbounded"></xsd:group>
    </xsd:complexType>
  </xsd:element>

  <xsd:attribute name="negative" type="xsd:boolean" default="false"  ></xsd:attribute>
</xsd:schema>
