XML Serialization

From OWL

Jump to: navigation, search

[Hide Review Comments]

Document title:
OWL 2 Web Ontology Language
XML Serialization
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
This document is an evolution of the OWL 1.1 Web Ontology Language: XML Syntax document that forms part of the OWL 1.1 Web Ontology Language W3C Member Submission.

Copyright © 2008 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.

Contents


[edit] 1 Overview

This document defines an XML syntax for OWL 2, which exactly mirrors the structural specification of OWL 2 [OWL 2 Specification]. The syntax is defined by means of an XML schema [XML Schema], which is available in Section 2. The schema has been obtained by a straightforward translation of the structural specification of OWL 2 Specification [OWL 2 Specification] in the following way:

  • Each UML class that is intended to be instantiated is mapped to a global element.
  • Each UML class that is not intended to be instantiated directly, but instead gathers together commonalities, is mapped to a global element group.

The XML schema thus captures the structure of OWL 2 entities, expressions, and axioms. Certain restrictions on OWL 2 ontologies, such as the ones described in Sections 4.9.1 and 10 of OWL 2 Specification [OWL 2 Specification], cannot be captured in an XML schema. Therefore, such restrictions must be validated by means other mechanisms.

The XML syntax differs from the functional-style syntax of OWL 2 [OWL 2 Specification] in that former corresponds more closely with the structural specification of OWL 2 and is as such fully typed; for example, whereas the functional-style syntax uses a nonterminal SomeValuesFrom for existential restrictions on both the object and data properties, the XML syntax provides two elements <ox:ObjectSomeValuesFrom> and <ox:DataSomeValuesFrom>. If the XML syntax were more closely aligned with the functional-style syntax and provided only one element <ox:SomeValuesFrom> for existential restrictions, then the XML schema describing the syntax would be ambiguous and therefore incorrect, which would prevent automatic validation of documents written in the XML syntax.

Since each axiom written in the OWL 2 XML syntax contains complete information about the type of all the entities, it can be parsed more easily than using the canonical parsing process from Section 4.9.3 of OWL 2 Specification [OWL 2 Specification]. Nonetheless, each OWL 2 ontology written in the OWL 2 XML syntax must satisfy the requirements on declarations and typing from Section 4.9 of OWL 2 Specification [OWL 2 Specification] — that is, declarations for ontology entities must be present in the import closure of the ontology as required even if the type of ontology elements can be inferred from the axioms. Furthermore, if an OWL 2 ontology O written in XML syntax is imported into an ontology O' written in a syntax that is not fully typed, then parsing of O' must produce the same result as the the application of the canonical parsing process from Sections 4.9.3 of OWL 2 Specification [OWL 2 Specification] to O' in which only the explicit declarations in O are taken into account and any implicit typing information is disregarded.

Relative URIs in an OWL 2 ontology written in XML syntax must be resolved as specified in the XML Base specification [XML Base]. If present, the xml:base on the <ox:Ontology> element can, but needs not be equal to the ontology and/or the version URI of the ontology. The ontology URI and the version URI, even if present, do not participate in resolution of relative URIs. The expansion of relative URIs using xml:base is thus handled at the XML level during parsing, and is as such completely independent of the ontology and version URIs of the ontology being parsed.

The XML schema presented in this document covers the entire OWL 2 language, which includes all the features available in OWL 2 profiles [OWL 2 Profiles]. There are no separate schemata for these profiles — that is, ontologies that can be expressed by the profiles must 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, so the specification of such mechanisms 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].

The following is an example of an OWL 2 ontology written in XML syntax. More examples can be found in OWL 2 Primer.

<?xml version="1.0" encoding="UTF-8"?>
<ox:Ontology xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.w3.org/ns/owl2-xml http://www.w3.org/ns/owl2-xml/live-from-wiki.xsd"
    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>

[edit] 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:group ref="ox:Entity"/>
       <xsd:element ref="ox:AnonymousIndividual"/>
       <xsd:element ref="ox:Constant"/>
     </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:Entity"/>
   </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:Entity"/>
   </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" use="optional"/>
   <xsd:attribute name="versionURI" type="xsd:anyURI" use="optional"/>
   <xsd:attributeGroup ref="xml:specialAttrs"/>
 </xsd:complexType>
</xsd:element>

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

<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="Class">
 <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="NamedIndividual">
 <xsd:complexType>
   <xsd:attribute name="URI" type="xsd:anyURI" use="required"/>
   <xsd:attributeGroup ref="xml:specialAttrs"/>
 </xsd:complexType>
</xsd:element>

<xsd:element name="AnonymousIndividual">
 <xsd:complexType>
   <xsd:attribute name="nodeID" type="xsd:NCName" use="required"/>
   <xsd:attributeGroup ref="xml:specialAttrs"/>
 </xsd:complexType>
</xsd:element>

