W3C

OWL 2 Web Ontology Language:
XML Serialization

W3C Editor's Draft 08 April 2008

This version:
http://www.w3.org/2007/OWL/draft/ED-owl2-xml-serialization-20080408/
Latest editor's draft:
http://www.w3.org/2007/OWL/draft/owl2-xml-serialization/
Previous version:
http://www.w3.org/2007/OWL/draft/ED-owl11-xml-serialization-20080402/ (color-coded diff)
Authors:
Bernardo Cuenca Grau, Oxford University
Boris Motik, Oxford University
Peter Patel-Schneider, Bell Labs Research
Contributors:
Sean Bechhofer, The University of Manchester
Ian Horrocks, Oxford University
Bijan Parsia, The University of Manchester


Abstract

OWL 2 extends the W3C OWL Web Ontology Language with a small but useful set of features that have been requested by users, for which effective reasoning algorithms are now available, and that OWL tool developers are willing to support. The new features include extra syntactic sugar, additional property and qualified cardinality constructors, extended datatype support, simple metamodelling, and extended annotations.
This document specifies an XML syntax for OWL 2 that exactly mirrors its functional-style syntax and structural specification. An XML schema defines this syntax and is available as a separate document, as well as being included here.

Status of this Document

May Be Superseded

This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.

This document is being published as one of a set of 6 documents:

  1. Structural Specification and Functional-Style Syntax
  2. Model-Theoretic Semantics
  3. Mapping to RDF Graphs
  4. XML Serialization (this document)
  5. Profiles
  6. Primer

Compatibility with OWL 1

The OWL Working Group intends to make OWL 2 be a superset of OWL 1, except for some small bug fixes and changes to the formal semantics of annotations. This means that OWL 2 will be backward compatible, and creators of OWL 1 documents need only move to OWL 2 when they want to make use of OWL 2 features. More details and advice concerning migration from OWL 1 to OWL 2 will be in future drafts.

Please Comment By 2008-05-08

The OWL Working Group seeks public feedback on these Working Drafts. Please send your comments to public-owl-comments@w3.org (public archive). If possible, please offer specific changes to the text that would address your concern. You may also wish to check the Wiki Version of this document for internal-review comments and changes being drafted which may address your concerns.

No Endorsement

Publication as a Working Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.

Patents

This document was produced by a group operating under the 5 February 2004 W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.


Contents


1 Overview

Editor's Note: At the second F2F meeting, the Working Groupd has decided to simplify the vocabulary of OWL ontologies. In future versions of this specification, the terminals of the functional-style grammar and the RDF vocabulary will be significantly smaller.

The Web Ontology Language (OWL) 2 specification [OWL 2 Specification] defines a functional-style syntax whose intention is to be readable by humans. However, it is widely recognized that an XML syntax is needed as well.

The XML syntax can be used when a web-based syntax that exactly mirrors the functional-style syntax and structural specification of OWL 2 ontologies is needed by tools, such as in the Description Logics Implementors Group (DIG) 2.0 specification [DIG 2.0].

The XML syntax for OWL 2 is defined as an XML Schema [XML Schema], and is available as a separate document, as well as being included in this document. It has been obtained by a straightforward translation of the structural specification from the OWL 2 Specification Template:OWL 2 Specification in the following way:

Note that there are aspects of OWL 2 ontologies that are global to the ontology itself (such as the requirements on transitive roles) and that thus cannot be captured in an XML Schema.

All URIs in an ontology are assumed to be relative to the xml:base of the ontology document. During parsing, all URIs should be resolved as specified in the XML Base specification Template:XML Base.

The root element of any OWL 2 ontology file written in this syntax should be ox:Ontology. However, other specifications are free to reuse other elements from the schema. For example, the DIG 2.0 specification Template:DIG 2.0 can reuse the elements and element groups corresponding to axioms, descriptions, and entities.

The XML schema presented in this document covers the entire OWL 2 language. In Template:OWL 2 Profiles several profiles of OWL 2 have been defined. There are no separate schemata for these profiles; ontologies that can be expressed by the profiles should be written using the most general schema. Validating whether an ontology belongs to a particular profile is not intended to be performed using XML schema mechanisms; this is to be done using other means whose specification is beyond the scope of this document.


Editor's Note: The namespace for the XML serialization is not finalized. The discussion is being tracked by [issue 109].


Editor's Note: This document does not yet address GRDDL integration. This issue is being tracked by [issue 97].

Here is a complete, if toy, example of a complete OWL ontology serialized in accordance with this specification. For more examples (covering the rest of the features of OWL), please consult the Primer and the structural Syntax document.

