On 17/06/16 20:36, james anderson wrote:
On 2016-06-17, at 21:10, Jeremy J Carroll <j...@syapse.com
<mailto:j...@syapse.com>> wrote:
Given the interesting conversation about EXISTS, I have a slightly
related question
select *
{ graph <eg:graph> {
?s <eg:b> ?o
FILTER EXISTS {
?s <eg:c> ?o
}
}
}
is the <eg:c> matched against the default graph or <eg:graph>?
given the definitions in the recommendation, {?s <eg:c> ?o } should
apply to the given graph.
while the definition does not take the trouble to describe the meaning
specific to forms, i have understood only
- {graph <x> {graph <y> … } } to limit the scope
- {graph ?x … } to have scope limited by projection which did not include ?x
- {graph ?? { service … } } to limit scope
where, for the service case, i am ambivalent.
I sometimes get results for this sort of query that surprise me, and
so I tend to explicitly repeat the graph scope.
In the definition:
https://www.w3.org/TR/sparql11-query/#defn_evalGraph
if IRI is a graph name in D
eval(D(G), Graph(IRI,P)) = eval(D(D[IRI]), P)
if IRI is not a graph name in D
eval(D(G), Graph(IRI,P)) = the empty multiset
eval(D(G), Graph(var,P)) =
Let R be the empty multiset
foreach IRI i in D
R := Union(R, Join( eval(D(D[i]), P) , Ω(?var->i) )
the result is R
...
so it is setting the active graph from "GRAPH <eg:graph>" or "GRAPH ?g"
to the {contained} pattern all the way down. No, you can't get back to
the default graph - the both WGs were aware of this as I recall.
For SERVICE, all that matters is the endpoint - the active graph is not
passed across.
Andy
best regards, from berlin,
---
james anderson | ja...@dydra.com <mailto:ja...@dydra.com> | http://dydra.com