>
> Or create a second general dataset, then get the named graph objects
> (they are reference) and put it in this dataset and query that.
>
> (this is what using several FROM NAMED does anyway)
>

If I understand it correctly the following example is what you suggested:

Dataset createGeneral = DatasetFactory.createGeneral();

RDFConnectionRemoteBuilder builder = RDFConnectionFuseki.create()
.destination("http://x.x.x.x:3030/ds";);

try ( RDFConnectionFuseki conn = (RDFConnectionFuseki)builder.build() ) {
Dataset fetchDataset = conn.fetchDataset();

Model namedModel = fetchDataset.getNamedModel(GRAPH_IRI_PREFIX + "R17");
Model namedModel2 = fetchDataset.getNamedModel(GRAPH_IRI_PREFIX + "R15");

createGeneral.addNamedModel(GRAPH_IRI_PREFIX + "R32", namedModel);
createGeneral.addNamedModel(GRAPH_IRI_PREFIX + "R33", namedModel2);

}
String queryString = "SELECT * { ?s ?p ?o }";
        Query query = QueryFactory.create(queryString);
        QueryExecution qexec = QueryExecutionFactory.create(query,
createGeneral);

        try {
            ResultSet results = qexec.execSelect();
            while ( results.hasNext() ) {
                QuerySolution soln = results.nextSolution();
                System.out.println(soln);
            }

Here getNamedModel and addNamedModel would be using references not
in-memory ?

On Fri, Apr 9, 2021 at 4:25 PM Andy Seaborne <a...@apache.org> wrote:

>
>
> On 09/04/2021 10:05, Lorenz Buehmann wrote:
> > You are using TDB which is an external database and indexes to the data
> > which resides on disk. Why do you think that all the graphs are loaded
> > into memory?
> >
> > Why can't you modify the given query in your code? You can either do
> > string hacks, or what I'd prefer, parse the query and work on the query
> > element structure. You could use FROM or FROM NAMED can't you?
>
> Indeed.
>
> >
> > There are methods
> >
> > addGraphURI and addNamedGraphURI for the Query object, maybe you could
> > try one of those methods?
>
> Or create a second general dataset, then get the named graph objects
> (they are reference) and put it in this dataset and query that.
>
> (this is what using several FROM NAMED does anyway)
>
>      Andy
>
> >
> > On 09.04.21 10:28, Siddharth Trikha wrote:
> >> Hi all,
> >>
> >> I have a use case to run a SPARQL query over a limited set of Graphs
> >> in my
> >> TripleStore.
> >>
> >> For example:
> >>
> >>   String directory = "MyDatabases/DB1" ;
> >>      Dataset dataset = TDBFactory.createDataset(directory) ;
> >>
> >>      // Potentially expensive query.
> >>      String sparqlQueryString = "SELECT (count(*) AS ?count) { ?s ?p
> >> ?o }" ;
> >>
> >>      Query query = QueryFactory.create(sparqlQueryString) ;
> >>      QueryExecution qexec = QueryExecutionFactory.create(query,
> >> dataset) ;
> >> // ...............
> >>
> >> The above example would run on the whole Database.
> >>
> >> I want to run the above SPARQL Query over lets say just 5 named GRAPHS
> >> whose names I know.
> >>
> >> The sparqlQueryString will be provided by the application as given
> >> above without named GRAPHS specified inside the Query String, but
> >> passes the Graph names (IRIs) in another attribute separately.
> >>
> >> I wanted to avoid in-memory loading of all named GRAPHS as this number
> >> can increase.
> >>
> >> Is there an efficient way of achieving this use case ?
> >>
> >> Any help is appreciated.
> >>
> >>
>


-- 
Regards
Siddharth Trikha
Reserach Engineer at C-DOT (Center for Development of Telematics)
9958954669

Reply via email to