<?xml version="1.0" encoding="UTF-8"?>
<ox:Ontology xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.w3.org/2007/OWL/wiki/OWL_XML_Schema# http://www.w3.org/2007/OWL/wiki/OWL_XML_Schema"
  xmlns:ox="http://www.w3.org/ns/owl2-xml#"
  xml:base="http://example.com/myOntology"
  ox:ontologyURI="http://example.com/myOntology">

     <ox:Imports ox:URI="http://example.com/someOtherOntology"/>

     <ox:Declaration>
            <ox:OWLClass ox:URI="#animal"/>
     </ox:Declaration>
     <ox:Declaration>
           <ox:ObjectProperty ox:URI="#eats"/>
     </ox:Declaration>

     <ox:SubClassOf>
           <ox:OWLClass ox:URI="#animal"/>
           <ox:ObjectAllValuesFrom>
                 <ox:ObjectProperty ox:URI="#reads"/>
                 <ox:OWLClass ox:URI="#tabloid"/>
           </ox:ObjectAllValuesFrom>
     </ox:SubClassOf>
</ox:Ontology>

2 The XML Schema

<xsd:schema 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:ox="http://www.w3.org/ns/owl2-xml#"
  targetNamespace="http://www.w3.org/ns/owl2-xml#"
  elementFormDefault="qualified" attributeFormDefault="qualified">

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

<!-- Annotations  -->

<xsd:element name="Annotation">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element ref="ox:AnnotationProperty"/>
      <xsd:choice>
        <xsd:element ref="ox:Constant"/>
        <xsd:group ref="ox:OWLEntity"/>
      </xsd:choice>
    </xsd:sequence>
     <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="Label">
  <xsd:complexType>
    <xsd:choice>
      <xsd:element ref="ox:Constant"/>
      <xsd:group ref="ox:OWLEntity"/>
    </xsd:choice>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="Comment">
  <xsd:complexType>
    <xsd:choice>
      <xsd:element ref="ox:Constant"/>
      <xsd:group ref="ox:OWLEntity"/>
    </xsd:choice>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:group name="Annotation">
  <xsd:choice>
    <xsd:element ref="ox:Annotation"/>
    <xsd:element ref="ox:Label"/>
    <xsd:element ref="ox:Comment"/>
  </xsd:choice>
</xsd:group>

<!-- The ontology -->

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

<xsd:element name="Ontology">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element ref="ox:Imports" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:Axiom" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="ontologyURI" type="xsd:anyURI"/>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<!-- Entities -->

<xsd:element name="Datatype">
  <xsd:complexType>
    <xsd:attribute name="URI" type="xsd:anyURI" use="required"/>
    <xsd:attribute name="arity" type="xsd:positiveInteger" use="optional" default="1"/>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="OWLClass">
  <xsd:complexType>
    <xsd:attribute name="URI" type="xsd:anyURI" use="required"/>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="ObjectProperty">
  <xsd:complexType>
    <xsd:attribute name="URI" type="xsd:anyURI" use="required"/>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="DataProperty">
  <xsd:complexType>
    <xsd:attribute name="URI" type="xsd:anyURI" use="required"/>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="AnnotationProperty">
  <xsd:complexType>
    <xsd:attribute name="URI" type="xsd:anyURI" use="required"/>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="Individual">
  <xsd:complexType>
    <xsd:attribute name="URI" type="xsd:anyURI" use="required"/>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:group name="OWLEntity">
  <xsd:choice>
    <xsd:element ref="ox:Datatype"/>
    <xsd:element ref="ox:OWLClass"/>
    <xsd:element ref="ox:ObjectProperty"/>
    <xsd:element ref="ox:DataProperty"/>
    <xsd:element ref="ox:AnnotationProperty"/>
    <xsd:element ref="ox:Individual"/>
  </xsd:choice>
</xsd:group>

<xsd:element name="Constant">
  <xsd:complexType>
    <xsd:simpleContent>
      <xsd:extension base="xsd:string">
        <xsd:attribute name="datatypeURI" type="xsd:anyURI" use="optional"/>
        <xsd:attributeGroup ref="xml:specialAttrs"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
</xsd:element>

<!-- Entity annotations -->

<xsd:element name="EntityAnnotation">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/> <!-- This is the annotation for the axiom -->
      <xsd:group ref="ox:OWLEntity"/>
      <xsd:group ref="ox:Annotation" minOccurs="1" maxOccurs="unbounded"/> <!-- This is the annotation for the entity -->
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<!-- Property expressions -->

