W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > January to March 2005

OPTIONALs and constraints

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>
Message-ID: <20050224113639.GB15908@login.ecs.soton.ac.uk>

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 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 16:15:22 GMT