- From: Andrew Newman <andrewfnewman@gmail.com>
- Date: Tue, 18 Mar 2008 14:45:43 +1000
- To: "Lee Feigenbaum" <lee@thefigtrees.net>
- Cc: andy.seaborne@hp.com, "Arjohn Kampman" <arjohn.kampman@aduna-software.com>, "public-rdf-dawg-comments@w3.org" <public-rdf-dawg-comments@w3.org>
On 18/03/2008, Lee Feigenbaum <lee@thefigtrees.net> wrote: > Hi Andrew, > > I think that you still might be confusing curly-brace SPARQL syntax with > curly-brace set notation. They're two very different things that > (unfortunately?) use the same character. I've tried to clarify inline below. > You're right I do find the SPARQL syntax confusing. > But if I were defining it, I'd say that a group pattern is a pair > consisting of a set of zero or more graph patterns and a set of zero or > more filter expressions. The empty group graph pattern then, is ({}, {}) > - an empty set of graph patterns and an empty set of filters. For > simplicity, I'll omit the filters from the rest of this discussion, so > the empty graph pattern is indeed empty: {}. > I'm not sure how it's a set - because it seems as if in SPARQL you collecting them all. For example I can write in SPARQL syntax: SELECT ?x WHERE { {} UNION {} UNION {} UNION {} } If it were a set when SPARQL was being evaluated there would be 1 result but it returns 3. It would also be 1 if SPARQL had the idea of identity too. It's like if 0 for + collected results ie. 2 + 2 + 0 + 0 = 4 + 0 + 0. > I don't think the test suite is explicit in the proper result set for > projecting a variable that is not in the query. By my reading of the > spec, projection (http://www.w3.org/TR/rdf-sparql-query/#modProjection > and http://www.w3.org/TR/rdf-sparql-query/#defn_algProjection) should > not introduce new variables into the output solution set. > It certainly is puzzling - I would think it's an error at parse time - trying to project a variable that isn't in the WHERE clause. For example, a query like: select ?x where { {?s ?p ?o} } It returns n results (where n is the number of matches) where ?x is unbound. So I hadn't thought that perhaps this was an error/ambiguity in the output solution rather than an indication that it's acting like the universal set. Even more confusing... > I'm not versed enough to label things universal or empty relations, but > the evaluation of a SPARQL UNION is defined as the multiset-union of the > evaluation of the two branches of the UNION. So: > > { A } UNION { { } } > > is multiset-union(eval(A), {{}}) -- that is, add the one empty solution > to the solutions from evaluating A. > It's just very odd behavior - and a bit inexplicable - especially the multiple union of {{}}. > > The added confusion is that I don't understand the current SPARQL > > result of UNIONing {} in SPARQL as you end up with something that is > > neither a usual result nor an identity but a combination of the two > > (which is where the conversation started). It seems to be > > correct/valid to keep collecting these empty sets (unless you > > eliminate them with a distinct), what does that mean? > > I don't understand the question - maybe a test case would clarify? > Hopefully the query at the top of this response is good enough. It's a bit hard to work out now, though, where the problem lies. Is it the result serialization, the graph pattern syntax and/or the definition of the empty graph pattern?
Received on Tuesday, 18 March 2008 04:46:16 UTC