Re: more thoughts on daml+oil.daml

From: Peter F. Patel-Schneider (pfps@research.bell-labs.com)
Date: 10/09/01


From: Ian Horrocks <horrocks@cs.man.ac.uk>
Subject: Re: more thoughts on daml+oil.daml
Date: Tue, 9 Oct 2001 00:45:37 -0400

> On October 3, Peter F. Patel-Schneider writes:
> > It occurs to me that we could include more of the ``semantics'' of DAML+OIL
> > in daml+oil.daml.  For example, we could do more with lists, perhaps
> > something like:
> 
> I was under the impression that we had decided NOT to do this kind of
> thing, because it suggests some meaning that is not supported by the
> semantics. For example, in the case of lists, the restrictions are
> meaningless unless "rest" is a daml:ObjectProperty. Even if rest were
> a daml:ObjectProperty, then specifying a list with multiple "rest"
> lists would not (necessarily) lead to an inconsistency, but to the
> inference that all these lists are "equivalent" (their elements are to
> be interpreted as the same resources).
> 
> What we really want to say is that lists should have a certain
> structure, and that anything else is just an error. I don't think we
> should be fostering the common misconception that this is what is
> expressed by a DAML+OIL restriction.
> 
> Ian

How about the following?  

My goal is to see if it is possible to capture more of the semantics of
DAML+OIL in daml+oil.daml without giving the impression that there is more
there than there really is.  The idea is that daml+oil.daml should still be
valid RDF Schema, and loose nothing that was there before, but that it
should also have a DAML+OIL reading.

Note that there are a couple of substantive changes hidden in this new
version of daml+oil.daml!

peter


<!-- $Revision: 1.8 $ of $Date: 2001/10/09  $. -->

<!-- This is the official RDFS definition of the DAML+OIL constructs.  
     It contains no labels or comments, to reduce the amount of information
     needed to define DAML+OIL.  -->

<rdf:RDF
  xmlns:rdf ="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xmlns:daml="http://www.daml.org/2001/03/daml+oil#"
  xmlns     ="http://www.daml.org/2001/03/daml+oil#"
>

<rdf:Description rdf:about="">
  <versionInfo>$Id: daml+oil.daml,v 1.8 2001/10/09 pfps Exp $</versionInfo>
  <imports rdf:resource="http://www.w3.org/2000/01/rdf-schema" />
</rdf:Description>

<!-- (meta) classes of "object" and datatype classes  -->

<Class rdf:ID="Class">
  <rdfs:subClassOf rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class" />
</Class>

<Class rdf:ID="Datatype">
  <rdfs:subClassOf rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class" />
</Class>

<!-- Pre-defined thing/nothing most/least-general (object) classes. -->

<Class rdf:ID="Thing">
  <sameClassAs rdf:resource="rdfs:Resource" />
  <unionOf>
    <List>
      <first rdf:resource="#Nothing" />
      <rest>
        <List>
	  <first>
	    <Class>
	      <complementOf rdf:resource="#Nothing" />
	    </rdfs:Class>
          </first>
	  <rest rdf:resource="#nil" />
	</List>
      </rest>
    </List>
  </unionOf>
</Class>

<Class rdf:ID="Nothing">
  <complementOf rdf:resource="#Thing" />
</Class>

<!-- Terms for equivalence and difference. -->

<ObjectProperty rdf:ID="equivalentTo">
</ObjectProperty>

<ObjectProperty rdf:ID="sameClassAs">
  <rdfs:subPropertyOf rdf:resource="#equivalentTo" />
  <rdfs:subPropertyOf rdf:resource="http://www.w3.org/2000/01/rdf-schema#subClassOf" />
  <rdfs:domain rdf:resource="#Class" />
  <rdfs:range rdf:resource="#Class" />
</ObjectProperty>

