- From: David Booth <david@dbooth.org>
- Date: Wed, 14 Aug 2013 09:34:09 -0400
- To: Axel Polleres <axel@polleres.net>
- CC: Quentin Reul <Quentin.H.Reul@gmail.com>, semantic-web@w3.org, public-rdf-wg@w3.org, public-sparql-dev@w3.org, Andy Seaborne <andy@apache.org>, Steve Harris <steve.harris@garlik.com>
[Copying Andy Seaborne and Steve Harris for their input.] Hi Axel, The part of the spec that I was trying to bring to your attention was where it says that the empty group graph pattern "does not bind *any* variables" (my emphasis). If ?G is not bound then that short form of listing existing graphs would not work. But I am not sure from reading the spec whether ?G is supposed to be bound or not. The SPARQL algebra says: 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 ]] Hmm, there's right parenthesis missing, which I guess I'll report separately. It looks like Ω(?var->i) is binding the graph variable, but then it's doing a "Join", which is defined as: http://www.w3.org/TR/sparql11-query/#defn_algJoin [[ Join(Ω1, Ω2) = { merge(μ1, μ2) | μ1 in Ω1and μ2 in Ω2, and μ1 and μ2 are compatible } ]] I couldn't readily find the definition of the merge function, but I think I found the definition of "compatible": http://www.w3.org/TR/sparql11-query/#defn_algCompatibleMapping [[ Two solution mappings μ1 and μ2 are compatible if, for every variable v in dom(μ1) and in dom(μ2), μ1(v) = μ2(v). ]] which seems to be saying that the variables being joined must be bound to the same values. But since the empty basic graph pattern does not bind ?G, I *think* this means that Ω(?var->i) would *not* be compatible and ?G would therefore not be bound in the result. So, if I have properly followed the SPARQL algebra, I *think* this means that the short form that you suggested for listing graphs will not work, and it is not possible to get a list of graphs that includes empty graphs. (Hence the Sesame 2.7.1 behavior is correct.) Andy or Steve, have I got this right? Thanks, David On 08/13/2013 03:10 PM, 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 <david@dbooth.org> 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, public-sparql-dev@w3.org may be the list you wanted to use. >>> >>> best, Axel >>> > > > >
Received on Wednesday, 14 August 2013 13:34:41 UTC