-
Notifications
You must be signed in to change notification settings - Fork 6
SPARQL advanced topics
Paul Cuddihy GE Research edited this page Jun 23, 2022
·
2 revisions
This page is a collection of SPARQL "gotcha" situations we have encountered.
There is subtle behavior that might not be apparent from a nodegroup shape. See
Summary:
-
MINUS { } only subtracts the right-hand side from the left-hand side. The left-hand side reaches back to the beginning of the current block, marked by {.
This renders a UNION { MINUS {}} as a no-op
Instead, the branch of a UNION must also contain the left-hand side clauses for the MINUS - FILTER clauses' variables are also only bound within the closest enclosing block
Multiple FROM clauses create a virtual temporary graph which is the union of all of the clauses' graphs. In my mind this is the "as expected" behavior. Jena does not appear capable of optimizing these. Blazegraph (so probably Neptune?) does optimize these.
Multiple GRAPH clauses are not allowed. Instead a construct like this can be used:
FROM NAMED <http://graph1> FROM NAMED <http://graph2>
GRAPH ?g {
<clauses>
}
This essentially loops over the named graphs and executes the clauses. So this requires all clauses to match within the same graph
See this Stardog blog post explains common pitfalls.
The W3C section is here: Specifying an RDF dataset