On 10/02/16 09:38, Rob Vesse wrote:
Reiterating my comments from the issue report for completeness of this
thread
The in-memory dataset does not honour FROM clauses by design (though I
don't know the reasons for that design decision)
Historical to some extent.
A supplied dataset overrides the FROM (so you can test a query with
different data). FROM reads from the web.
TDB much later got "use graphs from dataset".
Fuseki makes it all look like the TDB behaviour so as not to read from
the web.
We could change the behaviour in ARQ for general purpose datasets and an
explicitly provided dataset.
Discussion on JENA-1137.
Andy
Using the GRAPH keyword is a more reliable and portable way to write such
queries e.g.
SELECT ?s ?p ?o
WHERE
{
GRAPH <urn:graph> { ?s ?p ?o }
}
Rob
On 09/02/2016 19:25, "Todd Schiller" <[email protected]> wrote:
I'm trying to query a named graph in an in-memory dataset using SPARQL.
What is the correct way to refer to the named graph in the FROM clause?
Enclosing the graph's name (a URN) in braces isn't working for me (see
reproduction below).
I suspect it has something to do with how the in-memory dataset resolves
the FROM clause (cf.
https://jena.apache.org/tutorials/sparql_datasets.html)?
I don't have problems when using a TDB-backed dataset.
Tracking as: https://issues.apache.org/jira/browse/JENA-1135
Thanks,
Todd
======= Jena 3.0.1
import org.apache.jena.query.*;
import org.apache.jena.rdf.model.*;
import org.apache.jena.vocabulary.RDFS;
public class GraphTest {
public static void main(String [] args) {
Dataset data = DatasetFactory.create();
Model model = ModelFactory.createDefaultModel();
model.getResource("urn:foo").addLiteral(RDFS.label, "foobar");
data.addNamedModel("urn:graph", model);
String sparql = "SELECT ?s ?p ?o FROM <urn:graph> WHERE { ?s ?p ?o
}";
ResultSet results = QueryExecutionFactory.create(sparql,
data).execSelect();
int cnt = 0;
while (results.hasNext()) {
cnt++;
results.next();
}
// should both print 1
System.out.println("# results: " + cnt); // prints 0
System.out.println("Model size: " +
data.getNamedModel("urn:graph").size()); // prints 1
}
}