Re: [SWC] RIF & OWL compatibility

Enrico Franconi <franconi@inf.unibz.it>:
>
> On 12 Jan 2006, at 17:06, Michael Kifer wrote:
> > From talking to a number of people with real-world RDF experience,
> > I get the impression that b-nodes are used to refer to individuals  
> > when it
> > is too inconvenient to give them explicit names. This is just  
> > Scolemization.
> >
> > Does anybody have *real-world* RDF experience with cases where truly
> > existential semantics of b-nodes is used?
> 
> You don't need to go very far.
> It is needed in order to capture pure basic SPARQL with RDF entailment.
> 
> For example, given the data
>      age(:john, "25"^^xsd:decimal)
> corresponding to the RDF triple
>      :john :age "25"^^xsd:decimal .
> then the following is RDF entailed
>      rdf:XMLLiteral(_:b)
> corresponding to the RDF triple
>      _:b rdf:type rdf:XMLLiteral .
> where _:b is a bnode, with a true existential semantics for _:b.
> Note that the triple
>      "25"^^xsd:decimal rdf:type rdf:XMLLiteral .
> is not legal RDF, since literals can not appear in subject position.  
> In fact, the RDF triple
>      _:b rdf:type rdf:XMLLiteral .
> is really the strictest (and only) entailment that can be done from  
> the starting data.
> So, the SPARQL query (allow us some liberty in the syntax for the  
> sake of clarity)
>      Q() :- rdf:XMLLiteral(_:b)
> should return TRUE.
> 
> Now, let's play this game in RIF, that should *at least* capture the  
> basics of SPARQL.
> In this example we have chosen to represent triples within RIF with a  
> predicate "triple/3".
> Given the data
>      triple(:john, :age, "25"^^xsd:decimal)
> the above query can be rewritten as
>      :- triple(B, rdf:type, rdf:XMLLiteral)
> In order to correctly answer the above basic query in RIF, you need  
> an additional (unsafe) rule of the type:
>      triple(B, rdf:type, rdf:XMLLiteral) :- triple(X, Y, Z), isLiteral 
> (Z)
> where the variable B in the head is a true existential.
> Note that the safe rule
>      triple(Z, rdf:type, rdf:XMLLiteral) :- triple(X, Y, Z), isLiteral 
> (Z)
> would be wrong, since it would entail the fact
>      triple("25"^^xsd:decimal, rdf:type, rdf:XMLLiteral)
> which is not a legal RDF triple.
> 
> The moral is: if RIF has to at least capture (and extend with  
> recursion, negation, etc) basic SPARQL with RDF entailment, then true  
> existential in the heads of rules are required.
> 
> cheers
> --enrico+sergio
> 

This can be captured as

  triple(_#(Z), rdf:type, rdf:XMLLiteral) :- triple(X, Y, Z), isLiteral(Z).

But I am not saying that RIF will end up being a single language with a
single semantics. More likely (I think) it will be like RuleML - a family of
languages with different semantics, which are unified by a common markup.


	--michael  

Received on Saturday, 14 January 2006 17:33:52 UTC