- From: Michael Kifer <kifer@cs.sunysb.edu>
- Date: Wed, 25 Apr 2007 02:19:42 -0400
- To: Sandro Hawke <sandro@w3.org>
- Cc: Jos de Bruijn <jos.debruijn@deri.org>, RIF <public-rif-wg@w3.org>
> > Jos writes: > > > In RDF we have > > > > > > john rdf:type Person entails _:x rdf:type Person > > > > > > where _:x is a bNode. The entailment relationship holds because there is > > > an assignment for _:x which is the same as the interpretation of the > > > constant john. > > > > > > > > > If we would translate _:x to a local constant, say, x, then this > > > entailment relation no longer holds: > > > > > > john rdf:type Person not-entails x rdf:type Person > > > > > > Although john and x may denote the same individual in some > > > interpretation, this is by no means the case in every interpretation > > > which is a model of john rdf:type Person. > > Michael Kifer replies: > > Actually this is not a good example. A better way to approximate bnodes is > > to translate them into skolem in the head and into existentials in the > > body. This is how it is done in FLORA-2 and (I think I saw somewhere) cwm. > > > > In your example _:x rdf:type Person to the right of "entails" > > is a query, i.e., it is a body literal. So, it is translated into an > > existential and everything is hunky-dori. (Existentials in rule bodies are > > fine.) > > > > This is not to say that this simulation is completely adequate, but this > > particular case is not a problem. > > I understood Jos to only be talking about facts (not rules) in this > example. Is that also your understanding? When you talk about > "entails" as if it were a rule, are you making an analogy? I am not making any analogies. Formally, if P is a set of rules and Exists X Q is a query then P entails Exists X Q is what we are checking to find answers to the query in a rule-based language. An existential conjunctive query is even a Horn clause. This was exactly the case in Jos' example. --michael > If so, then I think I agree. Jos, your example manifests the difference > only when RIF Core is used to express what is entailed, and we never > need to to do that. Use FOL to talk about what is entailed, and we > don't see a difference, do we? > > rif("john rdf:type f:Person") |= exists x triple(x, rdf:type, f:Person) > rdf("_:john rdf:type f:Person") |= exists x triple(x, rdf:type, f:Person) > > (Neither "john" nor "_:john" can be named in the entailments, since they > are both in a sense local, and so not in scope for use elsewhere.) > > You mentioned that SPARQL result sets include b-Node identifiers, but > those are only in-scope for a particular result set (like the x in my > entailments). They are not actually revealing the local names which > might have been used in the data-being-queried: > > There need not be any relation between a label _:a in the > result set and a blank node in the data graph with the same > label. > > An application writer should not expect blank node labels in a > query to refer to a particular blank node in the data. > > -- Current SPARQL Draft [1] > > So I don't see a problem there. (I'm also kind of baffled on how the > semantics of local names in RIF are supposed to be different from the > semantics of file-scope existentials. Example anyone? I think it's the > same question.) > > -- Sandro > > > [1] http://www.w3.org/TR/2007/WD-rdf-sparql-query-20070326/#BlankNodesInResults >
Received on Wednesday, 25 April 2007 06:19:55 UTC