<xsd:group name="ObjectPropertyExpression">
  <xsd:choice>
    <xsd:element ref="ox:ObjectProperty"/>
    <xsd:element ref="ox:InverseObjectProperty"/>
  </xsd:choice>
</xsd:group>

<xsd:element name="InverseObjectProperty">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:group name="DataPropertyExpression">
  <xsd:sequence>
    <xsd:element ref="ox:DataProperty"/>
  </xsd:sequence>
</xsd:group>

<!-- Data ranges -->

<xsd:element name="DataComplementOf">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:DataRange"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="DataOneOf">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element ref="ox:Constant" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:simpleType name="FacetType">
  <xsd:restriction base="xsd:string">
    <xsd:enumeration value="length"/>
    <xsd:enumeration value="minLength"/>
    <xsd:enumeration value="maxLength"/>
    <xsd:enumeration value="pattern"/>
    <xsd:enumeration value="minInclusive"/>
    <xsd:enumeration value="minExclusive"/>
    <xsd:enumeration value="maxInclusive"/>
    <xsd:enumeration value="maxExclusive"/>
    <xsd:enumeration value="totalDigits"/>
    <xsd:enumeration value="fractionDigits"/>
  </xsd:restriction>
</xsd:simpleType>

<xsd:element name="DatatypeRestriction">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element ref="ox:Datatype"/>
      <xsd:element name="Restriction" minOccurs="1" maxOccurs="unbounded">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element ref="ox:Constant"/>
          </xsd:sequence>
          <xsd:attribute name="facet" type="ox:FacetType" use="required"/>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:group name="DataRange">
  <xsd:choice>
    <xsd:element ref="ox:Datatype"/>
    <xsd:element ref="ox:DataComplementOf"/>
    <xsd:element ref="ox:DataOneOf"/>
    <xsd:element ref="ox:DatatypeRestriction"/>
  </xsd:choice>
</xsd:group>

<!-- Descriptions -->

<xsd:element name="ObjectIntersectionOf">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Description" minOccurs="2" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="ObjectUnionOf">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Description" minOccurs="2" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="ObjectComplementOf">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Description"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="ObjectOneOf">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element ref="ox:Individual" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="ObjectSomeValuesFrom">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
      <xsd:group ref="ox:Description"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="ObjectAllValuesFrom">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
      <xsd:group ref="ox:Description"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="ObjectExistsSelf">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="ObjectHasValue">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
      <xsd:element ref="ox:Individual"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="ObjectMinCardinality">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
      <xsd:group ref="ox:Description" minOccurs="0" maxOccurs="1"/>
    </xsd:sequence>
    <xsd:attribute name="cardinality" type="xsd:nonNegativeInteger" use="required"/>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="ObjectMaxCardinality">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
      <xsd:group ref="ox:Description" minOccurs="0" maxOccurs="1"/>
    </xsd:sequence>
    <xsd:attribute name="cardinality" type="xsd:nonNegativeInteger" use="required"/>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="ObjectExactCardinality">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
      <xsd:group ref="ox:Description" minOccurs="0" maxOccurs="1"/>
    </xsd:sequence>
    <xsd:attribute name="cardinality" type="xsd:nonNegativeInteger" use="required"/>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="DataSomeValuesFrom">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:DataPropertyExpression"/>
      <xsd:group ref="ox:DataRange"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="DataAllValuesFrom">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:DataPropertyExpression"/>
      <xsd:group ref="ox:DataRange"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="DataHasValue">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:DataPropertyExpression"/>
      <xsd:element ref="ox:Constant"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="DataMinCardinality">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:DataPropertyExpression"/>
      <xsd:group ref="ox:DataRange" minOccurs="0" maxOccurs="1"/>
    </xsd:sequence>
    <xsd:attribute name="cardinality" type="xsd:nonNegativeInteger" use="required"/>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="DataMaxCardinality">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:DataPropertyExpression"/>
      <xsd:group ref="ox:DataRange" minOccurs="0" maxOccurs="1"/>
    </xsd:sequence>
    <xsd:attribute name="cardinality" type="xsd:nonNegativeInteger" use="required"/>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="DataExactCardinality">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:DataPropertyExpression"/>
      <xsd:group ref="ox:DataRange" minOccurs="0" maxOccurs="1"/>
    </xsd:sequence>
    <xsd:attribute name="cardinality" type="xsd:nonNegativeInteger" use="required"/>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:group name="Description">
  <xsd:choice>
    <xsd:element ref="ox:OWLClass"/>
    <xsd:element ref="ox:ObjectIntersectionOf"/>
    <xsd:element ref="ox:ObjectUnionOf"/>
    <xsd:element ref="ox:ObjectComplementOf"/>
    <xsd:element ref="ox:ObjectOneOf"/>
    <xsd:element ref="ox:ObjectSomeValuesFrom"/>
    <xsd:element ref="ox:ObjectAllValuesFrom"/>
    <xsd:element ref="ox:ObjectExistsSelf"/>
    <xsd:element ref="ox:ObjectHasValue"/>
    <xsd:element ref="ox:ObjectMinCardinality"/>
    <xsd:element ref="ox:ObjectMaxCardinality"/>
    <xsd:element ref="ox:ObjectExactCardinality"/>
    <xsd:element ref="ox:DataSomeValuesFrom"/>
    <xsd:element ref="ox:DataAllValuesFrom"/>
    <xsd:element ref="ox:DataHasValue"/>
    <xsd:element ref="ox:DataMinCardinality"/>
    <xsd:element ref="ox:DataMaxCardinality"/>
    <xsd:element ref="ox:DataExactCardinality"/>
  </xsd:choice>
