SPARQL問合せの応答では、JavaScript Object Notation (JSON)形式がサポートされています。JSONデータ形式は単純でコンパクトであり、JavaScriptプログラムに適しています。
たとえば次のJavaコード・スニペットは、Oracle NoSQL Databaseに格納されているデータに対する問合せを実行し、ResultSetFormatter.outputAsJSON()
メソッドを呼び出して問合せ結果を表示します。
OracleNoSqlConnection conn = OracleNoSqlConnection.createInstance(storeName, hostName, hostPort); OracleGraphNoSql graph = new OracleNamedGraphNoSql(graphName, conn); OracleModelNoSql model = new OracleModelNoSql(graph); graph.add(new Triple(Node.createURI("http://ds1"), Node.createURI("http://dp1"), Node.createURI("http://do1"))); graph.add(new Triple(Node.createURI("http://ds2"), Node.createURI("http://dp2"), Node.createURI("http://do2"))); Query q = QueryFactory.create("select ?s ?p ?o where {?s ?p ?o}", Syntax.syntaxARQ); QueryExecution qexec = QueryExecutionFactory.create(q, model); ResultSet results = qexec.execSelect(); ResultSetFormatter.outputAsJSON(System.out, results);
このコードを実行すると、次のJSON出力が生成されます。
{ "head": { "vars": [ "s" , "p" , "o" ] } , "results": { "bindings": [ { "s": { "type": "uri" , "value": "http://ds1" } , "p": { "type": "uri" , "value": "http://dp1" } , "o": { "type": "uri" , "value": "http://do1" } } , { "s": { "type": "uri" , "value": "http://ds2" } , "p": { "type": "uri" , "value": "http://dp2" } , "o": { "type": "uri" , "value": "http://do2" } } ] } }
上の例を変更すると、直接Oracle NoSQL Databaseに対して実行するかわりに、リモートのSPARQLエンドポイントに対する問合せを実行できます。(リモートのSPARQLエンドポイントがファイアウォール外にある場合は、HTTPプロキシの設定が必要な場合もあります。)
Query q = QueryFactory.create("select ?s ?p ?o where {?s ?p ?o}", Syntax.syntaxARQ); QueryExecution qexec = QueryExecutionFactory.sparqlService(sparqlURL, q); ResultSet results = qexec.execSelect(); ResultSetFormatter.outputAsJSON(System.out, results);
この項の最初の例を名前付きグラフに拡張するために、次のコード・スニペットは同じデータセットに2つのクワッドを追加し、名前付きグラフに基づくSPARQL問合せを実行して、問合せの出力をJSON形式にシリアライズします。
DatasetGraphNoSql dsg = DatasetGraphNoSql.createFrom(graph); graph.close(); dsg.add(new Quad(Node.createURI("http://g1"), Node.createURI("http://s1"), Node.createURI("http://p1"), Node.createURI("http://o1") ) ); dsg.add(new Quad(Node.createURI("http://g2"), Node.createURI("http://s2"), Node.createURI("http://p2"), Node.createURI("http://o2") ) ); Query q1 = QueryFactory.create( "select ?g ?s ?p ?o where { GRAPH ?g {?s ?p ?o} }"); QueryExecution qexec1 = QueryExecutionFactory.create(q1, DatasetImpl.wrap(dsg)); ResultSet results1 = qexec1.execSelect(); ResultSetFormatter.outputAsJSON(System.out, results1); dsg.close(); conn.dispose();
このコードの実行後に生成されるJSON出力は、次のように表示されます。
{ "head": { "vars": [ "g" , "s" , "p" , "o" ] } , "results": { "bindings": [ { "g": { "type": "uri" , "value": "http://g1" } , "s": { "type": "uri" , "value": "http://s1" } , "p": { "type": "uri" , "value": "http://p1" } , "o": { "type": "uri" , "value": "http://o1" } } , { "g": { "type": "uri" , "value": "http://g2" } , "s": { "type": "uri" , "value": "http://s2" } , "p": { "type": "uri" , "value": "http://p2" } , "o": { "type": "uri" , "value": "http://o2" } } ] } }
次の例のように、JosekiベースのSPARQLエンドポイントに対してHTTPを通じてJSON応答を取得することもできます。通常、SPARQL Webサービス・エンドポイントに対してSPARQL問合せを実行すると、Accept request-headフィールドがapplication/sparql-results+xmlに設定されます。JSON出力形式の場合は、Accept request-headフィールドをapplication/sparql-results+jsonに置き換えます。
http://<hostname>:7001/joseki/oracle-nosql?query= <URL_ENCODED_SPARQL_QUERY>&output=json