The evaluation of GRAPH is defined by

http://www.w3.org/TR/sparql11-query/#defn_evalGraph

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's a loop over

Join(
   eval on graph_i of pattern {}
   Ω(?var->i)
)

eval on graph_i of pattern {} is a binding od one row, no variables; the join identity. Joined to a binding of ?var/i and you get ?var/i.

Union it all and it's the set of graph IRIs (no duplicates because the join identity does not introduce any).

        Andy

On 13/08/13 20:10, Axel Polleres wrote:
[[
The group pattern:
  { }
matches any graph (including the empty graph) with one solution that does not 
bind any variables.
]]

This only means that upon

  SELECT ?G WHERE { GRAPH ?G {} }

also empty named graphs should be returned, which would not be the case for

  SELECT ?G WHERE { GRAPH ?G { ?S ?P ?O } }

Obviously, this makes a difference for all graph stores that support empty 
named graphs.
So, to my understanding at least, this is not a bug in the spec.

HTH,
Axel

On 13 Aug 2013, at 20:21, David Booth <[email protected]> wrote:

Hi Axel,

That doesn't work in Sesame 2.7.1 at least, apparently because ?G is not bound, 
even though there is one solution.  The SPARQL 1.1 spec says:
http://www.w3.org/TR/sparql11-query/#emptyGroupPattern
[[
The group pattern:
  { }
matches any graph (including the empty graph) with one solution that does not 
bind any variables.
]]

Is this a bug in the spec?

David

On 08/13/2013 11:48 AM, Axel Polleres wrote:
Hi Quentin,

how about just

  SELECT ?G WHERE { GRAPH ?G {} }

(no need to dump all triples, if the only concern is which ?G exist)

BTW, [email protected] may be the list you wanted to use.

best,
Axel





Reply via email to