DuCharme's book says that the order of OPTIONALs matters, in the sense
that if bindings have been done by an OPTIONAL, then later OPTIONALs
will have no effect if any variables they might bind have already been
bound (so order of OPTIONALs can affect query results). 

What prompted this query (no pun intended) is the discovery that putting
a FILTER inside an OPTIONAL {} versus outside makes a difference, even
though the FILTERs (which were some !sameTerm() conditions to avoid
aliasing some variables) are the same.  If I have the pattern "OPTIONAL
{ <triples> FILTER <filter>} " versus "OPTIONAL {<triples>} FILTER
<filter>", is the behavior that the first form is considered to fail and
not bind its variables due to filtering within {}; while the second form
would consider the OPTIONAL to have succeeded in binding the variables
and cause subsequent OPTIONALs to be skipped?  Do variables stay bound
once bound, a FILTER just filters the final result, as if all FILTERs
were applied at the end?  But in the first pattern above, the filter
nested inside the OPTIONAL{} is able to unbind anything that was bound
inside that OPTIONAL?

Ignoring performance issues, are there any cases where the order of
FILTER statements would affect the result of the query?  Or are
OPTIONALs the only thing that have order-dependent semantics?

Do nested braces have any impact on variable name visibility or
semantics?  Are all variables appearing anywhere in a WHERE{} in the
same global namespace, or are there cases where nested {} have some
namespace semantics? 



Reply via email to