<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsd:schema [
    <!ENTITY PN_CHARS_BASE "[A-Z]|[a-z]|[&#x00C0;-&#x00D6;]|[&#x00D8;-&#x00F6;]|[&#x00F8;-&#x02FF;]|[&#x0370;-&#x037D;]|[&#x037F;-&#x1FFF;]|[&#x200C;-&#x200D;]|[&#x2070;-&#x218F;]|[&#x2C00;-&#x2FEF;]|[&#x3001;-&#xD7FF;]|[&#xF900;-&#xFDCF;]|[&#xFDF0;-&#xFFFD;]|[&#x10000;-&#xEFFFF;]">
    <!ENTITY PN_CHARS_U    "&PN_CHARS_BASE;|_">
    <!ENTITY PN_CHARS      "&PN_CHARS_U;|\-|[0-9]|&#x00B7;|[&#x0300;-&#x036F;]|[&#x203F;-&#x2040;]">
    <!ENTITY PN_PREFIX     "(&PN_CHARS_BASE;)((&PN_CHARS;|\.)*(&PN_CHARS;  ))?">
]>
<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#" targetNamespace="http://www.owllink.org/owllink#"
  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, Thorsten Liebig -->

  <!-- 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="GetPrefixes" 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" use="required">
                  <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                      <xsd:pattern value="&PN_PREFIX;|"/>
                    </xsd:restriction>
                  </xsd:simpleType>
                </xsd:attribute>
                <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>
  <xsd:element name="Prefixes">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <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: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"/>
  <!-- general entailment request -->
  <xsd:element name="IsEntailed">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequest">
          <xsd:sequence>
            <xsd:group ref="owl:Axiom" minOccurs="1" maxOccurs="1"/>
          </xsd:sequence>
          <xsd:attributeGroup ref="xml:specialAttrs"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="IsEntailedDirect">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBRequest">
          <xsd:choice>
            <xsd:element ref="owl:SubClassOf"/>
            <xsd:element ref="owl:SubObjectPropertyOf"/>
            <xsd:element ref="owl:SubDataPropertyOf"/>
            <xsd:element ref="owl:ClassAssertion"/>
          </xsd:choice>
          <xsd:attributeGroup ref="xml:specialAttrs"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <!-- Ask-ClassAsks-->
  <xsd:element name="IsClassSatisfiable" type="ol:KBRequestWithOneDescription"/>
  <!-- The first class is the subclass and the second one is the superclass -->
  <!-- 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-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="GetSameIndividuals" type="ol:RequestWithOneIndividual"/>
  <xsd:element name="GetDifferentIndividuals" type="ol:RequestWithOneIndividual"/>
  <xsd:element name="GetFlattenedDifferentIndividuals" 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"/>
  <!-- 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 name="negative" type="xsd:boolean" default="false"/>
        </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 name="negative" type="xsd:boolean" default="false"/>
        </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="IsObjectPropertySatisfiable" 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="IsDataPropertySatisfiable" type="ol:KBRequestWithOneDataPropertyExpression"/>
  <xsd:group name="Request">
    <xsd:choice>
      <!--  Management -->
      <xsd:element ref="ol:GetDescription"/>
      <xsd:element ref="ol:GetSettings"/>
      <xsd:element ref="ol:GetPrefixes"/>
      <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"/>
      <!-- general entailment request -->
      <xsd:element ref="ol:IsEntailed"/>
      <xsd:element ref="ol:IsEntailedDirect"/>
      <!-- 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"/>
      <!-- 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-IndividuualClassQuerysynsets -->
      <xsd:element ref="ol:GetTypes"/>
      <xsd:element ref="ol:GetFlattenedTypes"/>
      <xsd:element ref="ol:GetSameIndividuals"/>
      <xsd:element ref="ol:GetDifferentIndividuals"/>
      <xsd:element ref="ol:GetFlattenedDifferentIndividuals"/>
      <!-- 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:IsObjectPropertySatisfiable"/>
      <!--  Ask-DataPropAsks -->
      <xsd:element ref="ol:IsDataPropertySatisfiable"/>
      <!-- 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: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="ClassSynsets">
    <xsd:sequence>
      <xsd:element name="ClassSynset" type="ol:ClassSynset" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>
  <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="ObjectPropertySynsets">
    <xsd:sequence>
      <xsd:element name="ObjectPropertySynset" type="ol:ObjectPropertySynset" minOccurs="1" 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:group name="DataPropertySynsets">
    <xsd:sequence>
      <xsd:element name="DataPropertySynset" type="ol:DataPropertySynset" minOccurs="1" 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="IndividualSynonyms">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:sequence>
            <xsd:choice minOccurs="1" maxOccurs="unbounded">
              <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="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:SetOfDataProperties"/>
        </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>
  <xsd:element name="Unknown">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <!-- Ask-ClassQueries-->
  <xsd:element name="ClassSynsets">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:group ref="ol:ClassSynsets"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <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>
  <xsd:element name="Classes">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:sequence>
          <xsd:element ref="owl:Class" minOccurs="1" maxOccurs="unbounded"/>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="SubClassSynsets">
    <xsd:complexType>
      <xsd:group ref="ol:ClassSynsets"/>
    </xsd:complexType>
  </xsd:element>
  <!-- Ask-ClassHierarchy -->
  <xsd:element name="ClassHierarchy">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:sequence>
            <!-- the synset of unsatisfiable classes -->
            <xsd:element name="ClassSynset" type="ol:ClassSynset"/>
            <xsd:element name="ClassSubClassesPair" minOccurs="0" maxOccurs="unbounded">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="ClassSynset" type="ol:ClassSynset"/>
                  <xsd:element ref="ol:SubClassSynsets"/>
                </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>
            <!-- the synset of unsatisfiable object properties -->
            <xsd:element name="ObjectPropertySynset" type="ol:ObjectPropertySynset"/>
            <xsd:sequence minOccurs="0" maxOccurs="unbounded">
              <xsd:element name="ObjectPropertySubObjectPropertiesPair">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="ObjectPropertySynset" type="ol:ObjectPropertySynset"/>
                    <xsd:element ref="ol:SubObjectPropertySynsets"/>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </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="ObjectPropertySynsets">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:group ref="ol:ObjectPropertySynsets"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="SubObjectPropertySynsets">
    <xsd:complexType>
      <xsd:group ref="ol:ObjectPropertySynsets"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="DataPropertySynonyms">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:sequence>
            <xsd:element ref="owl:DataProperty" minOccurs="1" maxOccurs="unbounded"/>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="DataPropertySynsets">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="ol:KBResponse">
          <xsd:group ref="ol:DataPropertySynsets"/>
        </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>
            <!-- the synset of unsatisfiable data properties -->
            <xsd:element name="DataPropertySynset" type="ol:DataPropertySynset"/>
            <xsd:sequence minOccurs="0" maxOccurs="unbounded">
              <xsd:element name="DataPropertySubDataPropertiesPair">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="DataPropertySynset" type="ol:DataPropertySynset"/>
                    <xsd:element ref="ol:SubDataPropertySynsets"/>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="SubDataPropertySynsets">
    <xsd:complexType>
      <xsd:group ref="ol:DataPropertySynsets"/>
    </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:Prefixes"/>
      <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"/>
      <xsd:element ref="ol:StringResponse"/>
      <xsd:element ref="ol:Unknown"/>
      <!-- Ask-ClassQueries-->
      <xsd:element ref="ol:ClassSynsets"/>
      <xsd:element ref="ol:SetOfClassSynsets"/>
      <xsd:element ref="ol:Classes"/>
      <!-- Ask-ClassHierarchy -->
      <xsd:element ref="ol:ClassHierarchy"/>
      <!-- Ask-IndividualDataPropertyQueries -->
      <xsd:element ref="ol:SetOfDataPropertySynsets"/>
      <!-- GetEquivalentDataProperties -->
      <xsd:element ref="ol:DataPropertySynonyms"/>
      <!-- Ask-IndividualIndividualQueries -->
      <xsd:element ref="ol:SetOfIndividualSynsets"/>
      <!-- Ask-IndividualQueries -->
      <xsd:element ref="ol:IndividualSynonyms"/>
      <!-- Ask-ObjectPropertyHierarchy -->
      <xsd:element ref="ol:ObjectPropertyHierarchy"/>
      <xsd:element ref="ol:SetOfObjectPropertySynsets"/>
      <xsd:element ref="ol:ObjectPropertySynsets"/>
      <!-- Ask-DataPropertyHierarchy -->
      <xsd:element ref="ol:DataPropertyHierarchy"/>
      <xsd:element ref="ol:DataPropertySynsets"/>
      <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:schema>
