W3C home > Mailing lists > Public > public-webont-comments@w3.org > November 2003

Re: List-valued Properties?

From: Jeremy Carroll <jjc@hplb.hpl.hp.com>
Date: Fri, 21 Nov 2003 15:00:28 +0000
Message-ID: <3FBE288C.8010803@hplb.hpl.hp.com>
To: "kdkeck@lbl.gov" <kdkeck@lbl.gov>
Cc: public-webont-comments@w3.org

thanks for your comment


Kevin D. Keck wrote:

> It appears to me that OWL Lite and OWL DL provide no way to define a 
> Property
> with bounded (and/or ordered), type-restricted values, other than by
> subclassing rdf:List or some similarly distateful kludge. For the same
> reasons which compelled the RDF Core group to add rdf:List to RDF (and some
> of which have led to a number of uses of Lists in OWL itself), I submit 
> that
> it's important for OWL to be able to fully support Lists as RDF primitives
> distinct from owl:Classes.


In fact things are worse than you observe.

http://www.w3.org/TR/2003/WD-owl-semantics-20030331/mapping.html#4.2
[[
Definition: The disallowed vocabulary from RDF is rdf:type, rdf:Property, 
rdf:nil, rdf:List, rdf:XMLLiteral, rdf:first, rdf:rest, rdfs:domain, 
rdfs:range, rdfs:Resource, rdfs:Datatype, rdfs:Class, rdfs:subClassOf, 
rdfs:subPropertyOf, rdfs:member, rdfs:Container and 
rdfs:ContainerMembershipProperty.

...

Definition: A collection of OWL DL ontologies in abstract syntax form, O, 
has a separated vocabulary if
... and do not mention any disallowed vocabulary.

]]


in other words rdf:List rdf:first and rdf:rest can only be used for OWL 
constructs such as class descriptions.
They may not be used in subClassOf or subPropertyOf statements.


> 
> For my current purposes, it would be entirely adequate to provide an
> "owl:List" form to be used as a third kind of range restriction, in 
> addition
> to class descriptions and data ranges. It could have a single property (say
> "owl:memberType") specifying a class description, data range, or nested 
> list
> description. E.g.:
> 
> <owl:ObjectProperty rdf:about="#cast">
>   <owl:domain rdf:resource="#Show"/>
>   <owl:range>
>     <owl:List>
>       <owl:memberType rdf:resource="#Actor"/>
>     </owl:List>
>   </owl:range>
> </owl:ObjectProperty>
> 
> <ex:Show>
>   <ex:cast parseType="Collection">
>     <ex:Actor ex:name="Ahnuld"/>
>     <ex:Actor ex:name="Madonna"/>
>   </ex:cast>
> </ex:Show>
> 
> Does this make sense (the proposal, not the example cast)?


This might be nice, but:
1) the candidate recommendation permits you to define your own list 
vocabulary when you wish a list to be part of your ontology (it may not be 
possible to state all the natural constraints on lists using OWL, e.g. 
finiteness). This is possible in OWL Lite, OWL DL, and OWL Full.
2) you may use the rdf:List vocabulary within an OWL Full ontology
3) the rdf:parseType="Collection" construct only works with the rdf:List 
vocabulary


The rationale for the restrictions on OWL DL is that the typical 
implementation requires a clear separation between the logical vocabulary, 
used to construct class descriptions etc., and the user vocabulary used to 
name classes, individuals and properties.

Here is my attempt to recast your example within the constraints of OWL DL.

<owl:ObjectProperty rdf:about="#cast">
   <owl:domain rdf:resource="#Show"/>
   <owl:range  rdf:resource="#ListOfActor"/>
</owl:ObjectProperty>
<owl:Class rdf:ID="ListOfActor">
  <owl:unionOf rdf:parseType="Collection">
   <owl:Class>
    <owl:oneOf rdf:parseType="Collection">
     <owl:Thing rdf:ID="EmptyListOfActor"/>
    </owl:oneOf>
   </owl:Class>
   <owl:Class rdf:ID="NonEmptyListOfActor">
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Restriction>
        <owl:onProperty rdf:resource="#myFirst"/>
        <owl:cardinality rdf:datatype=
"&xsd;int">1</owl:cardinality>
      </owl:Restriction>
      <owl:Restriction>
        <owl:onProperty rdf:resource="#myRest"/>
        <owl:cardinality rdf:datatype=
"&xsd;int">1</owl:cardinality>
      </owl:Restriction>
     </owl:intersectionOf>
    </owl:Class>
   </owl:unionOf>
</owl:Class>

<ex:Show>
  <ex:cast>
   <ex:ListOfActor>
    <ex:myFirst>
     <ex:Actor ex:name="Ahnuld"/>
    </ex:myFirst>
    <ex:myRest>
     <ex:ListOfActor>
      <ex:myFirst>
       <ex:Actor ex:name="Madonna"/>
      </ex:myFirst>
      <ex:myRest rdf:resource="#EmptyListOfActor"/>
     </ex:ListOfActor>
    </ex:myRest>
   </ex:ListOfActor>
  </ex:cast>
</ex:Show>

You would probably also want to add domain and range constraints on 
#myFirst and #myRest and add an axiom stating that the two cardinality 
restrictions are owl:equivalentClass to each other.

Sorry not to be more helpful.

Please reply to public-webont-comments@w3.org indicating whether this 
response is satisfactory, or whether you want the Working Group to consider 
this issue further.

Jeremy Carroll
Received on Friday, 21 November 2003 10:01:45 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 7 December 2009 10:43:29 GMT