Re: Questions about owl:Restriction, owl:intersectionOf, and rdfs:subClassOf

On Apr 3, 2005, at 10:25 PM, James Cerra wrote:

> I'm a little confused by how to apply multiple owl:Restriction classes 
> to a
> class.  For instance, say we have two property restrictions:
>
> <#NeedsResult>
>   rdf:type        owl:Restriction             ;
>   owl:cardinality "1"^^xsd:nonNegativeInteger ;
>   owl:onProperty  <#result>                   .
>
> <#NeedsTime>
>   rdf:type        owl:Restriction             ;
>   owl:cardinality "1"^^xsd:nonNegativeInteger ;
>   owl:onProperty  <#time>                     .
>
> Each of these restrictions says that the class has to have a property 
> present -

And only one.

> namely <#result> or <#time> - correct?  Is it really necessary to 
> specify the
> datatypes to be xsd:nonNegativeInteger?

Yep. If you can get away with only at least one (and not also at most 
one), you could use a someValuesFrom instead.

> Now say I want to apply those restriction to owl:Class named 
> <#AnApplication>.
> That is, any resource of owl:Class <#AnApplication> has to have the 
> properties
> <#result> and <#time> specified.  Would I say:
>
> <#AnApplication>
>   rdf:type owl:Class ;
>   owl:intersectionOf [
>     rdf:type  rdf:List       ;
>     rdf:first <#NeedsResult> ;
>     rdf:rest  [
>       rdf:type  rdf:List     ;
>       rdf:first <#NeedsTime> ;
>       rdf:rest  rdf:nil      .
>     ] .
>   ] .

I wouldn't. Is AnApplication the set of *exactly* EVERYTHING that has 
exactly one of both these properties? If not, just subClass each of 
them.

> Now in the OWL Guide, it says in section 1.5.2 (example converted to 
> N3):
>
> ] Note how completely different this union type
> ] construct is from the following.
> ]
> ] <#Fruit>
> ]   rdf:type        owl:Class        ;
> ]   rdfs:subClassOf <#SweetFruit>    ;
> ]   rdfs:subClassOf <#NonSweetFruit> .
> ]
> ] This says that the instances of Fruit are a
> ] subset of the intersection of sweet and
> ] non-sweet fruit, which we would expect to be
> ] the empty set.
>
> Now this confuses me.  Does that mean that the definition of 
> <#AnApplication>
> could be written:
>
> <#AnApplication>
>   rdf:type        owl:Class      ;
>   rdfs:subClassOf <#NeedsResult> ;
>   rdfs:subClassOf <#NeedsTime>   .
>
> If not, they why?

It means something different. I personally think this is what *you* 
mean. Basically, in the first formulation, you said your class was 
*equivalent* to the intersection. here you are saying that it is the 
*subclass* of the intersection. It's the biconditional vs. the 
conditional (if you are familar with logic).

>  I much perfer this shorter form if possible.

Don't prefer short or long forms! Prefer the expression with the right 
meaning :)

In this case, I think you win both ways.

I have a preference for subclassing each (in this case), rather than 
subClassing the explicit intersection, since it is a bit terse and 
also, IMHO, clearly.

> Thanks in advance for clearing this up.

You're welcome in advance if I have done so.

Cheers,
Bijan Parsia.

Received on Monday, 4 April 2005 02:37:42 UTC