- From: Seaborne, Andy <andy.seaborne@hp.com>
- Date: Sun, 08 Jul 2007 19:03:35 +0100
- 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 UTC