Suppose I have a query that repeatedly binds a variable to a specific bNode
in the source graph, which is subsequently used to CONSTRUCT a new
graph. Should the constructed result force a new bnode for each occurrence
of the bound variable?
Example.
Source data:
_:a ex:p1 ex:o1 .
_:a ex:p1 ex:o2 .
Query:
CONSTRUCT ( ?s ex:p1 ?o )
WHERE { ( ?s ex:p1 ?o ) }
Result (a):
_:a ex:p1 ex:o1 .
_:a ex:p1 ex:o2 .
or (b):
_:a1 ex:p1 ex:o1 .
_:a2 ex:p1 ex:o2 .
?
In this case, I think that result (a) should be returned, especially if the
query result is to be used as the basis for some inference process (but
that can introduce some complications [1]).
I note that in the latter case, available information is lost. The text in
section 10.2 of [2] seems to indicate that the latter case is intended.
Also, there's the matter of comparability with CONSTRUCT *.
#g
--
[1] I encountered something like this when implementing simple rules for my
Swish software, and came to the conclusion that to maintain consistency (in
the intuitive rather than logical sense) I needed a way to track the scope
of a bnode.
[2] http://www.w3.org/TR/2005/WD-rdf-sparql-query-20050217/
------------
Graham Klyne
For email:
http://www.ninebynine.org/#Contact