Re: An XML ``presentation'' syntax for OWL

Peter,

Thanks for putting this together. This really helps us get a feel for
what OWL is beginning to look like. Because it is easier to focus on
concrete examples, I've commented on the schema-example.text file.
Please see my comments below (prefaced with a "J:"):

<!--            Examples of OWL XML Syntax -->

<owl:ontology 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.owl.org/owl">

J: I'd like to see an example of include here, and the use of a QName to
reference a concept from another ontology somewhere.

<!-- Syntax                                     Comments            Why
-->
<owl:EquivalentClass owl:name="Student">        <!-- Good -->

J: Is this syntax supposed to be valid RDF? If so, why do you use
owl:name="Student" instead of rdf:ID?

 <owl:super owl:resource="Person" />            <!-- OK - resource
questionable -->
 <owl:super owl:resource="Thing" />             <!-- OK - resource
questionable -->
 <owl:restriction>                              <!-- Unnecessary   
STRIPING,SCHEMA -->
  <owl:IndividualRestriction owl:property="child" 
                         owl:atmost="1">        <!-- Good -->
   <owl:range>                                  <!-- range="Person" ?
-->
    <owl:Class owl:ID="Person" />               <!-- ""            
SCHEMA -->
   </owl:range>                                 <!-- "" -->
  </owl:IndividualRestriction>                  <!-- OK -->
 </owl:restriction>                             <!-- Unnecessary   
STRIPING,SCHEMA -->

J: Is the above restriction a qualified number restriction? If so, your
latest feature synopsis says these were supposed to be removed due to a
WG decision.

 <owl:description>                              <!-- Unnecessary   
STRIPING,SCHEMA -->
  <owl:IndividualRestriction owl:property="advisor"     
                         owl:atleast="1">       <!-- Good -->
   <owl:range>                                  <!-- range="Person" ?
-->
    <owl:Class owl:ID="Person" />               <!-- ""            
SCHEMA -->
   </owl:range>                                 <!-- "" -->
   <owl:required>                                       <!-- <required
class="Person" /> ? -->
    <owl:Class owl:ID="Person" />               <!-- ""            
SCHEMA -->
   </owl:required>                              <!-- ""          -->

J: Why both range and required above? Doesn't atLeast=1 and range=Person
mean required=Person?

  </owl:IndividualRestriction>                  <!-- OK -->
 </owl:description>                             <!-- Unnecessary  
STRIPING,SCHEMA -->

J: What's the difference between wrapping an IndividualRestriction in a
description or restriction? Also see my comment in reply to the abstract
syntax on whether you need both restriction and description here.

 <owl:description>                              <!-- Unnecessary   
STRIPING,SCHEMA -->
  <owl:DataRestriction owl:property="studentID" 
                        owl:exactly="1">        <!-- Good -->
   <owl:range>                                  <!-- range="xsd:integer"
? -->
    <owl:DataType owl:ID="xsd:integer" />       <!-- ""            
SCHEMA -->
   </owl:range>                                 <!-- "" -->
  </owl:DataRestriction>                        <!-- OK -->
 </owl:description>                             <!-- Unnecessary   
STRIPING,SCHEMA -->
 <owl:description>                              <!-- Unnecessary   
STRIPING,SCHEMA -->
  <owl:Or>                                      <!-- Good -->
   <owl:class owl:resource="Foo" />             <!-- OK - resource
questionable -->
   <owl:description>                            <!-- Unnecessary   
STRIPING,SCHEMA -->
    <owl:IndividualRestriction owl:property="year"      
                           owl:exactly="1">     <!-- Good -->
     <owl:range>                                <!-- OK -->
      <owl:OneOf>                               <!-- Good -->
       <owl:member owl:resource="Freshman" />   <!-- OK - resource
questionable -->
       <owl:member owl:resource="Sophomore" />  <!-- OK - resource
questionable -->
       <owl:member owl:resource="Junior" />     <!-- OK - resource
questionable -->
       <owl:member owl:resource="Senior" />     <!-- OK - resource
questionable -->
      </owl:OneOf>                              <!-- OK -->
     </owl:range>                               <!-- OK -->
    </owl:IndividualRestriction>                        <!-- OK -->
   </owl:description>                           <!-- Unnecessary   
STRIPING,SCHEMA -->
   <owl:description>                            <!-- Unnecessary   
