- From: Axel Polleres <axel.polleres@deri.org>
- Date: Mon, 09 Jul 2007 11:23:20 +0100
- To: "Seaborne, Andy" <andy.seaborne@hp.com>
- Cc: axel@polleres.net, public-rdf-dawg-comments@w3.org
Seaborne, Andy wrote: > > > -------- Original Message -------- > > From: Axel Polleres <> > > Date: 5 July 2007 14:35 > > > > referring to the examples in Section 12.2.2 of > > http://www.w3.org/TR/2007/CR-rdf-sparql-query-20070614/ > > > > 2 issues: > > > > 1) What happened here? > > --------- > > Example: group consisting of a basic graph pattern and an optional graph > > pattern: > > { ?s :p1 ?v1 OPTIONAL {?s :p2 ?v2 } } > > LeftJoin( > > Join(Z, BGP(?s :p1 ?v1)), > > Join(Z, BGP(?s :p1 ?v1)) ), What I meant by copy-paste-error was why here (and also in the second example below) the first pattern is repeated twice, not that there are two forms of he algebra. ie. this should be: LeftJoin( Join(Z, BGP(?s :p1 ?v1)), Join(Z, BGP(?s :p2 ?v2)) ), instead... right? > > true) > > LeftJoin(BGP(?s :p1 ?v1), BGP(?s :p2 ?v2), true) > > --------- > > > > --------- > > Example: group consisting of a basic graph pattern and an optional > > graph pattern with a filter: > > > > { ?s :p1 ?v1 OPTIONAL {?s :p2 ?v2 FILTER(?v1<3) } } > > > > LeftJoin( > > Join(Z, BGP(?s :p1 ?v1)), > > Join(Z, BGP(?s :p1 ?v1)), same here: Join(Z, BGP(?s :p2 ?v2)), for the second one. > > (?v1<3) ) > > LeftJoin( > > BGP(?s :p1 ?v1) , > > BGP(?s :p2 ?v2) , > > (?v1<3) ) > > ----------- > > > > these two examples seem to have some copy-paste-errors, yes? > > Some of the examples show two forms of the algebra with and without the > empty graph removal step as noted at the start of 12.2.2: > > """The second form of a rewrite example is the first with empty group > joins removed by step 5.""" > > We could change the styling to make this clearer. > > > > > 2) Another question concerning FILTERs in OPTIONALS (I checked this > > with http://www.sparql.org/validator.html) > > > > Please just verify: It is indeed true that > > > > SELECT ?N ?M WHERE { ?X foaf:name ?N . ?X :age ?Age . > > OPTIONAL { ?X foaf:mbox ?M. FILTER(?Age > 30) } } > > > > > > is equivalent to > > > > SELECT ?N ?M WHERE { ?X foaf:name ?N . ?X :age ?Age . > > OPTIONAL { { ?X foaf:mbox ?M. FILTER(?Age > 30) } } } > > They are equivalent but the reason may not be straight forward. > > The inner most ?X foaf:mbox ?M. FILTER(?Age > 30) becomes: > > (filter (> ?Age 30) > (BGP [triple ?X :foaf#mbox ?M])) > > a group of one element, say group(A), becomes join(Z, A) which is turned > into A (step 5). So groups of one element are eliminated in the query > string to algebra rewrite process. That brings the filter within the > condition of the LeftJoin. > > > > > but > > > > SELECT ?N ?M WHERE { ?X foaf:name ?N . ?X :age ?Age . > > OPTIONAL { ?X foaf:name ?N . { ?X foaf:mbox ?M. FILTER(?Age > 30) } } > } > > > > is not semantically equivalent, yes? > > It is a different algebra expression; specifically, it does not place > the filter in the LeftJoin condition. Yes, this is what I conjectured. thanx, axel > > I am asking, because I originally also thought the second variant would > > treat the FILTER local to ist group graph pattern > > Thank you for your comments, > > Andy > > > > > thanks & best regards, > > axel > > > > > > > > -- > > Dr. Axel Polleres > > email: axel@polleres.net url: http://www.polleres.net/ > > -- Dr. Axel Polleres email: axel@polleres.net url: http://www.polleres.net/
Received on Monday, 9 July 2007 10:23:32 UTC