Issue 5.17 XML presentation syntax for OWL

I revised the XML Schema for an OWL presentation syntax that I sent around
in June to make it correspond more closely with the current version of the
OWL abstract syntax.  The Schema iself and an example are attached to this
message.  As well, they are available at
    http://www-db.research.bell-labs.com/user/pfps/owl/schema-2.xsd
    http://www-db.research.bell-labs.com/user/pfps/owl/schema-2-example.xml

I propose that this XML Schema be used as the starting point for the the
OWL XML presentation syntax.  I further propose that the final version of
the XML Schema itself and at least one example be part of an appendix to
the OWL Guide document.

Peter F. Patel-Schneider
Bell Labs Research
<!--		XML Schema for OWL
                Peter F. Patel-Schneider, Bell Labs Research
                23 October 2002

This is an XML schema for an XML syntax for OWL.  This schema is not valid 
RDF/XML, but should be more compact and easier to read.  I have included 
some comments in-line, to show what is going on.

This XML Schema uses QNames, and probably in places where URI references
should be used.  This will have to be fixed.

This XML Schema defines an XML dialect similar to the OWL abstract syntax.
For arcane technical reasons it is somewhat more general in a few places,
allowing zero or more descriptions where a single description is allowed in
the OWL abstract syntax.  Each of these places can be translated to the OWL
abstract syntax by wrapping the descriptions in an intersectionOf.
-->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns"
    xmlns:owl="http://www-db.research.bell-labs.com/user/pfps/owl/schema-2.xsd"
    targetNamespace="http://www-db.research.bell-labs.com/user/pfps/owl/schema-2.xsd"
    elementFormDefault="qualified"
    attributeFormDefault="qualified"
>

<!-- A OWL document contains an ontology, 
     which has includes, axioms, and facts. -->

<xsd:element name="Ontology" type="owl:OntologyType" />

<xsd:complexType name="OntologyType">
   <xsd:sequence minOccurs="0" maxOccurs="unbounded">
    <xsd:choice>

     <xsd:element name="Imports" type="owl:IncludeType" />

     <xsd:element name="Class" type="owl:ClassAxiomType" />
     <xsd:element name="EnumeratedClass" type="owl:EnumerationType" />
     <xsd:element name="DisjointClasses" type="owl:DescriptionsTypeNE" />
     <xsd:element name="EquivalentClasses" type="owl:DescriptionsTypeNE" />
     <xsd:element name="SubClassOf" type="owl:SubClassOfType" />

     <xsd:element name="DatatypeProperty" type="owl:DataPropertyAxiomType" />
     <xsd:element name="ObjectProperty" type="owl:ObjectPropertyAxiomType" />
     <!-- The conditions on relationships between properties are 
	  context-sensitive so this lets any property in -->
     <xsd:element name="EquivalentProperties" type="owl:PropertiesTypeNE" />
     <xsd:element name="SubPropertyOf" type="owl:SubPropertyOfType" />
 
     <xsd:element name="Individual" type="owl:IndividualType" />
     <xsd:element name="SameIndividual" type="owl:IndividualsTypeNE" />
     <xsd:element name="DifferentIndividuals" type="owl:IndividualsTypeNE" />
 
    </xsd:choice>
   </xsd:sequence>
   <xsd:attribute name="name" type="owl:OntologyName" />
   <!--  ... non-logical attributes (authorship, etc.) ... -->
</xsd:complexType>

<!-- Imports points to another ontology -->

<xsd:complexType name="IncludeType">
 <xsd:attribute name="ontology" type="xsd:anyURI" use="required"/>
</xsd:complexType>

<!-- The body of a class axiom is a potentially empty sequence of
     descriptions.  Attributes provide the name of the class and the
     modality for the class. --> 

