Re: OIL Class Expressions in RDF

At 09:04 PM 10/4/00 +0100, McBride, Brian wrote:
>Part of it is that herbivore is defined to be a subclass of
>a class expression.  I would have expected it to be a subclass
>of the value of that expression.

My 2 penn'orth...

I think the point here is that the _value_ of a class expression _is_ a 
class.  So it is a subclass of the _value_ of the class expression.

>Further, the class of which herbivore is a subclass is of type
>oil:not.  Herbivore is also a subclass of oil:not.
>Intuitively, that feels very odd.

This may have more to do with the choice of names.   If the names were 

   ([anon:cexpr], [rdf:type], [oil:NegationOfSomething])
   ([anon:cexpr], [oil:theSomething], [#carnivore])

would it still feel so odd?

>I've only got a contrived example to illustrate this one.  The
>class not carnivore is also the conjunction of not (carnivores
>with legs) and not (carnivores without legs).  This might be modelled
>([#herbivore],  [rdfs:subClassOf], [anon:cexpr])
>([anon:cexpr],  [rdf:type],        [oil:and])
>([anon:cexpr],  [oil:hasOperand],  [cexpr2])
>([anon:cexpr],  [oil:hasOperand],  [cexpr3])
>where cexpr2 and cexpr3 have further statements to define them
>as not (carnivores with legs), and not (carnivores without legs)
>If we combine these two sets of statements, which an RDF processor
>is quite free to do as these are all statements about the same
>resource [cexpr] then we get:
>([#herbivore],  [rdfs:subClassOf], [anon:cexpr])
>([anon:cexpr],  [rdf:type],        [oil:not])
>([anon:cexpr],  [oil:hasOperand],  [#carnivore])

>([#herbivore],  [rdfs:subClassOf], [anon:cexpr])
>([anon:cexpr],  [rdf:type],        [oil:and])
>([anon:cexpr],  [oil:hasOperand],  [cexpr1])
>([anon:cexpr],  [oil:hasOperand],  [cexpr2])
>But now, we don't know which operand goes with with which operator.
>Basically, I'm concerned that the way class expressions have been
>coded in RDF is such that they might be messed up by an RDF
>processor which doesn't have the appropriate logic processing.

I think the problem above is that you've assigned the same resource 
identifier (anon:cexpr) to placeholders for two *different* class 
expressions.  They may have the same value, but they're different 
expressions.  I think:

>([#herbivore],  [rdfs:subClassOf], [anon:cexprA])
>([anon:cexprA], [rdf:type],        [oil:not])
>([anon:cexprA], [oil:hasOperand],  [#carnivore])

>([#herbivore],  [rdfs:subClassOf], [anon:cexprB])
>([anon:cexprB], [rdf:type],        [oil:and])
>([anon:cexprB], [oil:hasOperand],  [cexpr1])
>([anon:cexprB], [oil:hasOperand],  [cexpr2])

would be right, and keeps the classes and operands properly attributable.


Graham Klyne

Received on Wednesday, 4 October 2000 18:16:50 UTC