- From: Dave Reynolds <dave.e.reynolds@gmail.com>
- Date: Wed, 28 Jul 2010 17:50:46 +0100
- To: Sandro Hawke <sandro@w3.org>
- Cc: public-rif-wg <public-rif-wg@w3.org>
On Wed, 2010-07-28 at 11:50 -0400, Sandro Hawke wrote: > On Tue, 2010-07-27 at 23:36 +0100, Dave Reynolds wrote: > > > However, I'm pretty sure we did add new-node-construction into RIF > > > Core, although we may not have realized it at the time. Specifically, > > > the list constructor (or at least the list builtins) act like a Skolem > > > function. > ... > > > Of course, the slightly sneaky way this is done may mean > > > it wont be correctly implemented. Someone should provide some test > > > cases on this... > > > > > > Let's see: > > > > > > if x uncle y then exists z: x father z and y brother z > > > > > > in BLD, with a Skolem function sk1 replacing the existential: > > > > > > forall ?X ?Y ( > > > And( ?X[parent->sk1(?X ?Y)] > > > sk1(?X ?Y)[brother->?Y] ) :- ?X[uncle->?Y] > > > > > > and in Core, using a list constructor, and a per-application skolem > > > constant my:sk1 (which should be unique per rule): > > > > > > forall ?X ?Y ( > > > And( ?X[parent->func:make-list(my:sk1 ?X ?Y)] > > > func:make-list(my:sk1 ?X ?Y)][brother->?Y] ) :- ?X[uncle->?Y] > > > > > > and fact: > > > my:sandro[uncle->my:martin] > > > > > > entails: > > > exists ?P And(my:sandro[parent->?P and ?P[brother->my:martin]) > > > > > > > > > Any comments on that now, or should I put it on the wiki? (cleaning > > > up the syntax/qname a bit.) > > > > Hmmm. > > > > I guess that's correct but you are right it won't be correctly > > implemented. Most RDF systems essentially use skolem constants for > > bNodes, including list elements, so identifying two lists because they > > have the same elements would lead to problems, especially with SPARQL. > > > > A SPARQL query of the form: > > > > SELECT ?P {my:sandro my:parent ?P. ?P my:brother my:martin. } > > > > over a plain graph: > > > > my:sandro my:parent (my:sk1 my:sandro my:martin) . > > (my:sk1 my:sandro my:martin) my:brother my:martin . > > > > returns no results. > > > > This may be an issue for the SPARQL RIF entailment regime. Does this > > mean that the entailment regime should specify that the RDF graph > > closure entailed by RIF should be "leaned" (as in "made lean") before > > applying the SPARQL graph pattern? > > > > That way the behaviour of the SPARQL query would match the corresponding > > "exists ?P .." RIF formula. > > > > At the cost of introducing an NP complete operation in the middle of > > what would otherwise be a polynomial problem. Ugh. > > Although making the graph lean would address this particular instance > data, I think RIF entailment would also give this result if, for > instance, the list nodes had URI labels (instead of being blank nodes). I hope not. Otherwise round tripping RDF via RIF would be problematic! Dave > And making the graph lean wouldn't help with that. > > I think this result follows, instead, from the bidirectional mapping > between RDF collections and RIF lists. I'm not sure, but that strikes > me as a polynomial problem [which, with typical data, I bet will be > slower than graph leaning would be :-) ]. > > -- Sandro > >
Received on Wednesday, 28 July 2010 16:51:28 UTC