<xsd:complexType name="ClassAxiomType">
  <xsd:sequence minOccurs="0" maxOccurs="unbounded">
   <xsd:group ref="owl:description" />
  </xsd:sequence>
  <xsd:attribute name="name" type="owl:ClassName" use="required" />
  <xsd:attribute name="complete" type="xsd:boolean" use="required" />
</xsd:complexType>

<!-- An enumeration is just a sequence of individuals,
     suitably encapsulated. -->

<xsd:complexType name="EnumerationType">
  <xsd:group ref="owl:individuals" />
  <xsd:attribute name="name" type="owl:ClassName" use="required" />
</xsd:complexType>

<!-- Disjoint and Equivalent for classes take a non-empty group of
     descriptions. -->

<xsd:complexType name="DescriptionsTypeNE"> 
  <xsd:sequence minOccurs="1" maxOccurs="unbounded">
   <xsd:group ref="owl:description" />
  </xsd:sequence>
</xsd:complexType>

<!-- A subclassOf statement is just two descriptions, sub and super. -->

<xsd:complexType name="SubClassOfType">
  <xsd:all>
   <xsd:element name="sub" type="owl:DescriptionType"
                minOccurs="1" maxOccurs="1" />
   <xsd:element name="super" type="owl:DescriptionType"
                minOccurs="1" maxOccurs="1" />
  </xsd:all>
</xsd:complexType>


<!-- Property axioms contain supers, domains, and ranges, along
     with characteristics of the property. -->

<xsd:complexType name="DataPropertyAxiomType">
  <xsd:sequence minOccurs="0" maxOccurs="unbounded">
   <xsd:choice>
    <xsd:element name="super"  type="owl:DataPropertyIDType" />
    <xsd:element name="domain" type="owl:DescriptionsType" />
    <xsd:element name="range"  type="owl:DataRangeType" />
   </xsd:choice>
  </xsd:sequence>
  <xsd:attribute name="name" type="owl:DataPropertyName" use="required" />
  <xsd:attribute name="functional" type="xsd:boolean" default="false" />
</xsd:complexType>

<xsd:complexType name="ObjectPropertyAxiomType">
  <xsd:sequence minOccurs="0" maxOccurs="unbounded">
   <xsd:choice>
    <xsd:element name="super"  type="owl:IndividualPropertyIDType" />
    <xsd:element name="domain" type="owl:DescriptionsType" />
    <xsd:element name="range"  type="owl:DescriptionsType" />
   </xsd:choice>
  </xsd:sequence>
  <xsd:attribute name="name" type="owl:IndividualPropertyName" use="required" />
  <xsd:attribute name="inverseOf" type="owl:IndividualPropertyName" />
  <xsd:attribute name="symmetric"         type="xsd:boolean" default="false" />
  <xsd:attribute name="functional"        type="xsd:boolean" default="false" />
  <xsd:attribute name="inverseFunctional" type="xsd:boolean" default="false" />
  <xsd:attribute name="transitive"        type="xsd:boolean" default="false" />
</xsd:complexType>

<!-- Datatypes and sets of values can show up in data property ranges. -->

<xsd:complexType name="DataRangeType">
  <xsd:sequence>
   <xsd:element name="OneOf" type="owl:DataValuesType"
                minOccurs="0" maxOccurs="1" />
  </xsd:sequence>
  <xsd:attribute name="datatype" type="owl:DatatypeName" />
</xsd:complexType>

<!-- EquivalentProperties takes several propertyIDs, 
     all of the same variety (not expressed here) . -->

<xsd:complexType name="PropertiesTypeNE">    
  <xsd:sequence>
   <xsd:element name="property" type="owl:PropertyType"
                minOccurs="1" maxOccurs="unbounded" />
  </xsd:sequence>
</xsd:complexType>

<!-- A subproperty statement is just two propertyIDs, sub and super, with
     the following restrictions (not expressed here)
     if sub is a data property then super must be a data property
     if sub is a simple property then super must be an individual property.
     There are other restrictions having to do with transitivity and
     cardinalites. 
