Re: Properties as Classes?

From: "Fink, Clayton R." <Clayton.Fink@jhuapl.edu>
Subject: Properties as Classes?
Date: Fri, 8 Jul 2005 16:51:41 -0400

> We've been discussing whether or not defining properties as classes
> makes sense.  

> OWL Full seems to allow this.  

Indeed it does.

> The pupose here is to allow
> some edges in a graph to have properties.  

Well, edges in an RDF graph do indeed have "properties".  They have a head and
a tail and a label (aka subject, object, and predicate).  That's it.  Three
"properties", no more, no less.

Some formalisms allow other "properties" (often called facets) to be associated
with edges, but RDF doesn't and neither does any flavour of OWL.

> I'm wondering if this is a
> good idea. 

Some have argued for this in the past.

> What are the implications of doing something like this?  

Given that you can't do it in OWL, not much. :-)
In formalisms that allow this sort of thing, the implications varied
considerably.  In some formalisms properties of edges were essentially
decorations; in others they alluded to some formal characteristic of the edge
(such as certainty or probability) but they had no real implications; maybe in
even others they really interacted with the inference mechanism (but I can't
recall any systems where this was fully fleshed out).

> Is
> it good practice?

Often not.  For it to work right, it has to be built deep into the underlying
formalism, and this is *not* the case in RDF and OWL.

> Here's an example of what I'm talking about:
>  
> <owl:Class rdf:ID="A">
>   <rdfs:label>Foo</rdfs:label>
> </owl:Class>
>  
> <owl:ObjectProperty rdf:ID="edge">
>   <rdfs:label>edge</rdfs:label>
>   <rdfs:domain rdf:resource="#A"/>
>   <rdfs:range rdf:resource="#A"/>
> </owl:ObjectProperty>
>  
> <owl:Class rdf:about="#edge"/>

OK so far.  edge is both a class and a property.  Therefore there can both be
individuals that have it as a type (instances of it) and triples that have it as
their predicate.  However these two groups are disjoint.

> <owl:DatatypeProperty rdf:ID="edgeProp">
>   <rdfs:label>edgeProp</rdfs:label>
>   <rdfs:domain rdf:resource="#edge"/>
>   <rdfs:range rdf:resource="&xsd;int"/>
> </owl:DatatypeProperty>

OK, edgeProp relates instances of edge to integers.

However, edgeProp cannot relate triples that have edge as their predicate
to integers, because these are not instances of edge.

> FWIW, this kills SWOOP when I try to load it, but Jena reads it fine,
> with and without reasoners.

Neither is surprising to me.

> Thanks.
>  
> Clay Fink
> Senior Software Engineer
> Research and Technology Development Center
> Johns Hopkins University Applied Physics  Laboratory


Peter F. Patel-Schneider
Bell Labs Research

Received on Sunday, 10 July 2005 12:30:49 UTC