</xsd:group>

<!-- Axioms -->

<xsd:element name="SubClassOf">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:Description"/> <!-- This is the subclass -->
      <xsd:group ref="ox:Description"/>  <!-- This is the superclass -->
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="EquivalentClasses">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:Description" minOccurs="2" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="DisjointClasses">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:Description" minOccurs="2" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="DisjointUnion">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element ref="ox:OWLClass"/>
      <xsd:group ref="ox:Description" minOccurs="2" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="SubObjectPropertyOf">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:choice> <!-- This is the subproperty or the property chain -->
        <xsd:group ref="ox:ObjectPropertyExpression"/>
        <xsd:element name="SubObjectPropertyChain">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:group ref="ox:ObjectPropertyExpression" minOccurs="2" maxOccurs="unbounded"/>
            </xsd:sequence>
            <xsd:attributeGroup ref="xml:specialAttrs"/>
          </xsd:complexType>
        </xsd:element>
      </xsd:choice>
      <xsd:group ref="ox:ObjectPropertyExpression"/> <!-- This is the superproperty -->  
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="EquivalentObjectProperties">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:ObjectPropertyExpression" minOccurs="2" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="DisjointObjectProperties">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:ObjectPropertyExpression" minOccurs="2" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="ObjectPropertyDomain">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
      <xsd:group ref="ox:Description"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="ObjectPropertyRange">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
      <xsd:group ref="ox:Description"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="InverseObjectProperties">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:ObjectPropertyExpression" minOccurs="2" maxOccurs="2"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="FunctionalObjectProperty">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="InverseFunctionalObjectProperty">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="SymmetricObjectProperty">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="AsymmetricObjectProperty">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="ReflexiveObjectProperty">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="IrreflexiveObjectProperty">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="TransitiveObjectProperty">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="SubDataPropertyOf">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:DataPropertyExpression"/> <!-- This is the subproperty -->
      <xsd:group ref="ox:DataPropertyExpression"/>  <!-- This is the superproperty -->
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="EquivalentDataProperties">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:DataPropertyExpression" minOccurs="2" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="DisjointDataProperties">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:DataPropertyExpression" minOccurs="2" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="DataPropertyDomain">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:DataPropertyExpression"/>
      <xsd:group ref="ox:Description"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="DataPropertyRange">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:DataPropertyExpression"/>
      <xsd:group ref="ox:DataRange"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="FunctionalDataProperty">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:DataPropertyExpression"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="SameIndividual">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element ref="ox:Individual" minOccurs="2" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="DifferentIndividuals">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element ref="ox:Individual" minOccurs="2" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="ClassAssertion">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:Description"/>
      <xsd:element ref="ox:Individual"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="ObjectPropertyAssertion">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
      <xsd:element ref="ox:Individual"/> <!-- This is the source invididual  -->
      <xsd:element ref="ox:Individual"/> <!--  This is the target individual -->
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="NegativeObjectPropertyAssertion">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:ObjectPropertyExpression"/>
      <xsd:element ref="ox:Individual"/> <!-- This is the source invididual  -->
      <xsd:element ref="ox:Individual"/> <!--  This is the target individual -->
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="DataPropertyAssertion">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:DataPropertyExpression"/>
      <xsd:element ref="ox:Individual"/> <!-- This is the source invididual  -->
      <xsd:element ref="ox:Constant"/> <!--  This is the target value -->
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="NegativeDataPropertyAssertion">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:DataPropertyExpression"/>
      <xsd:element ref="ox:Individual"/> <!-- This is the source invididual  -->
      <xsd:element ref="ox:Constant"/> <!--  This is the target value -->
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="Declaration">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:group ref="ox:OWLEntity"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="xml:specialAttrs"/>
  </xsd:complexType>