-->

<xsd:complexType name="SubPropertyOfType">
  <xsd:attribute name="sub" type="owl:PropertyName" use="required" />
  <xsd:attribute name="super" type="owl:PropertyName" use="required" />
</xsd:complexType>


<!-- Descriptions are either named classes, property restrictions,
     oneOfs, or boolean combinations of descriptions. -->

<xsd:group name="description">   
  <xsd:choice>
   <xsd:element name="Class" type="owl:ClassIDType"
                minOccurs="1" maxOccurs="1" />
   <xsd:element name="DataRestriction" type="owl:DataRestrictionType"
                minOccurs="1" maxOccurs="1" />
   <xsd:element name="IndividualRestriction" type="owl:IndividualRestrictionType"
                minOccurs="1" maxOccurs="1" />
   <xsd:element name="UnionOf" type="owl:DescriptionsType"
                minOccurs="1" maxOccurs="1" />
   <xsd:element name="IntersectionOf" type="owl:DescriptionsType"
                minOccurs="1" maxOccurs="1" />
   <xsd:element name="ComplementOf" type="owl:DescriptionType"
                minOccurs="1" maxOccurs="1" />
   <xsd:element name="OneOf" type="owl:IndividualsType"
                minOccurs="1" maxOccurs="1" />
  </xsd:choice>
</xsd:group>

<xsd:complexType name="DescriptionType"> 
  <xsd:group ref="owl:description" />
</xsd:complexType>

<xsd:complexType name="DescriptionsType"> 
  <xsd:sequence minOccurs="0" maxOccurs="unbounded">
   <xsd:group ref="owl:description" />
  </xsd:sequence>
  <xsd:attribute name="class" type="owl:ClassName" />
</xsd:complexType>

<!-- All types of restrictions have the property name as an attribute, an
     optional cardinality, zero or more ranges, zero or more required
     restrictions, and zero or more value restrictions. 
     There is a side condition that restrictions on transitive properties
     and their sub-properties cannot have cardinality constraints.
-->  

<xsd:complexType name="DataRestrictionType"> 
  <xsd:sequence minOccurs="0" maxOccurs="unbounded">
  <xsd:choice>
   <xsd:element name="allValuesFrom" type="owl:DataRangeType" />
   <xsd:element name="someValueFrom" type="owl:DataRangeType" />
   <xsd:element name="value"         type="xsd:anySimpleType" />
  </xsd:choice>
  </xsd:sequence>
  <xsd:attribute name="property" type="owl:DataPropertyName" use="required" />
  <xsd:attribute name="minCardinality"  type="xsd:nonNegativeInteger" />
  <xsd:attribute name="maxCardinality"  type="xsd:nonNegativeInteger" />
  <xsd:attribute name="cardinality"	type="xsd:nonNegativeInteger" />
</xsd:complexType>

<xsd:complexType name="IndividualRestrictionType">  
  <xsd:sequence minOccurs="0" maxOccurs="unbounded">
   <xsd:choice>
    <xsd:element name="allValuesFrom" type="owl:DescriptionsType" />
    <xsd:element name="someValueFrom" type="owl:DescriptionsType" />
    <xsd:element name="value"         type="owl:IndividualReferenceType" />
   </xsd:choice>
  </xsd:sequence>
  <xsd:attribute name="property" type="owl:IndividualPropertyName" 
	use="required" />
  <xsd:attribute name="minCardinality"  type="xsd:nonNegativeInteger" />
  <xsd:attribute name="maxCardinality"  type="xsd:nonNegativeInteger" />
  <xsd:attribute name="cardinality"	type="xsd:nonNegativeInteger" />
</xsd:complexType>

<!-- Facts about individuals have several types and property
     information, including nested facts.  -->

