Example5b.java: ORDERED問合せオプションを使用するSPARQL問合せ

ここでは、「Example5.java: JOIN_METHODを使用するSPARQL問合せ」と同じSPARQL問合せに、ORDERED問合せオプションなどの機能を追加した例を示します。このオプションでは、問合せパターンの実行順序を、SPARQL問合せで定義されている順序に基づくように指定できます。

import com.hp.hpl.jena.query.*;
import org.openjena.riot.Lang;
import com.hp.hpl.jena.sparql.core.DatasetImpl;
import oracle.rdf.kv.client.jena.*;

public class Example5b
{
  
  public static void main(String[] args) throws Exception
  {
    
    String szStoreName = args[0];
    String szHostName = args[1];
    String szHostPort = args[2];
   
    System.out.println("create connection");  
    OracleNoSqlConnection conn 
        = OracleNoSqlConnection.createInstance(szStoreName,
                                               szHostName, 
                                               szHostPort);

    System.out.println("Create datasetgraph");
    OracleGraphNoSql graph = new OracleGraphNoSql(conn);
    DatasetGraphNoSql datasetGraph 
                        = DatasetGraphNoSql.createFrom(graph);
   
    // Close graph, as it is no longer needed
    graph.close();
    
    System.out.println("Clear dataset");
    datasetGraph.clearRepository();
    
    
    System.out.println("Load data from file into DatasetGraphNoSql");
    DatasetGraphNoSql.load("example.nt", Lang.NQUADS, conn,
                           "http://example.com");
    
    Dataset ds = DatasetImpl.wrap(datasetGraph);
   
    String queryString = 
        " PREFIX ORACLE_SEM_FS_NS: " +
        " <http://oracle.com/semtech#ordered>" +
        " PREFIX foaf: <http://xmlns.com/foaf/0.1/>" +
        " SELECT ?name1 ?name2 " +
        " WHERE { " +
        " graph <http://example.org/alice/foaf.rdf> { " +
        "   ?person1 foaf:name ?name1 . " +
        "   ?person1 foaf:knows ?person2 . " +
        "   ?person2 foaf:name ?name2 . " +
        " } } ";
    
    System.out.println("Execute query " + queryString);
    
    Query query = QueryFactory.create(queryString);
    QueryExecution qexec = QueryExecutionFactory.create(query, ds);
    
    try {
      ResultSet results = qexec.execSelect();
      ResultSetFormatter.out(System.out, results, query);
    }
    
    finally {
      qexec.close();
    }
    
    ds.close();
    conn.dispose();
  }
} 

この例をコンパイルして実行するコマンドと、想定される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 Example5b.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 Example5b <store_name> \
<host_name> <host_port>

-------------------
| name1   | name2 |
===================
| "Alice" | "Bob" |
-------------------