STRIPING,SCHEMA -->
    <owl:DataRestriction owl:property="grade"
                         owl:exactly="1">       <!-- Good -->
     <owl:range>                                <!-- OK -->
      <owl:OneOf>                               <!-- OK -->
       <owl:member xsi:type="xsd:integer">1</owl:member>
       <owl:member xsi:type="xsd:integer">2</owl:member>
       <owl:member xsi:type="xsd:integer">3</owl:member>
       <owl:member xsi:type="xsd:integer">4</owl:member>
      </owl:OneOf>                              <!-- OK -->
     </owl:range>                               <!-- OK -->
    </owl:DataRestriction>                      <!-- OK -->
   </owl:description>                           <!-- Unnecessary   
STRIPING,SCHEMA -->
  </owl:Or>                                     <!-- OK -->
 </owl:description>                             <!-- Unnecessary   
STRIPING,SCHEMA -->
</owl:EquivalentClass>                          <!-- OK -->

<owl:IndividualProperty owl:name="foo" owl:inverseOf="oof" 
                                       owl:functional="true">
 <owl:super owl:resource="bar" />
 <owl:range>
  <owl:Class owl:ID="Person" />
 </owl:range>
 <owl:domain>
  <owl:And>

J: I assume owl:And takes the place of intersectionOf from the abstract
syntax. I prefer "And." What about using it in the abstract syntax as
well?

   <owl:class owl:resource="Person" />
   <owl:class owl:resource="Employee" />
  </owl:And>
 </owl:domain>
</owl:IndividualProperty>

<owl:IndividualProperty owl:name="trans" owl:inverseOf="snrat" 
                                                owl:transitive="true">

J: Why name and not ID, above?

 <owl:super owl:resource="p2" />
 <owl:super owl:resource="p3" />
</owl:IndividualProperty>

<owl:EnumeratedClass owl:name="CSProfessors">   <!-- Good -->

J: Why name and not ID, above?

 <owl:member owl:resource="ProfessorFoo" />     <!-- OK - resource
questionable -->
 <owl:member owl:resource="ProfessorFoo" />     <!-- OK - resource
questionable -->
</owl:EnumeratedClass>                          <!-- OK -->

<!-- RDF-compatible XML-Schema compatible -->

<owl:Individual owl:name="John">                <!-- Good -->

J: Why name and not ID?

 <owl:type owl:resource="Person" />             <!-- OK - resource
questionable -->
 <owl:property>                                 <!-- Unnecessary   
STRIPING -->
  <owl:IndividualPropertyValue owl:property="child">    <!-- Good -->
   <owl:individual owl:resource="Susan" />      <!-- individual="Susan"
? -->
  </owl:IndividualPropertyValue>                <!-- OK -->
 </owl:property>                                <!-- Unnecessary   
STRIPING -->
 <owl:property>                                 <!-- Unnecessary   
STRIPING -->
  <owl:IndividualPropertyValue owl:property="child">    <!-- Good -->
   <owl:individual>                             <!-- Unnecessary   
STRIPING -->
    <owl:Individual>                            <!-- OK -->
     <owl:type owl:resource="Person" />         <!-- OK - resource
questionable -->
    </owl:Individual>                           <!-- OK -->
   </owl:individual>                            <!-- Unnecessary   
STRIPING -->
  </owl:IndividualPropertyValue>                <!-- OK -->
 </owl:property>                                <!-- Unnecessary   
STRIPING -->
</owl:Individual>                               <!-- OK -->

J: Wow, the above individual syntax sure is ugly. I like either of the
ones below a lot better, although I think going with the last one (RDF
compatible) is probably best for this effort.

<!-- XML-Schema compatible, but not this schema, and not RDF-compatible
        <owl:Individual owl:name="John" owl:type="Person">
         <owl:property owl:property="child" owl:individual="Susan" />
        </owl:Individual>
 -->

<!-- regular RDF, not XML-Schema compatible
        <Person owl:ID="John">
         <child>
          <Person owl:ID="Susan" />
         </owl:child>
        </owl:Person>
-->

</owl:ontology>

J: One final thing, as your comments suggest, the striping really does
seem to get in the way of clean syntax.

Jeff

"Peter F. Patel-Schneider" wrote:
> 
> I put together an XML Schema that closely corresponds to the abstract
> syntax in the OWL Feature Specification document.  This is my first
> significant XML Schema, so there may be better ways of doing some of the
> things there.  Also enclosed is a simple, nonsensical document using the
> Schema.
> 
> Comments are welcome.
> 
> peter
> 
>   ------------------------------------------------------------------------
>                  Name: schema.xsd
>    schema.xsd    Type: Plain Text (Text/Plain)
>              Encoding: 7bit
> 
>                           Name: schema-example.text
>    schema-example.text    Type: Plain Text (Text/Plain)
>                       Encoding: 7bit

Received on Wednesday, 29 May 2002 16:05:35 UTC