Difference between revisions of "OWL XML Schema"

From OWL
Jump to: navigation, search
(Fixed name vs. ref for AbbreviatedIRI in annotations as reported in <http://lists.w3.org/Archives/Public/public-owl-comments/2009Oct/0000.html>)
(One intermediate revision by one user not shown)
Line 1: Line 1:
<pre>
+
<pre><!DOCTYPE xsd:schema [
<!DOCTYPE xsd:schema [
+
    <!ENTITY PN_CHARS_BASE "[A-Z]|[a-z]|[&amp;#x00C0;-&amp;#x00D6;]|[&amp;#x00D8;-&amp;#x00F6;]|[&amp;#x00F8;-&amp;#x02FF;]|[&amp;#x0370;-&amp;#x037D;]|[&amp;#x037F;-&amp;#x1FFF;]|[&amp;#x200C;-&amp;#x200D;]|[&amp;#x2070;-&amp;#x218F;]|[&amp;#x2C00;-&amp;#x2FEF;]|[&amp;#x3001;-&amp;#xD7FF;]|[&amp;#xF900;-&amp;#xFDCF;]|[&amp;#xFDF0;-&amp;#xFFFD;]|[&amp;#x10000;-&amp;#xEFFFF;]">
<!ENTITY PN_CHARS_BASE "[A-Z]|[a-z]|[&amp;#x00C0;-&amp;#x00D6;]|[&amp;#x00D8;-&amp;#x00F6;]|[&amp;#x00F8;-&amp;#x02FF;]|[&amp;#x0370;-&amp;#x037D;]|[&amp;#x037F;-&amp;#x1FFF;]|[&amp;#x200C;-&amp;#x200D;]|[&amp;#x2070;-&amp;#x218F;]|[&amp;#x2C00;-&amp;#x2FEF;]|[&amp;#x3001;-&amp;#xD7FF;]|[&amp;#xF900;-&amp;#xFDCF;]|[&amp;#xFDF0;-&amp;#xFFFD;]|[&amp;#x10000;-&amp;#xEFFFF;]">
+
    <!ENTITY PN_CHARS_U    "&amp;PN_CHARS_BASE;|_">
<!ENTITY PN_CHARS_U    "&amp;PN_CHARS_BASE;|_">
+
    <!ENTITY PN_CHARS      "&amp;PN_CHARS_U;|\-|[0-9]|&amp;#x00B7;|[&amp;#x0300;-&amp;#x036F;]|[&amp;#x203F;-&amp;#x2040;]">
<!ENTITY PN_CHARS      "&amp;PN_CHARS_U;|\-|[0-9]|&amp;#x00B7;|[&amp;#x0300;-&amp;#x036F;]|[&amp;#x203F;-&amp;#x2040;]">
+
    <!ENTITY PN_PREFIX    "(&amp;PN_CHARS_BASE;)((&amp;PN_CHARS;|\.)*(&amp;PN_CHARS;  ))?">
<!ENTITY PN_PREFIX    "(&amp;PN_CHARS_BASE;)((&amp;PN_CHARS;|\.)*(&amp;PN_CHARS;  ))?">
+
    <!ENTITY PN_LOCAL     "(&amp;PN_CHARS_U;|[0-9])((&amp;PN_CHARS;|\.)*(&amp;PN_CHARS;))?">
<!ENTITY PN_LOCAL     "(&amp;PN_CHARS_U;|[0-9])((&amp;PN_CHARS;|\.)*(&amp;PN_CHARS;))?">
+
    <!ENTITY PNAME_NS      "(&amp;PN_PREFIX;)?:">
<!ENTITY PNAME_NS      "(&amp;PN_PREFIX;)?:">
+
    <!ENTITY PNAME_LN     "(&amp;PNAME_NS;)(&amp;PN_LOCAL;)">
<!ENTITY PNAME_LN     "(&amp;PNAME_NS;)(&amp;PN_LOCAL;)">
+
    <!ENTITY PrefixedName  "(&amp;PNAME_LN;)|(&amp;PNAME_NS;)">
<!ENTITY PrefixedName  "(&amp;PNAME_LN;)|(&amp;PNAME_NS;)">
+
    ]>
]>
+
 
<!--  From: http://www.w3.org/TR/rdf-sparql-query/#grammar  
 
<!--  From: http://www.w3.org/TR/rdf-sparql-query/#grammar  
 
   The entities implement productions [95] (PN_CHARS_BASE), [96] (PN_CHARS_U), [98] (PN_CHARS), [99] (PN_PREFIX),
 
   The entities implement productions [95] (PN_CHARS_BASE), [96] (PN_CHARS_U), [98] (PN_CHARS), [99] (PN_PREFIX),
Line 1,059: Line 1,058:
 
     <xsd:choice>
 
     <xsd:choice>
 
       <xsd:element ref="owl:IRI"/>
 
       <xsd:element ref="owl:IRI"/>
       <xsd:element name="AbbreviatedIRI"/>
+
       <xsd:element ref="owl:AbbreviatedIRI"/>
 
       <xsd:element ref="owl:AnonymousIndividual"/>
 
       <xsd:element ref="owl:AnonymousIndividual"/>
 
     </xsd:choice>
 
     </xsd:choice>
Line 1,067: Line 1,066:
 
     <xsd:choice>
 
     <xsd:choice>
 
       <xsd:element ref="owl:IRI"/>
 
       <xsd:element ref="owl:IRI"/>
       <xsd:element name="AbbreviatedIRI"/>
+
       <xsd:element ref="owl:AbbreviatedIRI"/>
 
       <xsd:element ref="owl:AnonymousIndividual"/>
 
       <xsd:element ref="owl:AnonymousIndividual"/>
 
       <xsd:element ref="owl:Literal"/>
 
       <xsd:element ref="owl:Literal"/>
Line 1,150: Line 1,149:
 
           <xsd:element ref="owl:AnnotationProperty"/>
 
           <xsd:element ref="owl:AnnotationProperty"/>
 
           <xsd:element ref="owl:IRI"/>
 
           <xsd:element ref="owl:IRI"/>
           <xsd:element name="AbbreviatedIRI"/>
+
           <xsd:element ref="owl:AbbreviatedIRI"/>
 
         </xsd:sequence>
 
         </xsd:sequence>
 
       </xsd:extension>
 
       </xsd:extension>
Line 1,163: Line 1,162:
 
           <xsd:element ref="owl:AnnotationProperty"/>
 
           <xsd:element ref="owl:AnnotationProperty"/>
 
           <xsd:element ref="owl:IRI"/>
 
           <xsd:element ref="owl:IRI"/>
           <xsd:element name="AbbreviatedIRI"/>
+
           <xsd:element ref="owl:AbbreviatedIRI"/>
 
         </xsd:sequence>
 
         </xsd:sequence>
 
       </xsd:extension>
 
       </xsd:extension>

Revision as of 15:48, 12 October 2009

<!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;  ))?">
    <!ENTITY PN_LOCAL	     "(&PN_CHARS_U;|[0-9])((&PN_CHARS;|\.)*(&PN_CHARS;))?">
    <!ENTITY PNAME_NS      "(&PN_PREFIX;)?:">
    <!ENTITY PNAME_LN	     "(&PNAME_NS;)(&PN_LOCAL;)">
    <!ENTITY PrefixedName  "(&PNAME_LN;)|(&PNAME_NS;)">
    ]>
