この例では、名前付きグラフを伴う問合せを示します。これには、名前付きグラフのURIとそのパブリッシャに関する情報を持つデフォルト・グラフが伴います。この問合せはグラフ名とそのパブリッシャを検索し、名前付きグラフのそれぞれでfoaf:mbox述語を使用してメールボックスの値を検索します。
import com.hp.hpl.jena.graph.*; import com.hp.hpl.jena.sparql.core.*; import com.hp.hpl.jena.query.*; import oracle.rdf.kv.client.jena.*; public class Example12 { public static void main(String[] args) throws Exception { String szStoreName = args[0]; String szHostName = args[1]; String szHostPort = args[2]; // Create Oracle NoSQL connection OracleNoSqlConnection conn = OracleNoSqlConnection.createInstance(szStoreName, szHostName, szHostPort); // Create Oracle NoSQL graph and dataset OracleGraphNoSql graph = new OracleGraphNoSql(conn); DatasetGraphNoSql datasetGraph = DatasetGraphNoSql.createFrom(graph); // Close graph, as it is no longer needed graph.close(); // Clear dataset datasetGraph.clearRepository(); // add data to the default graph datasetGraph.add(new Quad( Quad.defaultGraphIRI, // specifies default graph Node.createURI("http://example.org/bob"), Node.createURI("http://purl.org/dc/elements/1.1/publisher"), Node.createLiteral("Bob Hacker"))); datasetGraph.add(new Quad( Quad.defaultGraphIRI, // specifies default graph Node.createURI("http://example.org/alice"), Node.createURI("http://purl.org/dc/elements/1.1/publisher"), Node.createLiteral("alice Hacker"))); // add data to the bob named graph datasetGraph.add(new Quad( Node.createURI("http://example.org/bob"), // graph name Node.createURI("urn:bob"), Node.createURI("http://xmlns.com/foaf/0.1/name"), Node.createLiteral("Bob"))); datasetGraph.add(new Quad( Node.createURI("http://example.org/bob"), // graph name Node.createURI("urn:bob"), Node.createURI("http://xmlns.com/foaf/0.1/mbox"), Node.createURI("mailto:bob@example"))); // add data to the alice named graph datasetGraph.add(new Quad( Node.createURI("http://example.org/alice"), // graph name Node.createURI("urn:alice"), Node.createURI("http://xmlns.com/foaf/0.1/name"), Node.createLiteral("Alice"))); datasetGraph.add(new Quad( Node.createURI("http://example.org/alice"), // graph name Node.createURI("urn:alice"), Node.createURI("http://xmlns.com/foaf/0.1/mbox"), Node.createURI("mailto:alice@example"))); Dataset ds = DatasetImpl.wrap(datasetGraph); String szQuery = " PREFIX foaf: <http://xmlns.com/foaf/0.1/>" + " PREFIX dc: <http://purl.org/dc/elements/1.1/> " + " SELECT ?who ?graph ?mbox " + " FROM NAMED <http://example.org/alice>" + " FROM NAMED <http://example.org/bob>" + " WHERE " + " { " + " ?graph dc:publisher ?who . " + " GRAPH ?graph { ?x foaf:mbox ?mbox } " + " } "; Query query = QueryFactory.create(szQuery); 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 Example12.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 Example12 <store_name> \ <host_name> <host_port> ---------------------------------------------------------------------- | who | graph | mbox | ====================================================================== | "Bob Hacker" | <http://example.org/bob> | <mailto:bob@example> | |"alice Hacker" | <http://example.org/alice> | <mailto:alice@example>| ---------------------------------------------------------------------