<xsd:complexType name="IndividualType">        
  <xsd:sequence minOccurs="0" maxOccurs="unbounded">
   <xsd:choice>
    <xsd:element name="type" type="owl:ClassIDType" />
    <xsd:element name="ObjectPropertyValue" 
                 type="owl:IndividualPropertyValueType" />
    <xsd:element name="DataPropertyValue" 
                 type="owl:DataPropertyValueType" />
   </xsd:choice>
  </xsd:sequence>
  <xsd:attribute name="name" type="owl:IndividualName" />
</xsd:complexType>

<xsd:complexType name="IndividualPropertyValueType"> 
  <xsd:group ref="owl:individuals" />
  <xsd:attribute name="property" type="owl:IndividualPropertyName"
                 use="required" />
</xsd:complexType>

<xsd:complexType name="DataPropertyValueType"> 
  <xsd:group ref="owl:datavalues" />
  <xsd:attribute name="property" type="owl:DataPropertyName"
                 use="required" />
</xsd:complexType>

<xsd:group name="individuals">
  <xsd:sequence>
   <xsd:element name="Individual" type="owl:IndividualType"
                minOccurs="0" maxOccurs="unbounded" />
  </xsd:sequence>
</xsd:group>

<xsd:complexType name="IndividualsType">   
  <xsd:group ref="owl:individuals" />
</xsd:complexType>

<xsd:complexType name="IndividualsTypeNE">   
  <xsd:sequence>
   <xsd:element name="Individual" type="owl:IndividualType"
                minOccurs="1" maxOccurs="unbounded" />
  </xsd:sequence>
</xsd:complexType>

<xsd:group name="datavalues">
  <xsd:sequence>
   <xsd:element name="DataValue" type="xsd:anySimpleType"
                minOccurs="0" maxOccurs="unbounded" />
  </xsd:sequence>
</xsd:group>

<xsd:complexType name="DataValuesType">   
  <xsd:group ref="owl:datavalues" />
</xsd:complexType>



<!-- Finally, some utility types for the various kinds of names. -->

 <xsd:complexType name="ClassIDType">
   <xsd:attribute name="name" type="owl:ClassName" use="required"/>
 </xsd:complexType>

 <xsd:complexType name="DatatypeIDType">
  <xsd:attribute name="name" type="owl:DatatypeName" use="required" />
 </xsd:complexType>

 <xsd:complexType name="PropertyIDType">
   <xsd:attribute name="name" type="owl:PropertyName" use="required"/>
 </xsd:complexType>

 <xsd:complexType name="DataPropertyIDType">
   <xsd:attribute name="name" type="owl:DataPropertyName" use="required"/>
 </xsd:complexType>

 <xsd:complexType name="IndividualPropertyIDType">
   <xsd:attribute name="name" type="owl:IndividualPropertyName" use="required"/>
 </xsd:complexType>

 <xsd:complexType name="IndividualIDType">
   <xsd:attribute name="name" type="owl:IndividualName" use="required"/>
 </xsd:complexType>

 <xsd:simpleType name="OntologyName">
  <xsd:restriction base="xsd:QName" />
 </xsd:simpleType>

 <xsd:simpleType name="ClassName">
  <xsd:restriction base="xsd:QName" />
 </xsd:simpleType>

 <xsd:simpleType name="DatatypeName">
  <xsd:restriction base="xsd:QName" />
 </xsd:simpleType>

 <xsd:simpleType name="PropertyName">
  <xsd:restriction base="xsd:QName" />
 </xsd:simpleType>

 <xsd:simpleType name="DataPropertyName">
  <xsd:restriction base="xsd:QName" />
 </xsd:simpleType>

 <xsd:simpleType name="IndividualPropertyName">
  <xsd:restriction base="xsd:QName" />
 </xsd:simpleType>

 <xsd:simpleType name="IndividualName">
  <xsd:restriction base="xsd:QName" />
 </xsd:simpleType>

</xsd:schema>

Received on Wednesday, 23 October 2002 13:58:42 UTC