- From: Andy Seaborne <andy.seaborne@talis.com>
- Date: Thu, 12 Nov 2009 20:10:11 +0000
- To: Steve Harris <steve.harris@garlik.com>
- CC: RDF Data Access Working Group <public-rdf-dawg@w3.org>
On 12/11/2009 15:47, Steve Harris wrote:
> 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
Notation was meant to be SUM(?x) over a group with ?x=1 ,?x=2, ?x=3
It was a bit terse - had been writing comprehensions just before hand so
it was obvious to me, at the time.
>> but
>>
>> SUM(COALESCE(xsd:double(?x), 0) | ?x{1,2,3} ) => "6"^^xsd:double
Using
SUM(COALESCE(xsd:double(?x), 0))
for group members ?x=1,2,3 (xsd:integers) results in xsd:double, not
xsd:integer as it would for 1+2+3
>>
>> Using xsd:integer does not work e.g. 1, 1.5, 3 !=> "5.5"^^xsd:decimal
Encoding the full XSD hierarchy to minimise the promotion as + used
natively does, and cope with errors/non-numbers might be:
COALESCE(xsd:integer(?x), xsd:decimal(?x), xsd:double(?x), 0)
which I don't think is a serious contender on practical grounds.
I think ending up with xsd:double, not xsd:integer, in the potential
present of errors, is significant so maybe a way to indicate that errors
be excluded might be a better. However, a plethora of options is also
bad design. Hmm.
I do wonder if SUM should filter out errors/unbound before delegating to
"+". I would be interested in more information about the F2F2
discussions - I can only see a short section on this and mostly it's
about COALESCE.
((
The full version is possibly
COALESCE(xsd:integer(?x), xsd:decimal(?x) ,
xsd:float(?x), xsd:double(?x), 0)
if the system has floats and the app cares.
Second table in
http://www.w3.org/TR/xpath-functions/#op.numeric
))
Sorry for the confusing notation earlier,
Andy
Received on Thursday, 12 November 2009 20:10:29 UTC