- From: Peter F. Patel-Schneider <pfps@research.bell-labs.com>
- Date: Thu, 22 May 2003 08:08:18 -0400 (EDT)
- To: jon@spin.ie
- Cc: www-rdf-interest@w3.org
From: "Jon Hanna" <jon@spin.ie> Subject: RE: Are properties from a context-constrained class inherited by subclasses? Date: Thu, 22 May 2003 11:00:56 +0100 > > > Hi Folks, > > > > Suppose that I have this class heirarchy: > > > > River > > | > > Flueve > > | > > Blah > > > > Suppose that the property, emptiesInto, has a domain of River: > > > > <owl:ObjectProperty rdf:ID="emptiesInto"> > > <rdfs:domain rdf:resource="#River"/> > > <rdfs:range rdf:resource="#BodyOfWater"/> > > </owl:ObjectProperty> > > > > Suppose the Flueve constrains emptiesInto to have a range of #Sea: > > > > <owl:Class rdf:ID="Flueve"> > > <rdfs:subClassOf rdf:resource="#River"/> > > <rdfs:subClassOf> > > <owl:Restriction> > > <owl:onProperty rdf:resource="#emptiesInto"/> > > <owl:allValuesFrom rdf:resource="#Sea"/> > > </owl:Restriction> > > </rdfs:subClassOf> > > </owl:Class> > > > > Question: what is the range of emptiesInto when used in the Blah > > Class? /Roger > > In the absence of a further restriction then it would be #Sea. It would be > possible to further restrict the range for Blah, but that must be compatible > with the fact that all Blahs are Flueves and hence it must be either a > subClassOf #Sea, or at least not disjoint with #Sea (in which case the union > of the two restrictions will apply): > > Given > <#Lake> <owl:disjointWith> <#Sea> . > <#InlandSea> <rdfs:subClassOf> <#Sea> . > <#Briney> <rdfs:subClassOf> <#BodyOfWater> . > > Then you would be clearly allowed to restrict the range of #emptiesInto to > #InlandSea, and clearly not allowed to restrict it to #Lake. It *is* permitted to say <owl:Class rdf:ID="Blah"> <rdfs:subClassOf rdf:resource="#Flueve"/> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#emptiesInto"/> <owl:allValuesFrom rdf:resource="#Lake"/> </owl:Restriction> </rdfs:subClassOf> </owl:Class> here. It is not particularly useful, as this ends up meaning that Blah's don't empty into anything and that could more-explicitly be said via <owl:Class rdf:ID="Blah"> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#emptiesInto"/> <owl:cardinality rdfs:datatype="xsd:nonNegativeInteger">0</owl:cardinality> </owl:Restriction> </rdfs:subClassOf> </owl:Class> > #Briney is less clear. It may be that #Briney is a subClassOf #Sea, but we > just don't have the triple stating this, in which case it's clearly allowed. > Likewise it may be that #Briney is disjointWith #Sea, in which case it's > clearly not allowed. This is not correct reasoning. In the absence of information on whether Briney is a subclass of or disjoint with Sea, <owl:Class rdf:ID="Blah"> <rdfs:subClassOf rdf:resource="#Flueve"/> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#emptiesInto"/> <owl:allValuesFrom rdf:resource="#Briney"/> </owl:Restriction> </rdfs:subClassOf> </owl:Class> is not only permitted, but is useful. > It may also be that #Briney overlaps with #Sea, in which case it is allowed, > but the restriction to #Sea still applies. Hence if you restrict > #emptiesInto predicates to have a range of #Briney when the object is a > #Blah then anything a #Blah empties into must be both a #Briney and also a > #Sea. Or alternatively if you are told that a #Blah emptiesInto > #JonsRunOutOfExampleNames then you know that > > <#JonsRunOutOfExampleNames> <rdf:type> <#Briney> . > <#JonsRunOutOfExampleNames> <rdf:type> <#Sea> . Peter F. Patel-Schneider Bell Labs Research
Received on Thursday, 22 May 2003 08:09:08 UTC