- From: Steve Harris <steve.harris@garlik.com>
- Date: Fri, 26 Feb 2010 18:11:06 +0000
- To: "Rob Vesse" <rav08r@ecs.soton.ac.uk>
- Cc: <public-rdf-dawg-comments@w3.org>
- Message-Id: <156150BF-963A-4F63-A2EB-F81330462CA7@garlik.com>
On 26 Feb 2010, at 17:01, Rob Vesse wrote: > Hi Steve > > Ok that makes more sense now, not entirely keen on the syntax mainly > because it adds an extra way to terminate an expression inside an > aggregate which inevitably adds to the ever increasing code bloat of > my SPARQL parser I'm not particularly fond of the syntax myself, but I don't have a better suggestion, and reusing the syntax in SQL makes more sense than inventing something new, and differently bad. > > Referring to XPath functions directly is not helpful, as they're > orthogonal to the semantics of aggregates > > But some XPath functions aren’t strictly speaking functions and are > in fact aggregates since they operate on sequences rather than > single values – fn:string-join() being a prime example of this since > there is a separate fn:concat() function for just joining an > arbitrary number of single values. It's not just operating on a sequence that makes it an aggregate. Some of the SPARQL aggregates may well be defined in terms of XPath functions internally, but it's not enough to say aggregate X is equivalent to fn:x. Do What I Mean doesn't really cut it in standards, sadly. > > I'm not planning to add order ORDER BY aggregate syntax in SPARQL > 1.1, but I'm leaving it open for future WGs > > When you say this do you mean you’re not permitting queries such as > this: > > SELECT ?s WHERE {?s ?p ?o} GROUP BY ?s ORDER BY COUNT(?s) No, I mean something like: SELECT (GROUP_CONCAT(?x ORDER BY ?x) as ?c) Which is legal in MySQL. > Which currently is not valid syntax but can be rewritten as: > > SELECT ?s COUNT(?s) AS ?count WHERE {?s ?p ?o} GROUP BY ?s ORDER BY ? > count > > And will probably work depending on exactly when the implementation > applies the ORDER BY clause. ORDER BY is applied after the aggregates have been evaluated. > By the way do you happen to know what the IN/NOT IN syntax Andy was > tweeting about yesterday is - I assume it’s just SPARQLs equivalent > of the field IN (“value1”, “value2”) style syntax of SQL – is that > likely to be in the next working draft? Yes, and yes. Regards, Steve > From: public-rdf-dawg-comments-request@w3.org [mailto:public-rdf-dawg-comments-request@w3.org > ] On Behalf Of Steve Harris > Sent: 26 February 2010 16:36 > To: Rob Vesse > Cc: public-rdf-dawg-comments@w3.org > Subject: Re: Further comments on SPARQL 1.1 > > Responding as an individual, not representing the group... > > On 25 Feb 2010, at 15:24, Rob Vesse wrote: > > > With regards to my previous comments and the Working Group’s > response [1] I would like to make some further comments. > > Aggregates – I do not like the proposed SEPARATOR syntax for > GROUP_CONCAT at all, if you are going to include GROUP_CONCAT simply > leave it as a single argument with a standard separator and then > specify that fn:string-join() must be supported by SPARQL 1.1 as a > function since I believe the WG intends to specify a subset of XPath > and other common functions that implementations should support? > > Referring to XPath functions directly is not helpful, as they're > orthogonal to the semantics of aggregates. Functions take a list of > values, perform some internal operation on them, and return a value. > Aggregations take a list (actually a multi-set I believe) of > expressions, evaluate them with respect to a binding set, apply some > set function, and then return a value. These are not compatible > concepts. > > If you have something like: > > data: > <x> <p> "1" . > <x> <p> "2" . > > SELECT (GROUP_CONCAT(?x, "|") AS ?c) > WHERE { > <x> <p> ?x . > } > > you will get back something like: > > ?c = "1 | 2 |" > > But that's because it evaluates to > > Aggregation((), {?x, "|"}, GROUP_CONCAT, [BS]) as per §9.2 of SPARQL > 1.1 draft. > > Which evaluates to GROUP_CONCAT({"1", "|", "2", "|"}) > > The SEPARATOR syntax comes from MySQL, which is where GROUP_CONCAT > originates from, it's necessary in SQL for the same reason it is in > SPARQL. > http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat > > I'm not planning to add order ORDER BY aggregate syntax in SPARQL > 1.1, but I'm leaving it open for future WGs. > > Hope this helps, > Steve > > -- > Steve Harris, Garlik Limited > 2 Sheen Road, Richmond, TW9 1AE, UK > +44 20 8973 2465 http://www.garlik.com/ > Registered in England and Wales 535 7233 VAT # 849 0517 11 > Registered office: Thames House, Portsmouth Road, Esher, Surrey, > KT10 9AD > -- Steve Harris, Garlik Limited 2 Sheen Road, Richmond, TW9 1AE, UK +44 20 8973 2465 http://www.garlik.com/ Registered in England and Wales 535 7233 VAT # 849 0517 11 Registered office: Thames House, Portsmouth Road, Esher, Surrey, KT10 9AD
Received on Friday, 26 February 2010 18:11:41 UTC