- From: Michael Kifer <kifer@cs.sunysb.edu>
- Date: Sat, 14 Jan 2006 12:33:30 -0500
- To: Enrico Franconi <franconi@inf.unibz.it>
- Cc: "Gerd Wagner" <wagnerg@tu-cottbus.de>, "'Jos de Bruijn'" <jos.debruijn@deri.org>, public-rif-wg@w3.org
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