- From: Steve Harris <S.W.Harris@ecs.soton.ac.uk>
- Date: Thu, 24 Feb 2005 11:36:39 +0000
- To: DAWG public list <public-rdf-dawg@w3.org>
While implementing OPTIONAL support I found a screw case, the query:
SELECT ?y ?y1
WHERE (?x ?y ?z)
OPTIONAL { (?x ?y1 ?z) }
AND ?y != ?y1
Is odd because the constriant (?y != ?y1) will fail if applied globally
when y1 is unbound, effectivly removing the OPTIONAL keyword. Making it
equivalent to:
SELECT ?y ?y1
WHERE (?x ?y ?z)
(?x ?y1 ?z)
AND ?y != ?y1
Which is almost certainly not what the writer was expecting, though I
/think/ its correct according to the spec. If the constraint is only
applied to the block it makes sense on, we get:
SELECT ?y ?y1
WHERE (?x ?y ?z)
OPTIONAL { (?x ?y1 ?z) AND ?y != ?y1 }
Which is a very differnt query (its what I intended when I wrote it
though). In general I suspect it will be difficiult to come up with
deterministic and unsupprising rules to bind constraints to the correct
query expression block(s). It also makes x AND y different from x && y,
though Andy tells me that's allready the case.
I dont know what the correct interpretation is, or whats a good solution.
My gut reaction is that a global constraint that includes variables only
bound in OPTIONAL block is an error, making the user pick a form
explicitly.
- Steve
Received on Thursday, 24 February 2005 11:36:43 UTC