- From: Bob MacGregor <bmacgregor@siderean.com>
- Date: Sun, 20 Feb 2005 12:16:43 -0800
- To: public-rdf-dawg-comments@w3.org
- CC: phayes@ai.uwf.edu
- Message-ID: <4218F02B.70208@siderean.com>
Apologies if I'm covering old ground. I noticed the BOUND predicate
introduced into SPARQL. BOUND only works if the optimizer is limited in
its ability
to reorder patterns and constraints.
This raises a general question about constraints and functions (operators):
Are operators allowed to apply to unbound variables? The spec says that
they cannot
apply in the case of XPath operators. I couldn't find language that
limits the other
cases. Clearly, UNBOUND isn't limited to apply only to bound variables.
It is MUCH preferable if operators CAN apply to unbound variables, which
means they can generate variable bindings.
Sophisticated logic implementations allow extensible operators to
generate bindings,
because that allows the language to be easily extended.
However, that works well only if the specification
of an extensible operator includes guidance on which variables must be bound
for the operator to work correctly.
Perhaps that's asking too much of SPARQL?
Returning to BOUND:
If operators CAN apply to unbound variables, then the position of a BOUND
constraint apparently is quite sensitive to its location, i.e., the
optimizer cannot
safely permute constraints containing a BOUND predicate. In my own use
of BOUND,
I sometimes use it as a guard condition to avoid breaking on operators
that require certain
variables to be bound. However, I also make use of a variant of the AND
operator (SEQUENCE) that tells the optimizer not to reorder the conjunct
clauses
within a SEQUENCE constraint.
If operators CANNOT apply to unbound variables, then BOUND is obviously
an exception to that rule. In that case, the spec should spell out
explicitly that
something very unusual is happening.
In any case, the spec needs to be more explicit about the bound/unbound
semantics, and about ordering of constraint clauses.
Philosophically, I do have another question. The need for some kind of
negation operator is orders of magnitude more important than having a
BOUND operator. The illustration of using
BOUND to perform negation-as-failure is an egregious hack. Is this
included because the committee didn't have the courage to define
a true negation-as-failure operator?
In the spec, the first example of BOUND is just dumb, except as a motivation
for the negation-as-failure example, because:
SELECT ?name
WHERE ( ?x foaf:name ?name )
OPTIONAL ( ?x foaf:mbox ?mbox )
AND bound(?mbox)
is equivalent to
SELECT ?name
WHERE ( ?x foaf:name ?name )
( ?x foaf:mbox ?mbox )
so no one in their right mind would write the former version.
That means that the only legitimate example of BOUND in the spec is to
simulate
negation-as-failure in very awkward fashion.
Cheers, Bob
--
Bob MacGregor
Chief Scientist
Siderean Software Inc
390 North Sepulveda Blvd., Suite 2070
<http://maps.yahoo.com/py/maps.py?Pyt=Tmap&addr=5155+Rosecrans+Ave&csz=Hawthorne%2C+Ca+90250&country=us>
El Segundo, CA 90245
bmacgregor@siderean.com <mailto:bmacgregor@siderean.com>
tel: +1-310 647-4266
fax: +1-310-647-3470
Received on Sunday, 20 February 2005 20:18:18 UTC