OWL descriptions of lists

The following questions arose during an interchange with Bijan Parsia
and Peter Patel-Schneider.  The basic question is why Owl DL doesn't
allow descriptions of rdf:List and its accessories.  I won't quote any
of the e-mail so far, so as not to have to get permission to quote it,
but Bijan or Peter may want to repeat something they've said already.

In the Owl Reference (http://www.w3.org/TR/owl-ref/#appD), it says
that the correct way to restrict a list to have elements all of class
C is to write

>   <rdfs:Class rdf:ID="CList">
>     <rdfs:subClassOf rdf:resource="&rdf;List"/>
>     <rdfs:subClassOf>
>       <owl:Restriction>
>         <owl:onProperty rdf:resource="&rdf;first"/>
>         <owl:allValuesFrom rdf:resource="C"/>
>       </owl:Restriction>
>     </rdfs:subClassOf>
>     <rdfs:subClassOf>
>       <owl:Restriction>
>         <owl:onProperty rdf:resource="&rdf;rest"/>
>         <owl:allValuesFrom rdf:resource="#CList"/>
>       </owl:Restriction>
>     </rdfs:subClassOf>
>   </rdfs:Class>

However, it neglects to mention that mentioning rdf:List, rdf:first,
or rdf:rest moves you from Owl DL to Owl Full.  (See
http://www.w3.org/TR/owl-semantics/mapping.html#4.2 .)
I want to know why.

To elaborate, I would actually like to add a lot of descriptive
material to the list concept:

<owl:Class rdf:ID="Nonempty_list">
   <owl:subClassOf>
      <owl:Restriction>
	 <owl:onProperty rdf:resource="&rdf;first"/>
	 <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">
	    1</owl:cardinality>
      </owl:Restriction>
   </owl:subClassOf>
   <owl:subClassOf>
      <owl:Restriction>
	 <owl:onProperty rdf:resource="&rdf;rest"/>
	 <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">
	    1</owl:cardinality>
      </owl:Restriction>
</owl:Class>

<owl:Class rdf:ID="Empty_list">
   <owl:oneOf>
      <rdf:List>
	 <rdf:first rdf:resource="&rdf;nil"/>
	 <rdf:rest rdf:resource="&rdf;nil"/>
      </rdf:List>
   </owl:oneOf>
</owl:Class>

<owl:equivalentClass rdf:about="&rdf;List">
   <owl:unionOf>
      <rdf:List>
	 <rdf:first rdf:resource="#Nonempty_list"/>
	 <rdf:rest>
	    <rdf:List>
	       <rdf:first rdf:resource="#Empty_list"/>
	       <rdf:rest rdf:resource="&rdf;nil"/>
	    </rdf:List>
	 </rdf:rest>
      </rdf:List>
   </owl:unionOf>
</owl:equivalentClass rdf:about="&rdf;List">

<owl:Property rdf:about="&rdf;first">
   <owl:domain rdf:resource="#Nonempty_list"/>
</owl:Property>

<owl:Property rdf:about="&rdf;rest">
   <owl:domain rdf:resource="#Nonempty_list"/>
   <owl:range rdf:resource="&rdf;List"/>
</owl:Property>

I have avoided using parseType="Collection" so as not to conceal the
fact that List stuff is occurring as part of the argument conventions
as well as the constituting the entities being described.

What precisely is the problem with this description?  As far as I
know, it is perfectly consistent with the formal semantics of
rdf:List.  The relevant text from the RDF Model Theory
(http://www.w3.org/TR/rdf-mt/#Containers) is:

> Semantic extensions MAY place extra syntactic well-formedness
> restrictions on the use of this vocabulary in order to rule out such
> graphs. They MAY exclude interpretations of the collection vocabulary
> which violate the convention that the subject of a 'linked' collection
> of two-triple items of the form described above, ending with an item
> ending with rdf:nil, denotes a totally ordered sequence whose members
> are the denotations of the rdf:first values of the items, in the order
> got by tracing the rdf:rest properties from the subject to
> rdf:nil. This permits sequences which contain other sequences.
> 
> Note that the RDFS semantic conditions, described below, require that
> any subject of the rdf:first property, and any subject or object of
> the rdf:rest property, be of rdf:type rdf:List.

The only change is that I state that the domain of rdf:first and
rdf:rest is Nonempty_list.  This doesn't contradict the built-in
assumption, but strengthens it.  (The built-in assumption strikes me
as wrong; why should the empty list have a first and rest?)

Anyway, in case you've forgotten the question, it's: Where exactly
do my assertions require us to leave Owl DL, and why?

-- 
                                   -- Drew McDermott
                                      Yale Computer Science Department

Received on Friday, 9 January 2004 12:15:23 UTC