- From: Steve Harris <steve.harris@garlik.com>
- Date: Thu, 12 Nov 2009 15:47:54 +0000
- To: Andy Seaborne <andy.seaborne@talis.com>
- Cc: RDF Data Access Working Group <public-rdf-dawg@w3.org>
On 11 Nov 2009, at 10:46, Andy Seaborne wrote: > On 10/11/2009 18:47, Steve Harris wrote: >> >>> I don't see that COALESCE helps because there isn't an intermediate >>> variable representing the sum so far. >> >> I think the idea was something like: >> >> SELECT SUM(COALESCE(xsd:double(?x), 0)) >> WHERE { >> <x> <value> ?x . >> } > > Thanks - I'd missed that. To be clear, it's just my recollection of what we discussed, I don't think anything specific was in the minutes. > However, it does not quite follow the semantics of "+" because it > changes the datatype: > > SUM(?x | ?x{1,2,3} ) ==> "6"^^xsd:integer > > but > > SUM(COALESCE(xsd:double(?x), 0) | ?x{1,2,3} ) => "6"^^xsd:double > > Using xsd:integer does not work e.g. 1, 1.5, 3 !=> "5.5"^^xsd:decimal So, in 4store, if I do: PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> SELECT (xsd:double(1) + xsd:double(2)) AS sum WHERE {} I get "3"^^<http://www.w3.org/2001/XMLSchema#double>, so that looks consistent with + to me. I'm not claiming that 4store is a perfect implementation of the spec (it's not!), but that looks consistent with SPARQL 1.0's + to me. Or did you mean the COALESCE(xsd:double(?x), 0) bit? I guess I should have written COALESCE(xsd:double(?x), 0e1), or xsd:double(COALESCE(?x, 0)). > I don't see how to write a MIN that works using COALESCE because > there is no natural value that plays the role zero did (e.g. MIN > over strings mixed with non-strings). > > MIN(IF(datatype(?x)=xsd:String, ?x, ???)) > > And xsd:integers are arbitrary length so the COALESCE idiom is hard > for MIN (either definition). > > > If SUM follows +, does MIN follow < or ORDER BY? http://www.w3.org/2009/sparql/wiki/F2F2_Issue_Discussions says MIN/MAX follows ORDER BY. - Steve -- Steve Harris, CTO, Garlik Limited 2 Sheen Road, Richmond, TW9 1AE, UK +44(0)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 Thursday, 12 November 2009 15:48:32 UTC