- From: Andy Seaborne <andy.seaborne@talis.com>
- Date: Fri, 13 Nov 2009 17:15:58 +0000
- To: Steve Harris <steve.harris@garlik.com>
- CC: Axel Polleres <axel.polleres@deri.org>, Lee Feigenbaum <lee@thefigtrees.net>, RDF Data Access Working Group <public-rdf-dawg@w3.org>
On 13/11/2009 15:53, Steve Harris wrote: > On 13 Nov 2009, at 11:53, Andy Seaborne wrote: >> On 13/11/2009 07:18, Axel Polleres wrote: >>> One concern raised was IIRC why we need both if HAVING is anyway >>> redundant by: >>> >>> SELECT AGG(?X) >>> WHERE P >>> GROUP BY G >>> HAVING R >>> >>> being equivalent to >>> >>> { SELECT AGG(?X) >>> WHERE P >>> GROUP BY G } >>> FILTER R >> >> Can R be (count(*)>0) ? > > That's a good point, but the {}s aren't strictly necessary: > > SELECT AGG(?X) > WHERE P > GROUP BY G > FILTER R > > is still unambiguous, as a scalar FILTER would be illegal there, but it > makes me much less keen on using one keyword. It's not ambiguous - the two cases are different though. In the {} case, it's a scalar FILTER like a BGP block, (unfortunately, that's called a "group" in the grammar) so it's { {SELECT } FILTER R } is filter(R, join( unit, { SELECT } )) because the elements between {} are joined currently. c.f. { { SELECT ... } ?x :p ?v . FILTER ... } It would be odd to allow COUNT in that FILTER IMHO. Then consider an empty BGP. c.f. { { SELECT ... } FILTER ... ?x :p ?v . } and in the non-{} case the FILTER is attached as a aggregate-aware FILTER (HAVING) to the GROUP. Because HAVING covers all of FILTER\aggregates, the difference isn't very significant in outcome but the algebra formulations are not the same. > > Consider that a +0.5 to HAVING, -0.5 to FILTER. I still don't care that > much :) Ditto. Andy > > - Steve >
Received on Friday, 13 November 2009 17:16:08 UTC