W3C home > Mailing lists > Public > public-rdf-dawg-comments@w3.org > July 2007

Re: example in current cand. rec....

From: Seaborne, Andy <andy.seaborne@hp.com>
Date: Sun, 08 Jul 2007 19:03:35 +0100
Message-ID: <469126F7.7040008@hp.com>
To: axel@polleres.net
Cc: public-rdf-dawg-comments@w3.org



-------- 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)) ),
 >      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)),
 >       (?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.

 > 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/
Received on Sunday, 8 July 2007 18:03:49 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 8 January 2008 14:14:51 GMT