Andy, Thanks for your reply, and for any further assistance/clarification.
I've previously read the link to dynamic datasets, which seems to be specific to TDB datasets. I am also familiar with as well as section 13.2 of the SPARQL spec, and I understand the differences in GRAPH and FROM/FROM NAMED. But what I'm seeing is that the use of FROM results in different query results from a general Dataset as opposed to a TDB datasets, even loaded with the same quads. I'm not trying to pull data from the web, necessarily, rather I am loading it from a set of files. Below is my code. I am loading the same quads into both the general Dataset and the TDB dataset. When run, the count query returns 0 against the Dataset and 2 against the TDB dataset. Code: static final String aliceGraphUri = "http://example.org/alice"; static final String bobGraphUri = "http://example.org/bob"; static final String fromAliceQuery = "" + "SELECT (COUNT(*) AS ?count)\n" + "FROM <"+aliceGraphUri+">\n" + "WHERE {\n" + " ?s ?p ?o .\n" + "}\n"; /** * @param args */ public static void main(String[] args) { Dataset defaultDataset = DatasetFactory.createMem(); Dataset tdbDataset = TDBFactory.createDataset("C:/tempTDB"); populateDataset(defaultDataset); populateDataset(tdbDataset); System.out.println("\n---------------------------------" + "-------------------\nFROM "+aliceGraphUri+"\n"); queryDataset(defaultDataset, fromAliceQuery); queryDataset(tdbDataset, fromAliceQuery); } private static void populateDataset(Dataset dataset) { DatasetGraph datasetGraph = dataset.asDatasetGraph(); datasetGraph.add(new Quad( NodeFactory.createURI(bobGraphUri), // graph name NodeFactory.createURI("urn:bob"), NodeFactory.createURI("http://xmlns.com/foaf/0.1/name"), NodeFactory.createLiteral("Bob"))); datasetGraph.add(new Quad( NodeFactory.createURI(bobGraphUri), // graph name NodeFactory.createURI("urn:bob"), NodeFactory.createURI("http://xmlns.com/foaf/0.1/mbox"), NodeFactory.createURI("mailto:bob@example"))); // add data to the alice named graph datasetGraph.add(new Quad( NodeFactory.createURI(aliceGraphUri), // graph name NodeFactory.createURI("urn:alice"), NodeFactory.createURI("http://xmlns.com/foaf/0.1/name"), NodeFactory.createLiteral("Alice"))); datasetGraph.add(new Quad( NodeFactory.createURI(aliceGraphUri), // graph name NodeFactory.createURI("urn:alice"), NodeFactory.createURI("http://xmlns.com/foaf/0.1/mbox"), NodeFactory.createURI("mailto:alice@example"))); } private static void queryDataset(Dataset dataset, String sparql) { Query query = QueryFactory.create(sparql); QueryExecution qexec = QueryExecutionFactory.create(query, dataset); ResultSetFormatter.out(qexec.execSelect()); qexec.close(); } On Mon, Feb 9, 2015 at 1:08 PM, Andy Seaborne <[email protected]> wrote: > On 09/02/15 15:07, Willie Milnor wrote: > >> Hello, >> >> I want to be able to load a set of ontologies into dataset in order to be >> able to have named graph support in my SPARQL queries against said >> dataset. Specifically, I would like to be able to use FROM, FROM NAMED, >> and GRAPH clauses in my SPARQL. >> >> From my investigation, it appears that full named graph support is only >> available with TDB datasets, but not available when creating a dataset >> using DatasetFactory. Specifically, against a DatasetFactory created >> dataset, using FROM in the query appears to have no affect at all, and >> even >> using FROM NAMED has no affect over simply having GRAPH in the query. >> >> Am I correct, or is there something I'm missing? Perhaps there is a >> specific implementation of DatasetGraph that I should be creating? >> >> I have sample code, but thought I'd simply ask the question in hopes that >> there's a simple answer, either way. Please let me know if the sample >> code >> will be useful. >> >> > GRAPH and FROM/FROM NAMED do different things. > > GRAPH accesses named graphs in the dataset (i.e. happens during query > execution) > > FROM/FROM NAMED describe the dataset to be queried (i.e. happens before > the query starts). > > FROM/FROM NAMED completely overrides the dataset to be queried. > > In the case of a TDB dataset, the FROM/FROM NAMED pick graph out of the > dataset to form a new one specifically for the query. > > https://jena.apache.org/documentation/tdb/dynamic_datasets.html > > For a general query, on a general Dataset from DatasetFactory, the graphs > are drawn from the web at large. > > If you want FROM/FROM NAMED to pull graphs from the web, use a general > dataset. > > If you want some graphs from a TDB dataset and some from the web at large, > create a general Dataset, and add graphs from TDB. > > If you use a TDB dataset alone, you can't have dynamic data from the web. > It's database, not a web cache. > > Andy > > > -- Cheers, Willie
