Re: [Fwd: Comments on ORDER BY]

Jeen Broekstra wrote:
> Seaborne, Andy wrote:
> 
>> This is a comment that I forgot to process fully.  This points out 
>> that ORDER BY is restrictive in that it only provided for a variable 
>> or a function.
>>
>> http://lists.w3.org/Archives/Public/public-rdf-dawg-comments/2005May/0005.html 
>>
>>
>> Richard Cyganiak wrote:
>>
>>> Comments on http://www.w3.org/2001/sw/DataAccess/rq23/
>>> regarding the ORDER BY clause:
>>>
>>>
>>>> From the grammar:
>>>
>>>
>>>
>>> | [16] OrderExpression ::= FunctionCall | Var
>>> | [59] FunctionCall ::= URI '(' ArgList ')'
>>>
>>> This doesn't allow expressions like "?a + ?b" in the ORDER BY clause. Is
>>> this intentional?
>>>
>>> If not, this sentence from section 10.1 also needs updating:
>>>
>>> | An ordering condition can be a variable or a function call.
>>
>>
>>
>>
>> There is no reason I can see not to allow an expression but the 
>> grammar need tweaking.
> 
> 
> Grammar issues aside I'd like to see a use case before we decide to put 
> it in.


One might be

SELECT ?shop
WHERE
   { ?shop a x:Store ;
         x:sales ?sales ;
 x:costs ?costs .
   }
ORDER BY (?sales - ?costs)

to order by profitablitity of a store location.

 Andy



> 
>> But we can't just put "Expression" at this point because this is 
>> ambigous: + and - can occur both as unary and binary operators.  We 
>> allow multiple ordering conditions on a single line so
>>
>> ORDER BY ?a + ?b
>>
>> It's either two ordering conditions:
>>
>> ORDER BY ?a
>> ORDER BY +?b
>>
>> or it's one condition
>>
>> ORDER BY (?a+?b)
>>
>> We already have grouping using ASC/DESC.  We choose [] (mildly) 
>> because ASC/DESC aren't functions.  We (for consistency) use blank 
>> separated lists of conditions.
>>
>> 0/ No change.  Don't allow general expressions.
>>
>> 1/ change from using [] to using () for ASC and DESC
>>
>> ORDER BY (?a+?b)
>> ORDER BY ASC(?a+?b)
>>
>> 2/ Make special cases for () expressions inside and outside [].
>>
>> ORDER BY (?a+?b)
>> ORDER BY ASC[?a+?b]
>>
>> 3/ Always require () on expressions which are not simple variables or 
>> function calls:
>>
>> ORDER BY (?a+?b)
>> ORDER BY ASC[(?a+?b)]
>>
>> 4/ Only one condition per ORDER BY; multiple ORDER BY clauses.
>>
>>
>> I propose #0 :
>> For a change to support expressions, #1 is the best in my opinion.
> 
> 
> Seconded on #0.
> 
> 
> Jeen

Received on Friday, 27 May 2005 19:26:57 UTC