CyberLibrarian

【注意】 このドキュメントは、W3CのSPARQL 1.1 Query Results JSON Format W3C Recommendation 21 March 2013の和訳です。
このドキュメントの正式版はW3Cのサイト上にある英語版であり、このドキュメントには翻訳に起因する誤りがありえます。誤訳、誤植などのご指摘は、訳者までお願い致します。

First Update: 2014年2月20日


W3C

SPARQL 1.1クエリ結果JSONフォーマット

W3C勧告 2013年3月21日

本バージョン:
http://www.w3.org/TR/2013/REC-sparql11-results-json-20130321/
最新バージョン:
http://www.w3.org/TR/sparql11-results-json/
旧バージョン:
http://www.w3.org/TR/2012/PR-sparql11-results-json-20121108/
編集者:
Andy Seaborne, The Apache Software Foundation
旧編集者:
Kendall Grant Clark, UMD Mindswap
Lee Feigenbaum, IBM
Elias Torres, IBM

このドキュメントに対する正誤表を参照してください。いくつかの規範的な修正が含まれているかもしれません。

翻訳版も参照してください。


要約

SPARQLは、ウェブ上のRDFデータなどのデータにアクセスする方法の標準であるとともに、RDFデータのクエリと更新のための標準です。このドキュメントは、JSONを用いたSELECTとASKのクエリ結果の表現について記述しています。

このドキュメントのステータス

置き換えられる可能性

この項は、このドキュメントの公開時のステータスについて記述しています。他のドキュメントがこのドキュメントに取って代わることがありえます。現行のW3Cの刊行物およびこの技術報告の最新の改訂版のリストは、http://www.w3.org/TR/のW3C技術報告インデックスにあります。

このドキュメントは、SPARQLワーキンググループが作成した以下の11のSPARQL 1.1勧告のうちの1つです。

  1. SPARQL 1.1概要
  2. SPARQL 1.1クエリ言語
  3. SPARQL 1.1更新
  4. SPARQL 1.1サービス記述
  5. SPARQL 1.1統合クエリ
  6. SPARQL 1.1クエリ結果JSONフォーマット(このドキュメント)
  7. SPARQL 1.1クエリ結果CSVおよびTSVフォーマット
  8. SPARQLクエリ結果XMLフォーマット(第2版)
  9. SPARQL 1.1含意レジーム
  10. SPARQL 1.1プロトコル
  11. SPARQL 1.1グラフ・ストアHTTPプロトコル

本質的な変更なし

旧バージョン以降、このドキュメントには実質的な変更はありませんでした。マイナーな編集上の変更がある場合には、変更履歴に詳細が記述されており、色分けした差分として見ることができます。

コメントの送信

public-rdf-dawg-comments@w3.org公開アーカイブ)にコメントをお送りください。このドキュメントに対するSPARQLワーキンググループの作業は完了していますが、コメントは正誤表や今後の改定で扱われることがあります。公開討論は、public-sparql-dev@w3.org公開アーカイブ)で歓迎します。

W3Cによる承認

このドキュメントは、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 インターネット・メディア・タイプ、ファイル拡張子、およびマッキントッシュ・ファイル・タイプ

付録

A 参考文献
    A.1 規範的な参考文献
    A.2 その他の参考文献


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は、これらの仕様の変更に対する管理権を有します。

A 参考文献

A.1 規範的な参考文献

[JSON-RFC]
RFC 4627,
The application/json Media Type for JavaScript Object Notation (JSON),
D. Crockford,
http://www.ietf.org/rfc/rfc4627.txt
[RFC3986]
RFC 3986,
Uniform Resource Identifier (URI): Generic Syntax,
T. Berners-Lee, R. Fielding, L. Masinter,
http://www.ietf.org/rfc/rfc3986.txt
[RFC3987]
RFC 3987,
Internationalized Resource Identifiers (IRIs),
M. Durst, M. Suignard,
http://www.ietf.org/rfc/rfc3987.txt

A.2 その他の参考文献

[SRX]
SPARQL Query Results XML Format (Second Edition), D. Beckett, J. Broekstra, Editors, W3C Recommendation, 21 March 2013, http://www.w3.org/TR/2013/REC-rdf-sparql-XMLres-20130321. Latest version available at http://www.w3.org/TR/rdf-sparql-XMLres.

変更履歴

勧告案以後の変更履歴

最終草案以後の変更履歴