<!--  From: http://www.w3.org/TR/rdf-sparql-query/#grammar 
  The entities implement productions [95] (PN_CHARS_BASE), [96] (PN_CHARS_U), [98] (PN_CHARS), [99] (PN_PREFIX),
  [100] (PN_LOCAL), [71] (PNAME_NS), [72] (PNAME_LN) and  [68] (PrefixedName)
  
  PN_PREFIX is roughly equivalent to NCName.-->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:owl="http://www.w3.org/2002/07/owl#"
  targetNamespace="http://www.w3.org/2002/07/owl#" elementFormDefault="qualified"
  attributeFormDefault="unqualified">

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

  <!-- The ontology -->

  <xsd:complexType name="Prefix">
    <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="IRI" type="xsd:anyURI" use="required"/>
  </xsd:complexType>
  <xsd:element name="Prefix" type="owl:Prefix"/>

  <xsd:complexType name="Import">
    <xsd:simpleContent>
      <xsd:extension base="xsd:anyURI">
        <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <xsd:element name="Import" type="owl:Import"/>

  <xsd:complexType name="Ontology">
    <xsd:sequence>
      <xsd:element ref="owl:Prefix" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element ref="owl:Import" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="owl:ontologyAnnotations"/>
      <xsd:group ref="owl:Axiom" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="ontologyIRI" type="xsd:anyURI" use="optional"/>
    <xsd:attribute name="versionIRI" type="xsd:anyURI" use="optional"/>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
  <xsd:element name="Ontology" type="owl:Ontology">
    <xsd:unique name="prefix">
      <xsd:selector xpath="owl:Prefix"/>
      <xsd:field xpath="@name"/>
    </xsd:unique>
  </xsd:element>

  <!-- Entities, anonymous individuals, and literals -->

  <!-- Note that the "Entity" group does not have a corresponding abstract type.
       This is due to the fact that XML Schema does not support multiple inheritence.
       "owl:Class" is both an entity and a class expression. The authors of this schema
       determined it was more useful to be able to retrieve "owl:Class" in such queries
       as schema(*, owl:ClassExpression).
        -->
  <xsd:group name="Entity">
    <xsd:choice>
      <xsd:element ref="owl:Class"/>
      <xsd:element ref="owl:Datatype"/>
      <xsd:element ref="owl:ObjectProperty"/>
      <xsd:element ref="owl:DataProperty"/>
      <xsd:element ref="owl:AnnotationProperty"/>
      <xsd:element ref="owl:NamedIndividual"/>
    </xsd:choice>
  </xsd:group>

  <!-- This is the type for the attribute. The complex type for the element is capitalized. -->
  <xsd:simpleType name="abbreviatedIRI">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="&PrefixedName;"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:complexType name="Class">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:attribute name="IRI" type="xsd:anyURI" use="optional"/>
        <xsd:attribute name="abbreviatedIRI" type="owl:abbreviatedIRI" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Class" type="owl:Class"/>

  <xsd:complexType name="Datatype">
    <xsd:complexContent>
      <xsd:extension base="owl:DataRange">
        <xsd:attribute name="IRI" type="xsd:anyURI" use="optional"/>
        <xsd:attribute name="abbreviatedIRI" type="owl:abbreviatedIRI" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Datatype" type="owl:Datatype"/>

  <xsd:complexType name="ObjectProperty">
    <xsd:complexContent>
      <xsd:extension base="owl:ObjectPropertyExpression">
        <xsd:attribute name="IRI" type="xsd:anyURI" use="optional"/>
        <xsd:attribute name="abbreviatedIRI" type="owl:abbreviatedIRI" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ObjectProperty" type="owl:ObjectProperty"/>

  <xsd:complexType name="DataProperty">
    <xsd:complexContent>
      <xsd:extension base="owl:DataPropertyExpression">
        <xsd:attribute name="IRI" type="xsd:anyURI" use="optional"/>
        <xsd:attribute name="abbreviatedIRI" type="owl:abbreviatedIRI" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DataProperty" type="owl:DataProperty"/>

  <xsd:complexType name="AnnotationProperty">
    <xsd:attribute name="IRI" type="xsd:anyURI" use="optional"/>
    <xsd:attribute name="abbreviatedIRI" type="owl:abbreviatedIRI" use="optional"/>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
  <xsd:element name="AnnotationProperty" type="owl:AnnotationProperty"/>

  <xsd:complexType name="Individual" abstract="true">
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
  <xsd:group name="Individual">
    <xsd:choice>
      <xsd:element ref="owl:NamedIndividual"/>
      <xsd:element ref="owl:AnonymousIndividual"/>
    </xsd:choice>
  </xsd:group>

  <xsd:complexType name="NamedIndividual">
    <xsd:complexContent>
      <xsd:extension base="owl:Individual">
        <xsd:attribute name="IRI" type="xsd:anyURI" use="optional"/>
        <xsd:attribute name="abbreviatedIRI" type="owl:abbreviatedIRI" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="NamedIndividual" type="owl:NamedIndividual"/>

  <xsd:complexType name="AnonymousIndividual">
    <xsd:complexContent>
      <xsd:extension base="owl:Individual">
        <xsd:attribute name="nodeID" type="xsd:NCName" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AnonymousIndividual" type="owl:AnonymousIndividual"/>

  <xsd:complexType name="Literal">
    <xsd:simpleContent>
      <xsd:extension base="xsd:string">
        <xsd:attribute name="datatypeIRI" type="xsd:anyURI"/>
        <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <xsd:element name="Literal" type="owl:Literal"/>

  <!-- Declarations -->

  <xsd:complexType name="Declaration">
    <xsd:complexContent>
      <xsd:extension base="owl:Axiom">
        <xsd:sequence>
          <xsd:group ref="owl:Entity"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Declaration" type="owl:Declaration"/>

  <!-- Object property expressions -->

  <xsd:complexType name="ObjectPropertyExpression" abstract="true">
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
  <xsd:group name="ObjectPropertyExpression">
    <xsd:choice>
      <xsd:element ref="owl:ObjectProperty"/>
      <xsd:element ref="owl:ObjectInverseOf"/>
    </xsd:choice>
  </xsd:group>

  <xsd:complexType name="ObjectInverseOf">
    <xsd:complexContent>
      <xsd:extension base="owl:ObjectPropertyExpression">
        <xsd:sequence>
          <xsd:element ref="owl:ObjectProperty"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ObjectInverseOf" type="owl:ObjectInverseOf"/>

  <!-- Data property expressions -->

  <xsd:complexType name="DataPropertyExpression" abstract="true">
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
  <xsd:group name="DataPropertyExpression">
    <xsd:sequence>
      <xsd:element ref="owl:DataProperty"/>
    </xsd:sequence>
  </xsd:group>

  <!-- Data ranges -->

  <xsd:complexType name="DataRange" abstract="true">
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
  <xsd:group name="DataRange">
    <xsd:choice>
      <xsd:element ref="owl:Datatype"/>
      <xsd:element ref="owl:DataIntersectionOf"/>
      <xsd:element ref="owl:DataUnionOf"/>
      <xsd:element ref="owl:DataComplementOf"/>
      <xsd:element ref="owl:DataOneOf"/>
      <xsd:element ref="owl:DatatypeRestriction"/>
    </xsd:choice>
  </xsd:group>

  <xsd:complexType name="DataIntersectionOf">
    <xsd:complexContent>
      <xsd:extension base="owl:DataRange">
        <xsd:sequence>
          <xsd:group ref="owl:DataRange" minOccurs="2" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DataIntersectionOf" type="owl:DataIntersectionOf"/>

  <xsd:complexType name="DataUnionOf">
    <xsd:complexContent>
      <xsd:extension base="owl:DataRange">
        <xsd:sequence>
          <xsd:group ref="owl:DataRange" minOccurs="2" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DataUnionOf" type="owl:DataUnionOf"/>

  <xsd:complexType name="DataComplementOf">
    <xsd:complexContent>
      <xsd:extension base="owl:DataRange">
        <xsd:sequence>
          <xsd:group ref="owl:DataRange"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DataComplementOf" type="owl:DataComplementOf"/>

  <xsd:complexType name="DataOneOf">
    <xsd:complexContent>
      <xsd:extension base="owl:DataRange">
        <xsd:sequence>
          <xsd:element ref="owl:Literal" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DataOneOf" type="owl:DataOneOf"/>

  <xsd:complexType name="DatatypeRestriction">
    <xsd:complexContent>
      <xsd:extension base="owl:DataRange">
        <xsd:sequence>
          <xsd:element ref="owl:Datatype"/>
          <xsd:element name="FacetRestriction" type="owl:FacetRestriction" minOccurs="1"
            maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DatatypeRestriction" type="owl:DatatypeRestriction"/>

  <xsd:complexType name="FacetRestriction">
    <xsd:sequence>
      <xsd:element ref="owl:Literal"/>
    </xsd:sequence>
    <xsd:attribute name="facet" type="xsd:anyURI" use="required"/>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>

  <!-- Class expressions -->

  <xsd:complexType name="ClassExpression" abstract="true">
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
  <xsd:group name="ClassExpression">
    <xsd:choice>
      <xsd:element ref="owl:Class"/>
      <xsd:element ref="owl:ObjectIntersectionOf"/>
      <xsd:element ref="owl:ObjectUnionOf"/>
      <xsd:element ref="owl:ObjectComplementOf"/>
      <xsd:element ref="owl:ObjectOneOf"/>
      <xsd:element ref="owl:ObjectSomeValuesFrom"/>
      <xsd:element ref="owl:ObjectAllValuesFrom"/>
      <xsd:element ref="owl:ObjectHasValue"/>
      <xsd:element ref="owl:ObjectHasSelf"/>
      <xsd:element ref="owl:ObjectMinCardinality"/>
      <xsd:element ref="owl:ObjectMaxCardinality"/>
      <xsd:element ref="owl:ObjectExactCardinality"/>
      <xsd:element ref="owl:DataSomeValuesFrom"/>
      <xsd:element ref="owl:DataAllValuesFrom"/>
      <xsd:element ref="owl:DataHasValue"/>
      <xsd:element ref="owl:DataMinCardinality"/>
      <xsd:element ref="owl:DataMaxCardinality"/>
      <xsd:element ref="owl:DataExactCardinality"/>
    </xsd:choice>
  </xsd:group>

  <xsd:complexType name="ObjectIntersectionOf">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:ClassExpression" minOccurs="2" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ObjectIntersectionOf" type="owl:ObjectIntersectionOf"/>

  <xsd:complexType name="ObjectUnionOf">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:ClassExpression" minOccurs="2" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ObjectUnionOf" type="owl:ObjectUnionOf"/>

  <xsd:complexType name="ObjectComplementOf">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:ClassExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ObjectComplementOf" type="owl:ObjectComplementOf"/>

  <xsd:complexType name="ObjectOneOf">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:Individual" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ObjectOneOf" type="owl:ObjectOneOf"/>

  <xsd:complexType name="ObjectSomeValuesFrom">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
          <xsd:group ref="owl:ClassExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ObjectSomeValuesFrom" type="owl:ObjectSomeValuesFrom"/>

  <xsd:complexType name="ObjectAllValuesFrom">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
          <xsd:group ref="owl:ClassExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ObjectAllValuesFrom" type="owl:ObjectAllValuesFrom"/>

  <xsd:complexType name="ObjectHasValue">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
          <xsd:group ref="owl:Individual"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ObjectHasValue" type="owl:ObjectHasValue"/>

  <xsd:complexType name="ObjectHasSelf">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ObjectHasSelf" type="owl:ObjectHasSelf"/>

  <xsd:complexType name="ObjectMinCardinality">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
          <xsd:group ref="owl:ClassExpression" minOccurs="0" maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="cardinality" type="xsd:nonNegativeInteger" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ObjectMinCardinality" type="owl:ObjectMinCardinality"/>

  <xsd:complexType name="ObjectMaxCardinality">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
          <xsd:group ref="owl:ClassExpression" minOccurs="0" maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="cardinality" type="xsd:nonNegativeInteger" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ObjectMaxCardinality" type="owl:ObjectMaxCardinality"/>

  <xsd:complexType name="ObjectExactCardinality">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
          <xsd:group ref="owl:ClassExpression" minOccurs="0" maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="cardinality" type="xsd:nonNegativeInteger" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ObjectExactCardinality" type="owl:ObjectExactCardinality"/>

  <xsd:complexType name="DataSomeValuesFrom">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:DataPropertyExpression" minOccurs="1" maxOccurs="unbounded"/>
          <xsd:group ref="owl:DataRange"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DataSomeValuesFrom" type="owl:DataSomeValuesFrom"/>

  <xsd:complexType name="DataAllValuesFrom">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:DataPropertyExpression" minOccurs="1" maxOccurs="unbounded"/>
          <xsd:group ref="owl:DataRange"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DataAllValuesFrom" type="owl:DataAllValuesFrom"/>

  <xsd:complexType name="DataHasValue">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:DataPropertyExpression"/>
          <xsd:element ref="owl:Literal"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DataHasValue" type="owl:DataHasValue"/>

  <xsd:complexType name="DataMinCardinality">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:DataPropertyExpression"/>
          <xsd:group ref="owl:DataRange" minOccurs="0" maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="cardinality" type="xsd:nonNegativeInteger" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DataMinCardinality" type="owl:DataMinCardinality"/>

  <xsd:complexType name="DataMaxCardinality">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:DataPropertyExpression"/>
          <xsd:group ref="owl:DataRange" minOccurs="0" maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="cardinality" type="xsd:nonNegativeInteger" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DataMaxCardinality" type="owl:DataMaxCardinality"/>

  <xsd:complexType name="DataExactCardinality">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassExpression">
        <xsd:sequence>
          <xsd:group ref="owl:DataPropertyExpression"/>
          <xsd:group ref="owl:DataRange" minOccurs="0" maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="cardinality" type="xsd:nonNegativeInteger" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DataExactCardinality" type="owl:DataExactCardinality"/>

  <!-- Axioms -->

  <xsd:complexType name="Axiom" abstract="true">
    <xsd:sequence>
      <xsd:group ref="owl:axiomAnnotations"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
  <xsd:group name="Axiom">
    <xsd:choice>
      <xsd:element ref="owl:Declaration"/>
      <xsd:group ref="owl:ClassAxiom"/>
      <xsd:group ref="owl:ObjectPropertyAxiom"/>
      <xsd:group ref="owl:DataPropertyAxiom"/>
      <xsd:element ref="owl:DatatypeDefinition"/>
      <xsd:element ref="owl:HasKey"/>
      <xsd:group ref="owl:Assertion"/>
      <xsd:group ref="owl:AnnotationAxiom"/>
    </xsd:choice>
  </xsd:group>

  <!-- Class expression axioms -->

  <xsd:complexType name="ClassAxiom" abstract="true">
    <xsd:complexContent>
      <xsd:extension base="owl:Axiom"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:group name="ClassAxiom">
    <xsd:choice>
      <xsd:element ref="owl:SubClassOf"/>
      <xsd:element ref="owl:EquivalentClasses"/>
      <xsd:element ref="owl:DisjointClasses"/>
      <xsd:element ref="owl:DisjointUnion"/>
    </xsd:choice>
  </xsd:group>

  <xsd:complexType name="SubClassOf">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:ClassExpression"/>
          <!-- This is the subexpression -->
          <xsd:group ref="owl:ClassExpression"/>
          <!-- This is the superexpression -->
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="SubClassOf" type="owl:SubClassOf"/>

  <xsd:complexType name="EquivalentClasses">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:ClassExpression" minOccurs="2" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="EquivalentClasses" type="owl:EquivalentClasses"/>

  <xsd:complexType name="DisjointClasses">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:ClassExpression" minOccurs="2" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DisjointClasses" type="owl:DisjointClasses"/>

  <xsd:complexType name="DisjointUnion">
    <xsd:complexContent>
      <xsd:extension base="owl:ClassAxiom">
        <xsd:sequence>
          <xsd:element ref="owl:Class"/>
          <xsd:group ref="owl:ClassExpression" minOccurs="2" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DisjointUnion" type="owl:DisjointUnion"/>

  <!-- Object property axioms -->

  <xsd:complexType name="ObjectPropertyAxiom" abstract="true">
    <xsd:complexContent>
      <xsd:extension base="owl:Axiom"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:group name="ObjectPropertyAxiom">
    <xsd:choice>
      <xsd:element ref="owl:SubObjectPropertyOf"/>
      <xsd:element ref="owl:EquivalentObjectProperties"/>
      <xsd:element ref="owl:DisjointObjectProperties"/>
      <xsd:element ref="owl:InverseObjectProperties"/>
      <xsd:element ref="owl:ObjectPropertyDomain"/>
      <xsd:element ref="owl:ObjectPropertyRange"/>
      <xsd:element ref="owl:FunctionalObjectProperty"/>
      <xsd:element ref="owl:InverseFunctionalObjectProperty"/>
      <xsd:element ref="owl:ReflexiveObjectProperty"/>
      <xsd:element ref="owl:IrreflexiveObjectProperty"/>
      <xsd:element ref="owl:SymmetricObjectProperty"/>
      <xsd:element ref="owl:AsymmetricObjectProperty"/>
      <xsd:element ref="owl:TransitiveObjectProperty"/>
    </xsd:choice>
  </xsd:group>

  <xsd:complexType name="SubObjectPropertyOf">
    <xsd:complexContent>
      <xsd:extension base="owl:ObjectPropertyAxiom">
        <xsd:sequence>
          <xsd:choice>
            <!-- This is the subproperty expression or the property chain -->
            <xsd:group ref="owl:ObjectPropertyExpression"/>
            <xsd:element name="ObjectPropertyChain" type="owl:ObjectPropertyChain"/>
          </xsd:choice>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
          <!-- This is the superproperty expression -->
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="SubObjectPropertyOf" type="owl:SubObjectPropertyOf"/>

  <xsd:complexType name="ObjectPropertyChain">
    <xsd:sequence>
      <xsd:group ref="owl:ObjectPropertyExpression" minOccurs="2" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>

  <xsd:complexType name="EquivalentObjectProperties">
    <xsd:complexContent>
      <xsd:extension base="owl:ObjectPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression" minOccurs="2" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="EquivalentObjectProperties" type="owl:EquivalentObjectProperties"/>

  <xsd:complexType name="DisjointObjectProperties">
    <xsd:complexContent>
      <xsd:extension base="owl:ObjectPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression" minOccurs="2" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DisjointObjectProperties" type="owl:DisjointObjectProperties"/>

  <xsd:complexType name="ObjectPropertyDomain">
    <xsd:complexContent>
      <xsd:extension base="owl:ObjectPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
          <xsd:group ref="owl:ClassExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ObjectPropertyDomain" type="owl:ObjectPropertyDomain"/>

  <xsd:complexType name="ObjectPropertyRange">
    <xsd:complexContent>
      <xsd:extension base="owl:ObjectPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
          <xsd:group ref="owl:ClassExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ObjectPropertyRange" type="owl:ObjectPropertyRange"/>

  <xsd:complexType name="InverseObjectProperties">
    <xsd:complexContent>
      <xsd:extension base="owl:ObjectPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression" minOccurs="2" maxOccurs="2"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="InverseObjectProperties" type="owl:InverseObjectProperties"/>

  <xsd:complexType name="FunctionalObjectProperty">
    <xsd:complexContent>
      <xsd:extension base="owl:ObjectPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="FunctionalObjectProperty" type="owl:FunctionalObjectProperty"/>

  <xsd:complexType name="InverseFunctionalObjectProperty">
    <xsd:complexContent>
      <xsd:extension base="owl:ObjectPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="InverseFunctionalObjectProperty" type="owl:InverseFunctionalObjectProperty"/>

  <xsd:complexType name="ReflexiveObjectProperty">
    <xsd:complexContent>
      <xsd:extension base="owl:ObjectPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ReflexiveObjectProperty" type="owl:ReflexiveObjectProperty"/>

  <xsd:complexType name="IrreflexiveObjectProperty">
    <xsd:complexContent>
      <xsd:extension base="owl:ObjectPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="IrreflexiveObjectProperty" type="owl:IrreflexiveObjectProperty"/>

  <xsd:complexType name="SymmetricObjectProperty">
    <xsd:complexContent>
      <xsd:extension base="owl:ObjectPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="SymmetricObjectProperty" type="owl:SymmetricObjectProperty"/>

  <xsd:complexType name="AsymmetricObjectProperty">
    <xsd:complexContent>
      <xsd:extension base="owl:ObjectPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AsymmetricObjectProperty" type="owl:AsymmetricObjectProperty"/>

  <xsd:complexType name="TransitiveObjectProperty">
    <xsd:complexContent>
      <xsd:extension base="owl:ObjectPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="TransitiveObjectProperty" type="owl:TransitiveObjectProperty"/>

  <!-- Data property axioms -->

  <xsd:complexType name="DataPropertyAxiom" abstract="true">
    <xsd:complexContent>
      <xsd:extension base="owl:Axiom"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:group name="DataPropertyAxiom">
    <xsd:choice>
      <xsd:element ref="owl:SubDataPropertyOf"/>
      <xsd:element ref="owl:EquivalentDataProperties"/>
      <xsd:element ref="owl:DisjointDataProperties"/>
      <xsd:element ref="owl:DataPropertyDomain"/>
      <xsd:element ref="owl:DataPropertyRange"/>
      <xsd:element ref="owl:FunctionalDataProperty"/>
    </xsd:choice>
  </xsd:group>

  <xsd:complexType name="SubDataPropertyOf">
    <xsd:complexContent>
      <xsd:extension base="owl:DataPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:DataPropertyExpression"/>
          <!-- This is the subproperty expression -->
          <xsd:group ref="owl:DataPropertyExpression"/>
          <!-- This is the superproperty expression -->
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="SubDataPropertyOf" type="owl:SubDataPropertyOf"/>

  <xsd:complexType name="EquivalentDataProperties">
    <xsd:complexContent>
      <xsd:extension base="owl:DataPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:DataPropertyExpression" minOccurs="2" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="EquivalentDataProperties" type="owl:EquivalentDataProperties"/>

  <xsd:complexType name="DisjointDataProperties">
    <xsd:complexContent>
      <xsd:extension base="owl:DataPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:DataPropertyExpression" minOccurs="2" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DisjointDataProperties" type="owl:DisjointDataProperties"/>

  <xsd:complexType name="DataPropertyDomain">
    <xsd:complexContent>
      <xsd:extension base="owl:DataPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:DataPropertyExpression"/>
          <xsd:group ref="owl:ClassExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DataPropertyDomain" type="owl:DataPropertyDomain"/>

  <xsd:complexType name="DataPropertyRange">
    <xsd:complexContent>
      <xsd:extension base="owl:DataPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:DataPropertyExpression"/>
          <xsd:group ref="owl:DataRange"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DataPropertyRange" type="owl:DataPropertyRange"/>

  <xsd:complexType name="FunctionalDataProperty">
    <xsd:complexContent>
      <xsd:extension base="owl:DataPropertyAxiom">
        <xsd:sequence>
          <xsd:group ref="owl:DataPropertyExpression"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="FunctionalDataProperty" type="owl:FunctionalDataProperty"/>

  <!-- Datatype definitions -->

  <xsd:complexType name="DatatypeDefinition">
    <xsd:complexContent>
      <xsd:extension base="owl:Axiom">
        <xsd:sequence>
          <xsd:element ref="owl:Datatype"/>
          <xsd:group ref="owl:DataRange"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DatatypeDefinition" type="owl:DatatypeDefinition"/>

  <!-- Key axioms -->

  <xsd:complexType name="HasKey">
    <xsd:complexContent>
      <xsd:extension base="owl:Axiom">
        <xsd:sequence>
          <xsd:group ref="owl:ClassExpression"/>
          <xsd:group ref="owl:ObjectPropertyExpression" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:group ref="owl:DataPropertyExpression" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="HasKey" type="owl:HasKey"/>

  <!-- Assertions -->

  <xsd:complexType name="Assertion" abstract="true">
    <xsd:complexContent>
      <xsd:extension base="owl:Axiom"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:group name="Assertion">
    <xsd:choice>
      <xsd:element ref="owl:SameIndividual"/>
      <xsd:element ref="owl:DifferentIndividuals"/>
      <xsd:element ref="owl:ClassAssertion"/>
      <xsd:element ref="owl:ObjectPropertyAssertion"/>
      <xsd:element ref="owl:NegativeObjectPropertyAssertion"/>
      <xsd:element ref="owl:DataPropertyAssertion"/>
      <xsd:element ref="owl:NegativeDataPropertyAssertion"/>
    </xsd:choice>
  </xsd:group>

  <xsd:complexType name="SameIndividual">
    <xsd:complexContent>
      <xsd:extension base="owl:Assertion">
        <xsd:sequence>
          <xsd:group ref="owl:Individual" minOccurs="2" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="SameIndividual" type="owl:SameIndividual"/>

  <xsd:complexType name="DifferentIndividuals">
    <xsd:complexContent>
      <xsd:extension base="owl:Assertion">
        <xsd:sequence>
          <xsd:group ref="owl:Individual" minOccurs="2" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DifferentIndividuals" type="owl:DifferentIndividuals"/>

  <xsd:complexType name="ClassAssertion">
    <xsd:complexContent>
      <xsd:extension base="owl:Assertion">
        <xsd:sequence>
          <xsd:group ref="owl:ClassExpression"/>
          <xsd:group ref="owl:Individual"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ClassAssertion" type="owl:ClassAssertion"/>

  <xsd:complexType name="ObjectPropertyAssertion">
    <xsd:complexContent>
      <xsd:extension base="owl:Assertion">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
          <xsd:group ref="owl:Individual"/>
          <!-- This is the source invididual  -->
          <xsd:group ref="owl:Individual"/>
          <!-- This is the target individual -->
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="ObjectPropertyAssertion" type="owl:ObjectPropertyAssertion"/>

  <xsd:complexType name="NegativeObjectPropertyAssertion">
    <xsd:complexContent>
      <xsd:extension base="owl:Assertion">
        <xsd:sequence>
          <xsd:group ref="owl:ObjectPropertyExpression"/>
          <xsd:group ref="owl:Individual"/>
          <!-- This is the source invididual  -->
          <xsd:group ref="owl:Individual"/>
          <!-- This is the target individual -->
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="NegativeObjectPropertyAssertion" type="owl:NegativeObjectPropertyAssertion"/>

  <xsd:complexType name="DataPropertyAssertion">
    <xsd:complexContent>
      <xsd:extension base="owl:Assertion">
        <xsd:sequence>
          <xsd:group ref="owl:DataPropertyExpression"/>
          <xsd:group ref="owl:Individual"/>
          <!-- This is the source invididual  -->
          <xsd:element ref="owl:Literal"/>
          <!-- This is the target individual -->
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="DataPropertyAssertion" type="owl:DataPropertyAssertion"/>

  <xsd:complexType name="NegativeDataPropertyAssertion">
    <xsd:complexContent>
      <xsd:extension base="owl:Assertion">
        <xsd:sequence>
          <xsd:group ref="owl:DataPropertyExpression"/>
          <xsd:group ref="owl:Individual"/>
          <!-- This is the source invididual  -->
          <xsd:element ref="owl:Literal"/>
          <!-- This is the target individual -->
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="NegativeDataPropertyAssertion" type="owl:NegativeDataPropertyAssertion"/>

  <!-- Annotations  -->

  <xsd:complexType name="IRI">
    <xsd:simpleContent>
      <xsd:extension base="xsd:anyURI">
        <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <xsd:element name="IRI" type="owl:IRI"/>

  <xsd:complexType name="AbbreviatedIRI">
    <xsd:simpleContent>
      <xsd:extension base="owl:abbreviatedIRI">
        <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <xsd:element name="AbbreviatedIRI" type="owl:AbbreviatedIRI"/>

  <xsd:group name="AnnotationSubject">
    <xsd:choice>
      <xsd:element ref="owl:IRI"/>
      <xsd:element ref="owl:AbbreviatedIRI"/>
      <xsd:element ref="owl:AnonymousIndividual"/>
    </xsd:choice>
  </xsd:group>

  <xsd:group name="AnnotationValue">
    <xsd:choice>
      <xsd:element ref="owl:IRI"/>
      <xsd:element ref="owl:AbbreviatedIRI"/>
      <xsd:element ref="owl:AnonymousIndividual"/>
      <xsd:element ref="owl:Literal"/>
    </xsd:choice>
  </xsd:group>

  <xsd:complexType name="Annotation">
    <xsd:sequence>
      <xsd:group ref="owl:annotationAnnotations"/>
      <xsd:element ref="owl:AnnotationProperty"/>
      <xsd:group ref="owl:AnnotationValue"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
  <xsd:element name="Annotation" type="owl:Annotation"/>

  <xsd:group name="axiomAnnotations">
    <xsd:sequence>
      <xsd:element ref="owl:Annotation" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>

  <xsd:group name="ontologyAnnotations">
    <xsd:sequence>
      <xsd:element ref="owl:Annotation" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>

  <xsd:group name="annotationAnnotations">
    <xsd:sequence>
      <xsd:element ref="owl:Annotation" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>

  <!-- Annotation axioms -->

  <xsd:complexType name="AnnotationAxiom" abstract="true">
    <xsd:complexContent>
      <xsd:extension base="owl:Axiom"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:group name="AnnotationAxiom">
    <xsd:choice>
      <xsd:element ref="owl:AnnotationAssertion"/>
      <xsd:element ref="owl:SubAnnotationPropertyOf"/>
      <xsd:element ref="owl:AnnotationPropertyDomain"/>
      <xsd:element ref="owl:AnnotationPropertyRange"/>
    </xsd:choice>
  </xsd:group>

  <xsd:complexType name="AnnotationAssertion">
    <xsd:complexContent>
      <xsd:extension base="owl:AnnotationAxiom">
        <xsd:sequence>
          <xsd:element ref="owl:AnnotationProperty"/>
          <xsd:group ref="owl:AnnotationSubject"/>
          <xsd:group ref="owl:AnnotationValue"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AnnotationAssertion" type="owl:AnnotationAssertion"/>

  <xsd:complexType name="SubAnnotationPropertyOf">
    <xsd:complexContent>
      <xsd:extension base="owl:AnnotationAxiom">
        <xsd:sequence>
          <xsd:element ref="owl:AnnotationProperty"/>
          <!-- This is the subproperty -->
          <xsd:element ref="owl:AnnotationProperty"/>
          <!-- This is the superproperty -->
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="SubAnnotationPropertyOf" type="owl:SubAnnotationPropertyOf"/>

  <xsd:complexType name="AnnotationPropertyDomain">
    <xsd:complexContent>
      <xsd:extension base="owl:AnnotationAxiom">
        <xsd:sequence>
          <xsd:element ref="owl:AnnotationProperty"/>
          <xsd:element ref="owl:IRI"/>
          <xsd:element ref="owl:AbbreviatedIRI"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AnnotationPropertyDomain" type="owl:AnnotationPropertyDomain"/>

  <xsd:complexType name="AnnotationPropertyRange">
    <xsd:complexContent>
      <xsd:extension base="owl:AnnotationAxiom">
        <xsd:sequence>
          <xsd:element ref="owl:AnnotationProperty"/>
          <xsd:element ref="owl:IRI"/>
          <xsd:element ref="owl:AbbreviatedIRI"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="AnnotationPropertyRange" type="owl:AnnotationPropertyRange"/>

</xsd:schema>