<ObjectProperty rdf:ID="samePropertyAs">
  <rdfs:subPropertyOf rdf:resource="#equivalentTo" />
  <rdfs:subPropertyOf rdf:resource="http://www.w3.org/2000/01/rdf-schema#subPropertyOf" />
</ObjectProperty>

<ObjectProperty rdf:ID="sameIndividualAs">
  <rdfs:subPropertyOf rdf:resource="#equivalentTo" />
  <rdfs:domain rdf:resource="#Thing" />
  <rdfs:range rdf:resource="#Thing" />
</ObjectProperty>

<ObjectProperty rdf:ID="disjointWith">
  <rdfs:domain rdf:resource="#Class" />
  <rdfs:range rdf:resource="#Class" />
</ObjectProperty>

<ObjectProperty rdf:ID="differentIndividualFrom">
  <rdfs:domain rdf:resource="#Thing" />
  <rdfs:range rdf:resource="#Thing" />
</ObjectProperty>

<!-- Terms for building classes from other classes. -->

<Class rdf:ID="ClassList">
  <rdfs:subClassOf rdf:resource="#List">
  <intersectionOf>
    <List>
      <first>
        <Restriction>
	  <onProperty rdf:resource="#first">
	  <toClass rdf:resource="#Class">
	</Restriction>
      </first>
      <rest>
        <List>
	  <first>
	    <Restriction>
	      <onProperty rdf:resource="#rest">
	      <toClass rdf:resource="#ClassList">
            </Restriction>
          </first>
          <rest rdf:resource="#nil">
        </List>
      </rest>
    </List>
  </intersectionOf>
</Class>

<ObjectProperty rdf:ID="unionOf">
  <rdfs:domain rdf:resource="#Class" />
  <rdfs:range rdf:resource="#ClassList" />
</ObjectProperty>

<ObjectProperty rdf:ID="disjointUnionOf">
  <rdfs:domain rdf:resource="#Class" />
  <rdfs:range rdf:resource="#ClassList" />
</ObjectProperty>

<ObjectProperty rdf:ID="intersectionOf">
  <rdfs:domain rdf:resource="#Class" />
  <rdfs:range rdf:resource="#ClassList" />
</ObjectProperty>

<ObjectProperty rdf:ID="complementOf">
  <rdfs:domain rdf:resource="#Class" />
  <rdfs:range rdf:resource="#Class" />
</ObjectProperty>

<!-- Term for building classes by enumerating their elements -->

<ObjectProperty rdf:ID="oneOf">
  <rdfs:domain rdf:resource="#Class" />
  <rdfs:range rdf:resource="#List" />
</ObjectProperty>

<!-- Terms for building classes by restricting their properties. -->

<Class rdf:ID="Restriction">
  <rdfs:subClassOf rdf:resource="#Class" />
</Class>

<ObjectProperty rdf:ID="onProperty">
  <rdfs:domain rdf:resource="#Restriction" />
  <rdfs:range rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Property" />
</ObjectProperty>

<ObjectProperty rdf:ID="toClass">
  <rdfs:domain rdf:resource="#Restriction" />
  <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class" />
</ObjectProperty>

<rdf:Property rdf:ID="hasValue">
  <rdfs:domain rdf:resource="#Restriction" />
</rdf:Property>

<ObjectProperty rdf:ID="hasClass">
  <rdfs:domain rdf:resource="#Restriction" />
  <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class" />
</ObjectProperty>

<!-- Note that cardinality restrictions on transitive properties, or     -->
<!-- properties with transitive sub-properties, compromise decidability. -->

<DatatypeProperty rdf:ID="minCardinality">
  <rdfs:domain rdf:resource="#Restriction" />
  <rdfs:range rdf:resource="http://www.w3.org/2000/10/XMLSchema#nonNegativeInteger" />
</DatatypeProperty>

<DatatypeProperty rdf:ID="maxCardinality">
  <rdfs:domain rdf:resource="#Restriction" />
  <rdfs:range rdf:resource="http://www.w3.org/2000/10/XMLSchema#nonNegativeInteger" />
