Hi,
I'm trying to query the named graphs of a TDB dataset using
<urn:x-arq:UnionGraph>, but I must be missing something. Is there something
special to do in order to use <urn:x-arq:UnionGraph> as a graph name in a query?
Here is what I'm trying (this test uses a memory dataset: only works with
3.1.1-SNAPSHOT. Normally, I use TDB)
TIA,
fps
package sometests;
import static org.junit.Assert.*;
import org.apache.jena.query.Dataset;
import org.apache.jena.query.DatasetFactory;
import org.apache.jena.query.Query;
import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.query.QueryFactory;
import org.apache.jena.query.QuerySolution;
import org.apache.jena.query.ResultSet;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.junit.Test;
public class UnionGraphTest {
@Test public final void test() {
Model m = ModelFactory.createDefaultModel();
m.add(
m.createResource("http://ex.com/s"),
m.createProperty("http://ex.com/p"),
m.createResource("http://ex.com/o"));
Dataset ds = DatasetFactory.create();
ds.addNamedModel("http://ex.com/g", m);
// query using the named graph: return some results
doIt(ds, "http://ex.com/g");
// same query, using urn:x-arq:UnionGraph, doens't return any result
doIt(ds, "urn:x-arq:UnionGraph");
}
private void doIt(Dataset ds, String graphName) {
String queryString = "SELECT * WHERE { GRAPH <" + graphName + "> {?s ?p
?o} }";
Query q = QueryFactory.create(queryString) ;
QueryExecution qexec = QueryExecutionFactory.create(q, ds);
ResultSet rs = qexec.execSelect();
assertTrue(rs.hasNext());
for (;rs.hasNext();) {
QuerySolution sol = rs.next();
System.out.println(sol);
}
}
}