Example10.java: SPARQL query with LIMIT and OFFSET

This example shows a SPARQL query with LIMIT and OFFSET. It inserts triples that assert the following:

It then finds one parent-child relationship (LIMIT 1), skipping the first two parent-child relationships encountered (OFFSET 2), and optionally includes any grandchild (gkid) relationships for the one found.

import com.hp.hpl.jena.graph.*;
import com.hp.hpl.jena.query.*;
import com.hp.hpl.jena.rdf.model.Model;
import oracle.rdf.kv.client.jena.*;

public class Example10
{
  
  public static void main(String[] args) throws Exception 
  {
    
String szStoreName  = args[0];
String szHostName   = args[1];
String szHostPort   = args[2];
String szModelName  = args[3];
    
// Create Oracle NoSQL connection 
OracleNoSqlConnection conn 
          = OracleNoSqlConnection.createInstance(szStoreName,
                                                 szHostName, 
                                                 szHostPort);
    
// Create model from named graph
Model model = 
      OracleModelNoSql.createOracleModelNoSql(szModelName, conn);
OracleGraphNoSql graph = (OracleGraphNoSql) model.getGraph();

// Clear graph    
graph.clearRepository();
    
    
// Add triples 
graph.add(Triple.create(Node.createURI("u:John"),
                        Node.createURI("u:parentOf"),
                        Node.createURI("u:Mary")));
    
graph.add(Triple.create(Node.createURI("u:John"), 
                        Node.createURI("u:parentOf"),
                        Node.createURI("u:Jack")));
    
graph.add(Triple.create(Node.createURI("u:Mary"), 
                        Node.createURI("u:parentOf"),
                        Node.createURI("u:Jill")));
    
    
String szQuery = " SELECT ?s ?o ?gkid "                         +
                 " WHERE { ?s <u:parentOf> ?o . "               +
                 " OPTIONAL {?o <u:parentOf> ?gkid }} "         +
                 " LIMIT 1 OFFSET 2";
    
System.out.println("Execute query " + szQuery);
    
Query query = QueryFactory.create(szQuery);
QueryExecution qexec = QueryExecutionFactory.create(query, model);
    
try {
      ResultSet results = qexec.execSelect();
      ResultSetFormatter.out(System.out, results, query);
    }
    
finally {
      qexec.close();
    }
   
model.close();
conn.dispose();    
  } 
}

The following are the commands to compile and run this example, as well as the expected output of the java command.

javac -classpath ./:./jena-core-2.7.4.jar:./jena-arq-2.9.4.jar: \
./sdordfnosqlclient.jar:./kvclient.jar:./xercesImpl-2.10.0.jar: \
./slf4j-api-1.6.4.jar:./slf4j-log4j12-1.6.4.jar:./log4j/1.2.16.jar: \
./jena-iri-0.9.4.jar:./xml-apis-1.4.01.jar Example10.java

javac -classpath ./:./jena-core-2.7.4.jar:./jena-arq-2.9.4.jar: \
./sdordfnosqlclient.jar:./kvclient.jar:./xercesImpl-2.10.0.jar: \
./slf4j-api-1.6.4.jar:./slf4j-log4j12-1.6.4.jar:./log4j/1.2.16.jar: \
./jena-iri-0.9.4.jar:./xml-apis-1.4.01.jar Example10 <store_name> \
<host_name> <host_port> <graph_name>

Execute query  SELECT ?s ?o ?gkid  WHERE { ?s <u:parentOf> ?o .
OPTIONAL {?o <u:parentOf> ?gkid }}  LIMIT 1 OFFSET 2\
----------------------------------
| s        | o        | gkid     |
==================================
| <u:John> | <u:Mary> | <u:Jill> |
----------------------------------