</xsd:element>

<xsd:group name="Axiom">
  <xsd:choice>
    <xsd:element ref="ox:EntityAnnotation"/>
    <xsd:element ref="ox:SubClassOf"/>
    <xsd:element ref="ox:EquivalentClasses"/>
    <xsd:element ref="ox:DisjointClasses"/>
    <xsd:element ref="ox:DisjointUnion"/>
    <xsd:element ref="ox:SubObjectPropertyOf"/>
    <xsd:element ref="ox:EquivalentObjectProperties"/>
    <xsd:element ref="ox:DisjointObjectProperties"/>
    <xsd:element ref="ox:ObjectPropertyDomain"/>
    <xsd:element ref="ox:ObjectPropertyRange"/>
    <xsd:element ref="ox:InverseObjectProperties"/>
    <xsd:element ref="ox:FunctionalObjectProperty"/>
    <xsd:element ref="ox:InverseFunctionalObjectProperty"/>
    <xsd:element ref="ox:SymmetricObjectProperty"/>
    <xsd:element ref="ox:AsymmetricObjectProperty"/>
    <xsd:element ref="ox:ReflexiveObjectProperty"/>
    <xsd:element ref="ox:IrreflexiveObjectProperty"/>
    <xsd:element ref="ox:TransitiveObjectProperty"/>
    <xsd:element ref="ox:SubDataPropertyOf"/>
    <xsd:element ref="ox:EquivalentDataProperties"/>
    <xsd:element ref="ox:DisjointDataProperties"/>
    <xsd:element ref="ox:DataPropertyDomain"/>
    <xsd:element ref="ox:DataPropertyRange"/>
    <xsd:element ref="ox:FunctionalDataProperty"/>
    <xsd:element ref="ox:SameIndividual"/>
    <xsd:element ref="ox:DifferentIndividuals"/>
    <xsd:element ref="ox:ClassAssertion"/>
    <xsd:element ref="ox:ObjectPropertyAssertion"/>
    <xsd:element ref="ox:NegativeObjectPropertyAssertion"/>
    <xsd:element ref="ox:DataPropertyAssertion"/>
    <xsd:element ref="ox:NegativeDataPropertyAssertion"/>
    <xsd:element ref="ox:Declaration"/>
  </xsd:choice>
</xsd:group>

</xsd:schema>

In the EntityAnnotation element the first annotations are annotations on the axiom itself and the second annotations are annotations on the entity. In the SubClassOf element the first description is the subclass and the second is the superclass, similarly for SubObjectPropertyOf and SubDataPropertyOf. For ObjectPropertyAssertion and NegativeObjectPropertyAssertion the first individual is the source and the second is the target.

3 References

OWL 2 Specification
OWL 2 Web Ontology Language:Structural Specification and Functional-Style Syntax Boris Motik, Peter F. Patel-Schneider, Ian Horrocks. W3C Editor's Draft, 08 April 2008, http://www.w3.org/2007/OWL/draft/ED-owl2-syntax-20080408/. Latest version available at http://www.w3.org/2007/OWL/draft/owl2-syntax/.
OWL 2 Profiles
OWL 2 Web Ontology Language:Profiles Bernardo Cuenca Grau, Boris Motik, Zhe Wu, Achille Fokoue, Carsten Lutz. W3C Editor's Draft, 08 April 2008, http://www.w3.org/2007/OWL/draft/ED-owl2-profiles-20080408/. Latest version available at http://www.w3.org/2007/OWL/draft/owl2-profiles/.
XML Base
XML Base. Jonathan Marsh, ed. W3C Recommendation 27 June 2001. http://www.w3.org/TR/xmlbase/
XML Schema
XML Schema Part 1: Structures Second Edition. Henry S. Thompson, David Beech, Murray Maloney, and Noah Mendelsohn, eds. W3C Recommendation 28 October 2004. http://www.w3.org/TR/xmlschema-1/
DIG 2.0
DIG 2.0: The DIG Description Logic Interface: Document Index. Sean Bechhofer, ed., DIG Working Group Note, September 2006. http://dig.cs.manchester.ac.uk/