</DatatypeProperty>

<DatatypeProperty rdf:ID="cardinality">
  <rdfs:domain rdf:resource="#Restriction" />
  <rdfs:range rdf:resource="http://www.w3.org/2000/10/XMLSchema#nonNegativeInteger" />
</DatatypeProperty>

<ObjectProperty rdf:ID="hasClassQ">
  <rdfs:domain rdf:resource="#Restriction" />
  <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class" />
</ObjectProperty>

<DatatypeProperty rdf:ID="minCardinalityQ">
  <rdfs:domain rdf:resource="#Restriction" />
  <rdfs:range rdf:resource="http://www.w3.org/2000/10/XMLSchema#nonNegativeInteger" />
</DatatypeProperty>

<DatatypeProperty rdf:ID="maxCardinalityQ">
  <rdfs:domain rdf:resource="#Restriction" />
  <rdfs:range rdf:resource="http://www.w3.org/2000/10/XMLSchema#nonNegativeInteger" />
</DatatypeProperty>

<DatatypeProperty rdf:ID="cardinalityQ">
  <rdfs:domain rdf:resource="#Restriction" />
  <rdfs:range rdf:resource="http://www.w3.org/2000/10/XMLSchema#nonNegativeInteger" />
</DatatypeProperty>

<!-- Classes and Properties for different kinds of Property -->

<Class rdf:ID="ObjectProperty">
  <rdfs:subClassOf rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Property" />
</Class>

<Class rdf:ID="DatatypeProperty">
  <rdfs:subClassOf rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Property" />
</Class>

<!-- Terms for building and limiting Properties -->

<ObjectProperty rdf:ID="inverseOf">
  <rdfs:domain rdf:resource="#ObjectProperty" />
  <rdfs:range rdf:resource="#ObjectProperty" />
</ObjectProperty>

<Class rdf:ID="TransitiveProperty">
  <rdfs:subClassOf rdf:resource="#ObjectProperty" />
</Class>

<Class rdf:ID="UniqueProperty">
  <rdfs:subClassOf rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Property" />
</Class>

<Class rdf:ID="UnambiguousProperty">
  <rdfs:subClassOf rdf:resource="#ObjectProperty" />
</Class>

<!-- List terminology. -->

<Class rdf:ID="List">
  <rdfs:subClassOf>
    <Restriction #maxCardinality="1">
      <onProperty rdf:resource="#first">
    </Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
    <Restriction #maxCardinality="1">
      <onProperty rdf:resource="#rest">
    </Restriction>
  </rdfs:subClassOf>
</Class>

<ObjectProperty rdf:ID="first">
  <rdfs:domain rdf:resource="#List" />
  <rdfs:range rdf:resource="#Thing" />
</ObjectProperty>

<ObjectProperty rdf:ID="rest">
  <rdfs:domain rdf:resource="#List" />
  <rdfs:range rdf:resource="#List" />
</ObjectProperty>

<Class rdf:ID="Empty">
  <rdfs:subClassOf rdf:resource="List">
  <rdfs:subClassOf>
    <Restriction #cardinality="0">
      <onProperty rdf:resource="#rest">
    </Restriction>
  </rdfs:subClassOf>
  <rdfs:subClassOf>
    <Restriction #cardinality="0">
      <onProperty rdf:resource="#first">
    </Restriction>
  </rdfs:subClassOf>
</Class>

<Empty rdf:ID="nil">
</Empty>

<!-- A class for ontologies themselves... -->

<Class rdf:ID="Ontology">
</Class>

<rdf:Property rdf:ID="versionInfo">
</rdf:Property>

<!-- Importing, i.e. assertion by reference -->

<rdf:Property rdf:ID="imports">
</rdf:Property>

</rdf:RDF>


This archive was generated by hypermail 2.1.4 : 04/02/02 EST