SPARQL 1.1クエリ結果JSONフォーマット (original) (raw)
1 はじめに
このドキュメントは、SPARQL結果(SELECTとASKのクエリ形式)をJSONフォーマットでシリアル化する方法について記述しています。このフォーマットは、クエリ結果の情報を完全に表現するものとなるように設計されています。SELECTクエリの結果は、配列としてシリアル化され、個々の配列エレメントはクエリ結果の1つの「列」です。ASKクエリの結果、クエリ結果のブール値が得られます。
インターネット・メディア・タイプは、application/sparql-results+json
に規定されています。
同じような設計でありながら、シリアル化にXMLを用いるSPARQLクエリ結果XMLフォーマット[SRX]もあります。
項の先頭で特に注記がなければ、このドキュメントのすべての項と付録は規範的です。
2 JSON結果オブジェクト
SPARQLクエリの結果は、1つのトップレベルのJSONオブジェクトとしてJSONでシリアル化されます。このオブジェクトは、「head
」メンバーを持ち、また、クエリ形式により「results
」メンバーか「boolean
」メンバーのいずれかを持ちます。
この例は、SELECT
クエリの結果を示しています。クエリ・ソリューションは、「bindings
」キーの値である配列で表され、次に「results
」キーの値であるオブジェクトの一部が表されます。
{ "head": { "vars": [ "book" , "title" ] } , "results": { "bindings": [ { "book": { "type": "uri" , "value": "http://example.org/book/book6" } , "title": { "type": "literal" , "value": "Harry Potter and the Half-Blood Prince" } } , { "book": { "type": "uri" , "value": "http://example.org/book/book7" } , "title": { "type": "literal" , "value": "Harry Potter and the Deathly Hallows" } } , { "book": { "type": "uri" , "value": "http://example.org/book/book5" } , "title": { "type": "literal" , "value": "Harry Potter and the Order of the Phoenix" } } , { "book": { "type": "uri" , "value": "http://example.org/book/book4" } , "title": { "type": "literal" , "value": "Harry Potter and the Goblet of Fire" } } , { "book": { "type": "uri" , "value": "http://example.org/book/book2" } , "title": { "type": "literal" , "value": "Harry Potter and the Chamber of Secrets" } } , { "book": { "type": "uri" , "value": "http://example.org/book/book3" } , "title": { "type": "literal" , "value": "Harry Potter and the Prisoner Of Azkaban" } } , { "book": { "type": "uri" , "value": "http://example.org/book/book1" } , "title": { "type": "literal" , "value": "Harry Potter and the Philosopher's Stone" } } ] } }
この例は、ASK
クエリの結果を示しています。
{ "head" : { } , "boolean" : true }
その他のキー(違う名前を持つ)もJSON結果オブジェクトに存在できますが、この仕様では定義していません。
3 変数バインディング結果
SPARQLのSELECTクエリの結果は、変数のバインディングの配列としてシリアル化されます。「head
」キーの値は、クエリのSELECT
句で射影されたすべての変数の配列です。
3.1 「head」
「head
」メンバーは、結果に記述される変数を表し、「link
」メンバーを含むことができます。
{ "head" { "vars" : [ ... ] , "link" : [ ... ] }
3.1.1 「vars」
「vars
」メンバーは、結果で使用されている変数の名前を示す配列です。これらはクエリから射影された変数です。変数は、必ずしも結果のすべてのクエリ・ソリューションの値が与えられているとは限りません。
"vars" : [ "book" , "title" ]
クエリがSELECT*
という形式でなければ(その場合には順序は重要ではない)、変数名の順序は、クエリのSELECT句内の変数と一致すべきです。
3.1.2 「link」
オプションの「link
」メンバーにより、さらに詳しい情報を得るための参照用のURIの配列が文字列として得られます。これらのリンク参照のフォーマットと内容はこのドキュメントでは定義していません。
"link" : [ "http://example/dataset/metadata.ttl" ]
3.2 「results」
「results
」メンバーの値は、「bindings
」という1つのキーを持つオブジェクトです。
3.2.1 「bindings」
「bindings
」メンバーの値は、0以上の要素の配列で、クエリ・ソリューションごとに1つの要素があります。個々のクエリ・ソリューションはJSONオブジェクトです。このオブジェクトの個々のキーは、クエリ・ソリューションの変数名です。与えられる変数名の値は、変数のバインディングされた値(RDF用語)をエンコードしたJSONオブジェクトです。クエリが空のソリューション・シーケンスを返すとき、配列には0の要素が存在します。変数名の先頭には、「?」または「$」の文字は含まれません。「bindings
」配列内のキーとして表示される個々の変数名は、結果ヘッダー内の「vars」配列に表示されるようになるでしょう。
変数は、その特定のクエリ・ソリューションでバインディングされていなければ、配列要素に表示されません。
バインディング配列内の要素の順序は、(もしあれば)クエリ・ソリューション・シーケンスの順序を反映します。
"bindings" : [ { "a" : { ... } , "b" : { ... } } , { "a" : { ... } , "b" : { ... } } ]
クエリがソリューションを返さなければ、空の配列が用いられます。
"bindings" : []
3.2.2 RDF用語のエンコード
RDF用語(IRI、リテラルまたは空白ノード)は、JSONオブジェクトとしてエンコードされます。RDF用語のすべての側面が表されます。JSONオブジェクトには、「type
」メンバーが存在し、さらに特定の種類のRDF用語によりその他のメンバーが存在します。
RDF用語 | JSON形式 |
---|---|
IRI I | {"type": "uri", "value": "I"} |
Literal S | {"type": "literal","value": "S"} |
Literal S with language tag L | { "type": "literal", "value": "S", "xml:lang": "L"} |
Literal S with datatype IRI D | { "type": "literal", "value": "S", "datatype": "D"} |
Blank node, label B | {"type": "bnode", "value": "B"} |
空白ノード・ラベルのスコープは、結果オブジェクトです。すなわち、1つのSPARQL結果JSONオブジェクト内で同じラベルを持つ2つの空白ノードは、同じ空白ノードです。これは、SPARQLプロセッサが使用できる内部のシステム識別子(system identifier)を示すものではありません。別のSPARQL結果JSONオブジェクト内で同じラベルを使用しても、それが同じ空白ノードであることを意味するわけではありません。
4 ブール結果
SPARQL ASK
クエリの結果は、ブール値としてシリアル化され、クエリ評価の結果を示します。
4.1 「head」
4.1.1 「link」
「link
」メンバーは、SELECTの「link」メンバーと同じフォーマットを持っています。
4.2 「boolean」
ASK
クエリ形式の結果は、「boolean
」メンバーによってエンコードされ、true
(真)のJSON値かfalse
(偽)のJSON値のいずれかをとります。
"boolean" : true
5 例
この項は、規範的ではありません。
次のJSONは、output.srxというXMLドキュメントのシリアル化です。
{ "head": { "link": [ "http://www.w3.org/TR/rdf-sparql-XMLres/example.rq" ], "vars": [ "x", "hpage", "name", "mbox", "age", "blurb", "friend" ] }, "results": { "bindings": [ { "x" : { "type": "bnode", "value": "r1" },
"hpage" : { "type": "uri", "value": "http://work.example.org/alice/" },
"name" : { "type": "literal", "value": "Alice" } ,
"mbox" : { "type": "literal", "value": "" } ,
"blurb" : {
"datatype": "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral",
"type": "literal",
"value": "<p xmlns=\"http://www.w3.org/1999/xhtml\">My name is <b>alice</b></p>"
},
"friend" : { "type": "bnode", "value": "r2" }
},
{
"x" : { "type": "bnode", "value": "r2" },
"hpage" : { "type": "uri", "value": "http://work.example.org/bob/" },
"name" : { "type": "literal", "value": "Bob", "xml:lang": "en" },
"mbox" : { "type": "uri", "value": "mailto:bob@work.example.org" },
"friend" : { "type": "bnode", "value": "r1" }
}
]
}
}
6 インターネット・メディア・タイプ、ファイル拡張子、およびマッキントッシュ・ファイル・タイプ
SPARQLクエリ結果JSONフォーマットのインターネット・メディア・タイプ/MIMEタイプは、「application/sparql-results+json」です。
SPARQLクエリ結果JSONフォーマット・ファイルは、すべてのプラットフォーム上で拡張子「.srj」(すべて小文字)であることが推奨されます。
マッキントッシュHFSファイル・システム上に保存されたSPARQLクエリ結果JSONフォーマット・ファイルには、ファイル・タイプ「TEXT」が付与されていることが推奨されます。
下記のこの情報は、IANAでのレビュー、承認、および登録のためにIESGに提出する予定です。
タイプ名:
application
サブタイプ名:
sparql-results+json
必須パラメータ:
なし
任意のパラメータ:
なし
コード化に関する留意点:
SPARQLクエリ結果JSONフォーマットのコード化に関する留意点は、[JSON-RFC]で指定されている「application/json」のものと同じです。
セキュリティに関する留意点:
SPARQLクエリ結果はURIを使用します。[RFC3986]の7項を参照してください。
SPARQLクエリ結果はIRIを使用します。[RFC3987]の8項を参照してください。
SPARQLクエリ結果JSONフォーマットのセキュリティに関する留意点は、[JSON-RFC]で指定されている「application/json」のものと同じです。
互換性に関する留意点:
互換性の問題は知られていません。
公開済み仕様書:
http://www.w3.org/TR/sparql11-results-json/
このメディア・タイプを使用するアプリケーション:
現時点でこのメディア・タイプを使用するアプリケーションは知られていません。
追加情報:
マジック・ナンバー:
n/a
ファイル拡張子:
「.srj」
マッキントッシュ・ファイル・タイプ・コード:
「TEXT」
詳細情報に関する連絡先:
Andy Seaborne public-rdf-dawg-comments@w3.org
意図する用途:
汎用
使用上の制限:
なし
著者/改版管理者:
SPARQL仕様は、ワールド・ワイド・ウェブ・コンソーシアム(World Wide Web Consortium)のSPARQLワーキンググループ(SPARQL Working Group)の作業の成果です。W3Cは、これらの仕様の変更に対する管理権を有します。