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