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);
        }
}
}

Reply via email to