- From: Lee Feigenbaum <feigenbl@us.ibm.com>
- Date: Sun, 25 Jun 2006 14:18:44 -0400
- To: dawg mailing list <public-rdf-dawg@w3.org>
Hi DAWGs,
I've been working through a few cases involving the GRAPH keyword that
weren't immediately obvious to me from the spec. For some of them, I've
included test cases that demonstrate what I believe the semantics to be
(and, in most cases, what SPARQLer seems to do). For one, I have a
question on the appropriate behavior.
1/ Nested GRAPH statements
I didn't find any examples or tests that involved nested GRAPH statements,
but the spec made it pretty clear what should happen and SPARQLer agrees.
ng1.n3:
:s :p :o, :o1 .
ng2:n3:
:s :p :o, :o2 .
query:
SELECT ?o
FROM NAMED <ng1.n3>
FROM NAMED <ng2.n3>
{
GRAPH <ng1.n3> {
GRAPH <ng2.n3> {
:s :p ?o .
}
}
}
results:
?o/:o
?o/:o2
why? GRAPH takes the given named graph and places it as the default graph
in the RDF dataset against which the inner graph pattern is matched. So,
nested graphs basically act as a stack of default-graph contexts for the
graph patterns that they contain.
2/ using blank nodes for graph parameter
As I would expect, blank nodes act like variables when placed as the
parameter to the GRAPH keyword. What I wanted to determine was which blank
node label scope such a blank node would be.
dg.n3:
:s :p <wrong.n3> .
ng1.n3:
:x :y :z .
query:
SELECT *
FROM <dg.n3>
FROM NAMED <ng1.n3>
{
:s :p _:g .
GRAPH _:g { ?s ?p ?o }
}
results:
(no results)
So, _:g is scoped to the graph pattern in which the GraphGraphPattern
occurs (according to SPARQLer's behavior). I sort of assumed this would be
the case, but would argue that it's not clear from the spec. which states
(in 2.5.4) "...the scope of the blank node label being the basic graph
pattern." The _:g parameter to the GRAPH clause isn't actually in any BGP,
so it's unclear from the spec what it's (the label's) scope should be.
3/ variable as parameter to GRAPH which matches a bnode
dg.n3:
:s :p _:b .
ng1.n3:
:x :y :z:
query:
SELECT *
FROM <dg.n3>
FROM NAMED <ng1.n3>
{
:s :p ?g .
GRAPH ?g { ?s ?p ?o }
}
results:
I'd expect no results. ?g binds to a bnode and there's no entry in the
named grpah part of the RDF dataset whose first component is a bnode.
SPARQLer reacts rather strangely, giving me an empty result (not an empty
solution set -- no exception and no XML document or JSON structure
whatsoever). I think that the intended semantics are clear here, so just a
heads-up that SPARQLer behaves strangely in this case.
Lee
Received on Sunday, 25 June 2006 18:18:56 UTC