<xsd:group name="Individual">
 <xsd:choice>
   <xsd:element ref="ox:NamedIndividual"/>
   <xsd:element ref="ox:AnonymousIndividual"/>
 </xsd:choice>
</xsd:group>

<xsd:group name="Entity">
 <xsd:choice>
   <xsd:element ref="ox:Datatype"/>
   <xsd:element ref="ox:Class"/>
   <xsd:element ref="ox:ObjectProperty"/>
   <xsd:element ref="ox:DataProperty"/>
   <xsd:element ref="ox:AnnotationProperty"/>
   <xsd:element ref="ox:NamedIndividual"/>
 </xsd:choice>
</xsd:group>

<xsd:element name="Constant">
 <xsd:complexType>
   <xsd:simpleContent>
     <xsd:extension base="xsd:string">
       <xsd:attribute name="datatypeURI" type="xsd:anyURI"/>
       <xsd:attributeGroup ref="xml:specialAttrs"/>
     </xsd:extension>
   </xsd:simpleContent>
 </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="FacetConstantPair" 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>

<!-- Class expressions -->

<xsd:element name="ObjectIntersectionOf">
 <xsd:complexType>
   <xsd:sequence>
     <xsd:group ref="ox:ClassExpression" 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:ClassExpression" 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:ClassExpression"/>
   </xsd:sequence>
   <xsd:attributeGroup ref="xml:specialAttrs"/>
 </xsd:complexType>
</xsd:element>

<xsd:element name="ObjectOneOf">
 <xsd:complexType>
   <xsd:sequence>
     <xsd:group 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:ClassExpression"/>
   </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:ClassExpression"/>
   </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:group ref="ox:Individual"/>
   </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="ObjectMinCardinality">
 <xsd:complexType>
   <xsd:sequence>
     <xsd:group ref="ox:ObjectPropertyExpression"/>
     <xsd:group ref="ox:ClassExpression" 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:ClassExpression" 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:ClassExpression" 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="ClassExpression">
 <xsd:choice>
   <xsd:element ref="ox:Class"/>
   <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:ObjectHasValue"/>
   <xsd:element ref="ox:ObjectExistsSelf"/>
   <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="Declaration">
 <xsd:complexType>
   <xsd:sequence>
     <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
     <xsd:group ref="ox:Entity"/>
   </xsd:sequence>
   <xsd:attributeGroup ref="xml:specialAttrs"/>
 </xsd:complexType>
</xsd:element>

<xsd:element name="SubClassOf">
 <xsd:complexType>
   <xsd:sequence>
     <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
     <xsd:group ref="ox:ClassExpression"/> <!-- This is the subexpression -->
     <xsd:group ref="ox:ClassExpression"/>  <!-- This is the superexpression -->
   </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:ClassExpression" 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:ClassExpression" 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:Class"/>
     <xsd:group ref="ox:ClassExpression" 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 expression or the property chain -->
       <xsd:group ref="ox:ObjectPropertyExpression"/>
       <xsd:element name="PropertyChain">
         <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 expression -->  
   </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:ClassExpression"/>
   </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:ClassExpression"/>
   </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 expression -->
     <xsd:group ref="ox:DataPropertyExpression"/>  <!-- This is the superproperty expression -->
   </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:ClassExpression"/>
   </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="KeyFor">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:group ref="ox:Annotation" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:choice minOccurs="1" maxOccurs="unbounded">
        <xsd:group ref="ox:ObjectPropertyExpression"/>
        <xsd:group ref="ox:DataPropertyExpression"/>
      </xsd:choice>
      <xsd:group ref="ox:ClassExpression"/>
    </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:group 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:group 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:ClassExpression"/>
     <xsd:group 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:group ref="ox:Individual"/> <!-- This is the source invididual  -->
     <xsd:group 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:group ref="ox:Individual"/> <!-- This is the source invididual  -->
     <xsd:group 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:group 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:group 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="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:Entity"/>
     <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>

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

<xsd:group name="Axiom">
 <xsd:choice>
   <xsd:element ref="ox:Declaration"/>
   <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:KeyFor"/>
   <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:EntityAnnotation"/>
   <xsd:element ref="ox:AnonymousIndividualAnnotation"/>
 </xsd:choice>
</xsd:group>

</xsd:schema>

[edit] 3 References

[OWL 2 Specification]
OWL 2 Web Ontology Language: Structural Specification and Functional-Style Syntax. Peter F. Patel-Schneider, Ian Horrocks, and Boris Motik, eds., 2006.
[OWL 2 Profiles]
OWL 2 Web Ontology Language: Profiles. Bernardo Cuenca Grau, Boris Motik, Zhe Wu, Achille Fokoue, Carsten Lutz, eds., 2006.
[XML Base]
XML Base. Jonathan Marsh, ed. W3C Recommendation 27 June 2001.
[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.
Personal tools