- From: Lee Feigenbaum <feigenbl@us.ibm.com>
- Date: Mon, 20 Nov 2006 12:12:07 -0500
- To: RDF Data Access Working Group <public-rdf-dawg@w3.org>
(I promised Andy a note on my concerns about OPTIONAL, so here it is.
Opinions sought.)
Conventions:
Ti : one or more consecutive triple patterns
Fi : a FILTER
Group(T1, T2, ..., F) : a join of the Ti triple patterns constrained by
the filter expression F
Some examples:
{
T1 .
F1 .
T2 .
F2 .
}
is identical to:
{
T1.
T2.
F1 .
F2.
}
and also identical to:
{
F1.
F2.
T1.
T2.
}
That is, (inner) join is independent of order. When we add OPTIONAL in,
things become a bit more complicated.
{
T1 .
OPTIONAL { T2 } .
}
parses as Group( Optional(T1, Group(T2)) ).
{
T1 .
F1 .
OPTIONAL { T2 } .
}
parses as Group( Optional(Group(T1, F1), Group(T2)) ). Effectively, the
OPTIONAL creates an implicit Group scope (curly braces) of the stuff that
comes before it. So:
{
T1 .
F1 .
OPTIONAL { T3 } .
T2 .
F2 .
}
parses as Group( Optional(Group(T1, F1), Group(T3)), T2, F2 ) and
consequently is not the same as the reordered:
{
T1 .
F1 .
F2 .
OPTIONAL { T3 } .
T2 .
}
which parses as Group( Optional( Group( T1, F1 && F2 ), Group(T3) ), T2 ).
Note in particular that F1 has a different scope in the two scenarios, due
to the extra group implicitly created to hold the LHS of the OPTIONAL. To
me, this is very unnatural and unintuitive. Given the LHS-of-OPTIONAL rule
of "slurp up everything before OPTIONAL", I'm also unclear as to the
correct parse of:
{
{ T1 } UNION { T2 } .
T3 .
OPTIONAL { T4 . }
}
Is this:
Group( Optional( Group( Union(T1, T2), T3), Group(T4) ) ) )
or
Group( Union(T1, T2), Optional( Group(T3), Group(T4) ) )
That is, does OPTIONAL pull in everything before it (but in the same
group) to form the implicit LHS group, or just the nearest bunch of triple
patterns and filters? I suspect the former, but find this confusing.
Fred Z. and I have both advanced the idea that perhaps SPARQL should
require that the LHS of the OPTIONAL be explicitly demarcated by mandatory
curly braces. In our opinion (OK, in my opinion, but I'm guessing Fred
shares it), this would alleviate any confusion and make complex queries
more readable.
>From conversations with Andy, I believe that he disagrees that mandatory
curlies would make queries more readable (believing instead that the extra
curlies would make reading queries more difficult) and he is also worried
about the significant number of existing SPARQL queries that would become
invalid.
I share this latter concern and have not come to a decision with myself as
to whether or not that should be a show-stopper at this point for this
potential design change. In the meantime, I wanted to share my concerns
and I'd like to solicit opinions of other members of the WG.
thanks,
Lee
Received on Monday, 20 November 2006 17:12:34 UTC