W3C home > Mailing lists > Public > www-rdf-interest@w3.org > October 2000

Re: OIL Class Expressions in RDF

From: Graham Klyne <GK@Dial.pipex.com>
Date: Wed, 04 Oct 2000 23:10:04 +0100
Message-Id: <4.3.2.7.2.20001004225757.00ce59d0@pop.dial.pipex.com>
To: "McBride, Brian" <bwm@hplb.hpl.hp.com>
Cc: Jeen Broekstra <jbroeks@cs.vu.nl>, www-rdf-interest@w3.org
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 
different:

   ([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)
>respectively.
>
>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.

#g

------------
Graham Klyne
(GK@ACM.ORG)
Received on Wednesday, 4 October 2000 18:16:50 GMT

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