<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:owl="http://www.w3.org/2002/07/owl#"
  xmlns:ol="http://www.owllink.org/owllink-xml#"
  targetNamespace="http://www.owllink.org/owllink-xml#" elementFormDefault="qualified"
  attributeFormDefault="unqualified">

  <xsd:import namespace="http://www.w3.org/2002/07/owl#" schemaLocation="http://www.w3.org/2009/09/owl2-xml.xsd"/>
  <xsd:import namespace="http://www.w3.org/XML/1998/namespace"
    schemaLocation="http://www.w3.org/2001/xml.xsd"/>

  <!-- Olaf Noppens, Marko Luther -->

  <!-- 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="owl:Axiom" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="KBRequestWithNegativeAttribute">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:attribute name="negative" type="xsd:boolean" default="false"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="KBRequestWithOneDescription">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:group ref="owl:ClassExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="KBRequestWithTwoDescriptions">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:group ref="owl:ClassExpression"/>
          <xsd:group ref="owl:ClassExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="KBRequestWithTwoOrMoreDescriptions">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:group ref="owl:ClassExpression" 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="owl: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="owl:ObjectPropertyExpression"/>
          <xsd:group ref="owl: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="owl: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="owl: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="owl:DataPropertyExpression"/>
          <xsd:group ref="owl: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="owl: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="owl:Class"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="RequestWithOneObjectProperty">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:element ref="owl: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="owl:DataProperty"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="KBRequestWithOneDataPropertyLiteral">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:element ref="owl:DataProperty"/>
          <xsd:element ref="owl:Literal"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="RequestWithOneIndividualDataProperty">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:element ref="owl:DataProperty"/>
          <xsd:choice>
            <xsd:element ref="owl:NamedIndividual"/>
            <xsd:element ref="owl:AnonymousIndividual"/>
          </xsd:choice>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="RequestWithOneIndividualOProperty">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:element ref="owl:ObjectProperty"/>
          <xsd:choice>
            <xsd:element ref="owl:NamedIndividual"/>
            <xsd:element ref="owl:AnonymousIndividual"/>
          </xsd:choice>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="KBRequestWithOneIndividualAndObjectPropertyNegativeAttribute">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:element ref="owl:ObjectProperty" maxOccurs="1" minOccurs="1"/>
          <xsd:choice maxOccurs="1" minOccurs="1">
            <xsd:element ref="owl:NamedIndividual"/>
            <xsd:element ref="owl:AnonymousIndividual"/>
          </xsd:choice>
        </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:choice>
            <xsd:element ref="owl:NamedIndividual"/>
            <xsd:element ref="owl:AnonymousIndividual"/>
          </xsd:choice>
          <xsd:group ref="owl:ClassExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="RequestWithOneIndividual">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:choice>
            <xsd:element ref="owl:NamedIndividual"/>
            <xsd:element ref="owl:AnonymousIndividual"/>
          </xsd:choice>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="KBRequestWithOneIndividualAndNegativeAttribute">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:choice>
            <xsd:element ref="owl:NamedIndividual"/>
            <xsd:element ref="owl:AnonymousIndividual"/>
          </xsd:choice>
        </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="owl:Literal"/>
        </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:choice>
            <xsd:element ref="owl:NamedIndividual"/>
            <xsd:element ref="owl:AnonymousIndividual"/>
          </xsd:choice>
          <xsd:choice>
            <xsd:element ref="owl:NamedIndividual"/>
            <xsd:element ref="owl:AnonymousIndividual"/>
          </xsd:choice>
        </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:choice>
            <xsd:element ref="owl:NamedIndividual"/>
            <xsd:element ref="owl:AnonymousIndividual"/>
          </xsd:choice>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="KBRequestWithIndividualLiteral">
    <xsd:complexContent>
      <xsd:extension base="ol:KBRequest">
        <xsd:sequence>
          <xsd:choice>
            <xsd:element ref="owl:NamedIndividual"/>
            <xsd:element ref="owl:AnonymousIndividual"/>
          </xsd:choice>
          <xsd:element ref="owl:Literal"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!--  OWLlink Management directives  -->
  <xsd:element name="Datatype">
    <xsd:complexType>
      <xsd:attribute name="IRI" type="xsd:anyURI" use="optional"/>
      <xsd:attribute name="abbreviatedIRI" type="owl:abbreviatedIRI" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Literal">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:string"/>
      </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:element name="List">
    <xsd:complexType>
      <xsd:attribute name="IRI" type="xsd:anyURI" use="optional"/>
      <xsd:attribute name="abbreviatedIRI" type="owl:abbreviatedIRI" use="optional"/>
    </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:attribute name="IRI" type="xsd:anyURI" use="optional"/>
      <xsd:attribute name="abbreviatedIRI" type="owl:abbreviatedIRI" use="optional"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:complexType name="Setting">
    <xsd:sequence>
      <xsd:group ref="ol:DataRange" maxOccurs="1"/>
      <xsd:element ref="ol:Literal" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="key" type="xsd:string" use="required"/>
  </xsd:complexType>
  <xsd:element name="Setting" type="ol:Setting"/>
  <xsd:element name="Property" type="ol:Setting"/>
  <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="Classify" type="ol:KBRequest"/>
  <xsd:element name="Realize" type="ol:KBRequest"/>
  <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:sequence>
            <xsd:element name="Prefix" minOccurs="0" maxOccurs="unbounded">
              <xsd:complexType>
                <xsd:attribute name="name" type="xsd:string" use="required"/>
                <xsd:attribute name="fullIRI" type="xsd:anyURI" use="required"/>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
          <xsd:attribute name="kb" type="xsd:anyURI" 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="IsKBConsistentlyDeclared" type="ol:KBRequest"/>
  <xsd:element name="GetKBLanguage" 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>
  <xsd:element name="GetDisjointClasses" type="ol:KBRequestWithOneDescription"/>
  <!-- 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="owl:Class"/>
          </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:complexContent>
    </xsd:complexType>
  </xsd:element>
  <!-- Ask-IndividuualClassQuerysynsets -->
  <xsd:element name="GetFlattenedTypes">
    <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:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="GetEquivalentIndividuals" type="ol:RequestWithOneIndividual"/>
  <xsd:element name="GetDisjointIndividuals" type="ol:RequestWithOneIndividual"/>
  <xsd:element name="GetFlattenedDisjointIndividuals" 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:choice>
              <xsd:element ref="owl:NamedIndividual"/>
              <xsd:element ref="owl:AnonymousIndividual"/>
            </xsd:choice>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="GetObjectPropertiesOfTarget"
    type="ol:KBRequestWithOneIndividualAndNegativeAttribute"/>
  <xsd:element name="AreIndividualsRelated">
    <!-- ObjectProperty sourceIndividual targetIndividual-->
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequestWithNegativeAttribute">
          <xsd:sequence>
            <xsd:group ref="owl:ObjectPropertyExpression" minOccurs="1" maxOccurs="1"/>
            <xsd:choice minOccurs="1" maxOccurs="1">
              <xsd:element ref="owl:NamedIndividual"/>
              <xsd:element ref="owl:AnonymousIndividual"/>
            </xsd:choice>
            <xsd:choice minOccurs="1" maxOccurs="1">
              <xsd:element ref="owl:NamedIndividual"/>
              <xsd:element ref="owl:AnonymousIndividual"/>
            </xsd:choice>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="IsIndividualRelatedWithLiteral">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequestWithNegativeAttribute">
          <xsd:sequence>
            <xsd:element ref="owl:DataProperty" minOccurs="1" maxOccurs="1"/>      
            <xsd:choice minOccurs="1" maxOccurs="1">
              <xsd:element ref="owl:NamedIndividual"/>
              <xsd:element ref="owl:AnonymousIndividual"/>
            </xsd:choice>
            <xsd:element ref="owl:Literal" 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:KBRequestWithNegativeAttribute">
          <xsd:sequence>
            <xsd:choice minOccurs="1" maxOccurs="1">
              <xsd:element ref="owl:NamedIndividual"/>
              <xsd:element ref="owl:AnonymousIndividual"/>
            </xsd:choice>
          </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="owl:Literal"/>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="GetDataPropertiesOfLiteral"
    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:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="GetObjectPropertyTargets"
    type="ol:KBRequestWithOneIndividualAndObjectPropertyNegativeAttribute"/>
  <xsd:element name="GetObjectPropertySources"
    type="ol:KBRequestWithOneIndividualAndObjectPropertyNegativeAttribute"/>
  <!-- Ask-IndividualIndividualQueriesFlatten-->
  <xsd:element name="GetFlattenedInstances">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequestWithOneDescription">
          <xsd:attribute name="direct" type="xsd:boolean" default="false"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="GetFlattenedObjectPropertyTargets"
    type="ol:KBRequestWithOneIndividualAndObjectPropertyNegativeAttribute"/>
  <xsd:element name="GetFlattenedObjectPropertySources"
    type="ol:KBRequestWithOneIndividualAndObjectPropertyNegativeAttribute"/>
  <!-- Ask-IndividualIndividualDataQueriesSynsets-->
  <xsd:element name="GetDataPropertyTargets" type="ol:RequestWithOneIndividualDataProperty"/>
  <xsd:element name="GetDataPropertySources">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequestWithOneDataPropertyLiteral">
          <xsd:attribute ref="ol:negative"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <!-- Ask-IndividualIndividualDataQueriesFlatten -->
  <xsd:element name="GetFlattenedDataPropertySources">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequestWithOneDataPropertyLiteral">
          <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-->
  <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="owl: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"/>
  <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"/>
  <xsd:element name="LoadOntologies">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequest">
          <xsd:sequence>
            <xsd:element name="OntologyIRI" minOccurs="1" maxOccurs="unbounded">
              <xsd:complexType>
                <xsd:attribute name="IRI" type="xsd:anyURI" use="required"/>
              </xsd:complexType>
            </xsd:element>
            <xsd:element name="IRIMapping" minOccurs="0" maxOccurs="unbounded">
              <xsd:complexType>
                <xsd:attribute name="key" type="xsd:string" use="required"/>
                <xsd:attribute name="value" type="xsd:anyURI" use="required"/>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
          <xsd:attribute name="considerImports" type="xsd:boolean" default="true" use="optional"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <!-- 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 -->
  <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="owl: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"/>
  <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:IsKBConsistentlyDeclared"/>
      <xsd:element ref="ol:GetKBLanguage"/>
      <xsd:element ref="ol:LoadOntologies"/>
      <!-- reasoner invocation -->
      <xsd:element ref="ol:Classify"/>
      <xsd:element ref="ol:Realize"/>
      <!-- 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"/>
      <xsd:element ref="ol:GetDisjointClasses"/>
      <!-- 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:GetFlattenedTypes"/>
      <xsd:element ref="ol:GetEquivalentIndividuals"/>
      <xsd:element ref="ol:GetDisjointIndividuals"/>
      <xsd:element ref="ol:GetFlattenedDisjointIndividuals"/>
      <!-- Ask-IndividualPropertyQueries -->
      <xsd:element ref="ol:GetObjectPropertiesOfSource"/>
      <xsd:element ref="ol:GetObjectPropertiesBetween"/>
      <xsd:element ref="ol:GetObjectPropertiesOfTarget"/>
      <!-- Ask-IndividualDataPropertyQueries -->
      <xsd:element ref="ol:GetDataPropertiesOfSource"/>
      <xsd:element ref="ol:GetDataPropertiesBetween"/>
      <xsd:element ref="ol:GetDataPropertiesOfLiteral"/>
      <!-- Ask-IndividualIndividualQueries -->
      <xsd:element ref="ol:GetInstances"/>
      <xsd:element ref="ol:GetObjectPropertyTargets"/>
      <xsd:element ref="ol:GetObjectPropertySources"/>
      <!-- Ask-IndividualIndividualQueriesFlatten-->
      <xsd:element ref="ol:GetFlattenedInstances"/>
      <xsd:element ref="ol:GetFlattenedObjectPropertyTargets"/>
      <xsd:element ref="ol:GetFlattenedObjectPropertySources"/>
      <!-- Ask-IndividualIndividualDataQueriesSynsets-->
      <xsd:element ref="ol:GetDataPropertyTargets"/>
      <xsd:element ref="ol:GetDataPropertySources"/>
      <!-- Ask-IndividualIndividualDataQueriesFlatten -->
      <xsd:element ref="ol:GetFlattenedDataPropertySources"/>
      <!-- Ask-ObjectPropQueries -->
      <xsd:element ref="ol:GetSubObjectProperties"/>
      <xsd:element ref="ol:GetSuperObjectProperties"/>

      <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 -->
      <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:IsIndividualRelatedWithLiteral"/>
      <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:attributeGroup ref="xml:specialAttrs"/>
    </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="error" type="xsd:string" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:group name="SetOfClasses">
    <xsd:sequence>
      <xsd:element ref="owl:Class" 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="owl:Class" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:group name="SetOfClassSynsets">
    <xsd:sequence>
      <xsd:element name="ClassSynset" type="ol:ClassSynset" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>
  <xsd:group name="SetOfIndividuals">
    <xsd:sequence>
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element ref="owl:NamedIndividual"/>
        <xsd:element ref="owl:AnonymousIndividual"/>
      </xsd:choice>
    </xsd:sequence>
  </xsd:group>
  <xsd:complexType name="IndividualSynset">
    <xsd:sequence>
      <xsd:choice minOccurs="1" maxOccurs="unbounded">
        <xsd:element ref="owl:NamedIndividual"/>
        <xsd:element ref="owl:AnonymousIndividual"/>
      </xsd:choice>
    </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="owl:AnnotationProperty" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>
  <xsd:group name="SetOfLiterals">
    <xsd:sequence>
      <xsd:element ref="owl:Literal" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>
  <xsd:group name="SetOfDatatypes">
    <xsd:sequence>
      <xsd:element ref="owl:Datatype" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>
  <xsd:group name="SetOfObjectProperties">
    <xsd:sequence>
      <xsd:element ref="owl:ObjectProperty" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>
  <xsd:complexType name="ObjectPropertySynset">
    <xsd:sequence>
      <xsd:element ref="owl: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="owl:DataProperty" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>
  <xsd:complexType name="DataPropertySynset">
    <xsd:sequence>
      <xsd:element ref="owl: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="Description">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="ProtocolVersion" minOccurs="1" maxOccurs="1">
          <xsd:complexType>
            <xsd:attribute name="major" type="xsd:integer" use="required"/>
            <xsd:attribute name="minor" type="xsd:integer" use="required"/>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="ReasonerVersion" minOccurs="1" maxOccurs="1">
          <xsd:complexType>
            <xsd:attribute name="major" type="xsd:integer" use="required"/>
            <xsd:attribute name="minor" type="xsd:integer" use="required"/>
            <xsd:attribute name="build" type="xsd:integer" use="required"/>
          </xsd:complexType>
        </xsd:element>
        <xsd:group ref="ol:Setup" minOccurs="0"/>
        <xsd:element name="SupportedExtension" minOccurs="0" maxOccurs="unbounded">
          <xsd:complexType>
            <xsd:attribute name="identifier" type="xsd:anyURI" use="required"/>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="PublicKB" minOccurs="0" maxOccurs="unbounded">
          <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:sequence>
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <xsd:attribute name="message" type="xsd:string" use="optional"/>
    </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: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="SetOfLiterals">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:group ref="ol:SetOfLiterals"/>
        </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: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="1" maxOccurs="unbounded">
            <xsd:element name="ClassSubClassesPair">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="ClassSynset" type="ol:ClassSynset"/>
                  <xsd:element ref="ol:SetOfClassSynsets"/>
                </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: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: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="1" maxOccurs="unbounded">
            <xsd:element name="ObjectPropertySubObjectPropertiesPair">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="ObjectPropertySynset" type="ol:ObjectPropertySynset"/>
                  <xsd:element ref="ol:SetOfObjectPropertySynsets"/>
                </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: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: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="1" maxOccurs="unbounded">
            <xsd:element name="DataPropertySubDataPropertiesPair">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="DataPropertySynset" type="ol:DataPropertySynset"/>
                  <xsd:element ref="ol:SetOfDataPropertySynsets"/>
                </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:SetOfLiterals"/>
      <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:attributeGroup ref="xml:specialAttrs"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:attribute name="negative" type="xsd:boolean" default="false"/>
</xsd:schema>
