Is OPTIONAL inherently procedural?

>> [[
>> 9 Query Execution and Ordering
>>
>>
>> Language point: is there/should there be any way of explicitly
>> overriding default execution order?
>
>
> The default order is supposed to define the right answers.  How a 
> processor achieves that is up to it - maybe it will choose to issue 
> errors on queries that have a different order - may be it will execute 
> the specifications in a way that gets the right answer.  It could 
> issue a warning and execute in query order.
>
> SQL queries can be order dependent (where there are outer joins).  The 
> right answer is defined to be executing in the order the query writes it.
>
> Optimizing compilers do much the same.

The SQL outer join is indeed order dependent, but the SQL language 
designers knew better than
to use a conjunction operator in the portion of syntax that refers to 
outer joins.  Also, the outer join
is INHERENTLY procedural -- there isn't any way to define a declarative 
semantics for it.

The SPARQL OPTIONAL is strictly weaker than the SQL outer join, and its 
not at all evident that the OPTIONAL
clause has the same built-in problems with regard to declarativeness.  
With SQL outer joins, changes in orderings
give entirely different answers; with OPTIONAL, it appears that wrong 
order of evaluation means fewer bindings
than necessary.  In other words, there is one order of evaluation that 
subsumes all others.   If someone can produce
an example using OPTIONAL where there is no order that maximizes the 
number of bindings, THEN (and only then)
it is inherently non-declarative.  That I haven't seen such an example 
doesn't mean it doesn't exist; I invite folks out there to try
and find one.  If you can't, then analogies with the SQL outer join are 
spurious (when the issue involves ordering).

The above language appears to use confusion about outer join semantics 
as an execuse to overlay a procedural
interpretation on the language as a whole.
Perhaps you should take a look at the KIF specification.  A single KIF 
rule corresponds roughly to a query,
with the head representing the SELECT, and the tail representing the 
WHERE.  KIF makes no mention of ordering,
but it includes the notion of computed predicates (implicitly, not 
explicitly).  If KIF, a much more expressive
language than SPARQL, doesn't need to order its clauses, then neither 
should the SPARQL spec.

Regards, Bob

Received on Monday, 21 March 2005 17:11:37 UTC