【注意】 このドキュメントは、W3CのSPARQL 1.1 Query Results JSON Format W3C Recommendation 21 March 2013の和訳です。
このドキュメントの正式版はW3Cのサイト上にある英語版であり、このドキュメントには翻訳に起因する誤りがありえます。誤訳、誤植などのご指摘は、訳者までお願い致します。
First Update: 2014年2月20日
このドキュメントに対する正誤表を参照してください。いくつかの規範的な修正が含まれているかもしれません。
翻訳版も参照してください。
Copyright © 2013 W3C® (MIT, ERCIM, Keio, Beihang), All Rights Reserved. W3C liability, trademark and document use rules apply.
SPARQLは、ウェブ上のRDFデータなどのデータにアクセスする方法の標準であるとともに、RDFデータのクエリと更新のための標準です。このドキュメントは、JSONを用いたSELECTとASKのクエリ結果の表現について記述しています。
この項は、このドキュメントの公開時のステータスについて記述しています。他のドキュメントがこのドキュメントに取って代わることがありえます。現行のW3Cの刊行物およびこの技術報告の最新の改訂版のリストは、http://www.w3.org/TR/のW3C技術報告インデックスにあります。
このドキュメントは、SPARQLワーキンググループが作成した以下の11のSPARQL 1.1勧告のうちの1つです。
旧バージョン以降、このドキュメントには実質的な変更はありませんでした。マイナーな編集上の変更がある場合には、変更履歴に詳細が記述されており、色分けした差分として見ることができます。
public-rdf-dawg-comments@w3.org(公開アーカイブ)にコメントをお送りください。このドキュメントに対するSPARQLワーキンググループの作業は完了していますが、コメントは正誤表や今後の改定で扱われることがあります。公開討論は、public-sparql-dev@w3.org(公開アーカイブ)で歓迎します。
このドキュメントは、W3Cメンバー、ソフトウェア開発者、他のW3Cグループ、および他の利害関係者によりレビューされ、W3C勧告として管理者の協賛を得ました。これは確定済みドキュメントであり、参考資料として用いたり、別のドキュメントで引用することができます。勧告の作成におけるW3Cの役割は、仕様に注意を引き付け、広範囲な開発を促進することです。これによってウェブの機能性および相互運用性が増強されます。
このドキュメントは、2004年2月5日のW3C特許方針の下で活動しているグループによって作成されました。W3Cは、このグループの成果物に関連するあらゆる特許の開示の公開リストを維持し、このページには特許の開示に関する指示も含まれています。不可欠な請求権(Essential Claim(s))を含んでいると思われる特許に関して実際に知っている人は、W3C特許方針の6項に従って情報を開示しなければなりません。
1 はじめに
2 JSON結果オブジェクト
3 変数バインディング結果
    3.1 「head」
        3.1.1 「vars」
        3.1.2 「link」
    3.2 「results」
        3.2.1 「bindings」
        3.2.2 RDF用語のエンコード
4 ブール結果
    4.1 「head」
        4.1.1 「link」
    4.2 「boolean」
5 例
6 インターネット・メディア・タイプ、ファイル拡張子、およびマッキントッシュ・ファイル・タイプ
このドキュメントは、SPARQL結果(SELECTとASKのクエリ形式)をJSONフォーマットでシリアル化する方法について記述しています。このフォーマットは、クエリ結果の情報を完全に表現するものとなるように設計されています。SELECTクエリの結果は、配列としてシリアル化され、個々の配列エレメントはクエリ結果の1つの「列」です。ASKクエリの結果、クエリ結果のブール値が得られます。
インターネット・メディア・タイプは、application/sparql-results+jsonに規定されています。
同じような設計でありながら、シリアル化にXMLを用いるSPARQLクエリ結果XMLフォーマット[SRX]もあります。
項の先頭で特に注記がなければ、このドキュメントのすべての項と付録は規範的です。
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結果オブジェクトに存在できますが、この仕様では定義していません。
SPARQLのSELECTクエリの結果は、変数のバインディングの配列としてシリアル化されます。「head」キーの値は、クエリのSELECT句で射影されたすべての変数の配列です。
「head」メンバーは、結果に記述される変数を表し、「link」メンバーを含むことができます。
{
"head" { 
   "vars" : [ ... ] ,
   "link" : [ ... ] }
「results」メンバーの値は、「bindings」という1つのキーを持つオブジェクトです。
「bindings」メンバーの値は、0以上の要素の配列で、クエリ・ソリューションごとに1つの要素があります。個々のクエリ・ソリューションはJSONオブジェクトです。このオブジェクトの個々のキーは、クエリ・ソリューションの変数名です。与えられる変数名の値は、変数のバインディングされた値(RDF用語)をエンコードしたJSONオブジェクトです。クエリが空のソリューション・シーケンスを返すとき、配列には0の要素が存在します。変数名の先頭には、「?」または「$」の文字は含まれません。「bindings」配列内のキーとして表示される個々の変数名は、結果ヘッダー内の「vars」配列に表示されるようになるでしょう。
変数は、その特定のクエリ・ソリューションでバインディングされていなければ、配列要素に表示されません。
バインディング配列内の要素の順序は、(もしあれば)クエリ・ソリューション・シーケンスの順序を反映します。
"bindings" : [
               {
                 "a" : { ... } ,
                 "b" : { ... } 
               } ,
               {
                 "a" : { ... } ,
                 "b" : { ... } 
               }
             ]
クエリがソリューションを返さなければ、空の配列が用いられます。
"bindings" : []
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オブジェクト内で同じラベルを使用しても、それが同じ空白ノードであることを意味するわけではありません。
SPARQL ASKクエリの結果は、ブール値としてシリアル化され、クエリ評価の結果を示します。
「link」メンバーは、SELECTの「link」メンバーと同じフォーマットを持っています。
この項は、規範的ではありません。
次の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" }
               }
           ]
       }
}
SPARQLクエリ結果JSONフォーマットのインターネット・メディア・タイプ/MIMEタイプは、「application/sparql-results+json」です。
SPARQLクエリ結果JSONフォーマット・ファイルは、すべてのプラットフォーム上で拡張子「.srj」(すべて小文字)であることが推奨されます。
マッキントッシュHFSファイル・システム上に保存されたSPARQLクエリ結果JSONフォーマット・ファイルには、ファイル・タイプ「TEXT」が付与されていることが推奨されます。
下記のこの情報は、IANAでのレビュー、承認、および登録のためにIESGに提出する予定です。