On Fri, Oct 7, 2011 at 5:08 PM, Joshua TAYLOR <[email protected]> wrote:
> On Fri, Oct 7, 2011 at 4:27 PM, Ian Dickinson <[email protected]> wrote:
>> I think this is one of those cases where the DL worldview and the RDF
>> worldview collide. RDF is an edge-labelled directed graph: there are no
>> edges without labels. In other words, there are no triples with anonymous
>> predicates, so no way of creating a Property object (or ObjectProperty, etc)
>> without a URI.
>>
>> You'll have to generate skolem constants for the names of the inverse(P)
>> properties.
>
> Thanks for the quick response!  I still have a little bit of confusion, 
> though:
>
> What would be used as skolem constants in this context?  I'd though
> that this was a situation for blank nodes, and was essentially what,
> e.g., createClass() does for class names, i.e., creating a blank node
> for the class when the class doesn't have a specific name.  But I'm
> not sure how to get a blank node reference to use for the property
> expression (that I can convert to a property expression when I need
> to).

Sorry for so many replies to myself today, but hopefully it's saving
someone else some trouble.  Since  [1]

"""An RDF triple contains three components:
    the subject, which is an RDF URI reference or a blank node
    the predicate, which is an RDF URI reference
    the object, which is an RDF URI reference, a literal or a blank node.
An RDF triple is conventionally written in the order subject, predicate, object.
The predicate is also known as the property of the triple."""

I see why the predicate of a triple can't be a blank node. The range
of owl:onProperty, however, includes blank nodes, and that's why the
DL view can allow for inverses without names, and then the semantics
of OWL takes care of the rest.

Of course, now, because I was curious, I went and looked up the
rdfs:range of owl:onProperty in the OWL namespace [2] it happens to be
rdf:Property:

<rdf:Property rdf:about="http://www.w3.org/2002/07/owl#onProperty";>
<rdfs:comment>The property that determines the property that a
property restriction refers to.</rdfs:comment>
<rdfs:domain rdf:resource="http://www.w3.org/2002/07/owl#Restriction"/>
<rdfs:isDefinedBy rdf:resource="http://www.w3.org/2002/07/owl#"/>
<rdfs:label>onProperty</rdfs:label>
<rdfs:range rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"/>
</rdf:Property>

Looking up rdf:Property from [3]

<rdfs:Class rdf:about="http://www.w3.org/1999/02/22-rdf-syntax-ns#Property";>
<rdfs:isDefinedBy rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>
<rdfs:label>Property</rdfs:label>
<rdfs:comment>The class of RDF properties.</rdfs:comment>
<rdfs:subClassOf rdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/>
</rdfs:Class>

So while the predicate of a *triple* must be a URI, Properties needn't
be.  And on top of that, the rdfs:range of rdf:predicate from the
reification syntax isn't rdf:Property, but rdf:Resource [3]!

<rdf:Property rdf:about="http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate";>
<rdfs:isDefinedBy rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>
<rdfs:label>predicate</rdfs:label>
<rdfs:comment>The predicate of the subject RDF statement.</rdfs:comment>
<rdfs:domain 
rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Statement"/>
<rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/>
</rdf:Property>

At any rate, what I think I'm supposed to take away from this is that
RDF triples have to have URIs as their predicate, but Restrictions
only have to have rdfs:Properties as their owl:onProperty, and there
can be rdfs:Properties that aren't URIs (e.g., blank nodes).  However,
the only rdfs:Properties that can be used as *Jena* Properties are
URIs.  Does this sound right?

//JT

[1] http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#section-triples
[2] http://www.w3.org/2002/07/owl
[3] http://www.w3.org/1999/02/22-rdf-syntax-ns#Property

-- 
Joshua Taylor, http://www.cs.rpi.edu/~tayloj/

Reply via email to