more on optionals

DAWG'ers,

following up on a discussion with Andy and Dave on irc about Geoff
Chappell's example query, I briefly wanted to share how SeRQL[1] deals
with optional clauses, in hope that it will be useful.

The example query in Geoff Chappell's earlier mail would translate to
SeRQL as follows (added the mbox variable to the projection for clarity):

select
   x, name, y, mbox
from
  {x} foaf:name {name};
     [foaf:mbox {mbox}],
  {y} foaf:mbox {mbox}
using namespace
  foaf = <http://xmlns.com/foaf/0.1/>

The result on the example data in SeRQL is:

x  	name  	y  	mbox
_:node1 "Alice" _:node2 mailto:bob@work.example
_:node1	"Alice" _:node3	mailto:noname@work.example.org
_:node2	"Bob" 	_:node2 mailto:bob@work.example
_:node2	"Bob" 	_:node3	mailto:noname@work.example.org

regardless of path expression order in the query.

Like SPARQL, SeRQL is a declarative language (see [2] for a draft
set-based formal interpretation), in which conceptually NULL is
treated as a special case: variables that are assigned NULL by an
optional pattern can be 'overruled' by a fixed pattern to take a
'real' value.

In the implementation of the language, we have made the decision to
always evaluate optional patterns _after_ all the fixed patterns have
been evaluated. This makes sure the engine behaves consistently over
cases such as the example of Geoff (and other such cases), and is
consistent with the intended meaning of optional patterns: given that
we _know_ a certain x, we want to know additional properties of that
x, but not fail if no such additional properties exist. To know x, we
first have to bind a value to x, before we can evaluate its additional
properties.

Sesame implements this by representing path expressions as a nested
list structure. Each path expression in the from clause is an item in
that list, an optional path expression is represented by a having a
new list object (with that optional in it) as a member of that list.
Evaluation takes place in a breadth-first fashion.

Anyway, sorry for the monologue, I hope this will be useful.

Regards,

Jeen

[1] http://www.openrdf.org/doc/SeRQLmanual.html
[2] http://www.cs.vu.nl/~jbroeks/papers/SeRQL.pdf
-- 
Jeen Broekstra          Aduna BV
Knowledge Engineer      Julianaplein 14b, 3817 CS Amersfoort
http://aduna.biz        The Netherlands
tel. +31(0)33 46599877  fax. +31(0)33 46599877

Received on Thursday, 24 February 2005 10:58:30 UTC