【注意】 このドキュメントは、W3CのSPARQL 1.1 Query Results CSV and TSV Formats W3C Recommendation 21 March 2013の和訳です。
このドキュメントの正式版はW3Cのサイト上にある英語版であり、このドキュメントには翻訳に起因する誤りがありえます。誤訳、誤植などのご指摘は、訳者までお願い致します。
First Update: 2014年2月23日
このドキュメントに対する正誤表を参照してください。いくつかの規範的な修正が含まれているかもしれません。
翻訳版も参照してください。
Copyright © 2013 W3C® (MIT, ERCIM, Keio, Beihang), All Rights Reserved. W3C liability, trademark and document use rules apply.
CSV[RFC4180](comma separated values;コンマ区切り)とTSV[IANA-TSV](tab separated values;タブ区切り)のフォーマットは、単純で、処理が容易な、表形式のデータ送信用フォーマットです。これらは多くのツール(特にスプレッドシート)に対する入力データ・フォーマットとして利用されています。このドキュメントは、SELECT
クエリに基づくSPARQLクエリ結果を表現するためにこれらのフォーマットを使用する方法について記述しています。
この項は、このドキュメントの公開時のステータスについて記述しています。他のドキュメントがこのドキュメントに取って代わることがありえます。現行のW3Cの刊行物およびこの技術報告の最新の改訂版のリストは、http://www.w3.org/TR/のW3C技術報告インデックスにあります。
このドキュメントは、SPARQLワーキンググループが作成した以下の11のSPARQL 1.1勧告のうちの1つです。
旧バージョン以降、このドキュメントには実質的な変更はありませんでした。マイナーな編集上の変更がある場合には、変更履歴に詳細が記述されており、色分けした差分として見ることができます。
[email protected](公開アーカイブ)にコメントをお送りください。このドキュメントに対するSPARQLワーキンググループの作業は完了していますが、コメントは正誤表や今後の改定で扱われることがあります。公開討論は、[email protected](公開アーカイブ)で歓迎します。
このドキュメントは、W3Cメンバー、ソフトウェア開発者、他のW3Cグループ、および他の利害関係者によりレビューされ、W3C勧告として管理者の協賛を得ました。これは確定済みドキュメントであり、参考資料として用いたり、別のドキュメントで引用することができます。勧告の作成におけるW3Cの役割は、仕様に注意を引き付け、広範囲な開発を促進することです。これによってウェブの機能性および相互運用性が増強されます。
このドキュメントは、2004年2月5日のW3C特許方針の下で活動しているグループによって作成されました。W3Cは、このグループの成果物に関連するあらゆる特許の開示の公開リストを維持し、このページには特許の開示に関する指示も含まれています。不可欠な請求権(Essential Claim(s))を含んでいると思われる特許に関して実際に知っている人は、W3C特許方針の6項に従って情報を開示しなければなりません。
このドキュメントは、SPARQL SELECT
クエリの結果を表現するためのCSVとTSVのフォーマットについて記述しています。これらは、様々な実装技術を用いているシステム間の共通項(lowest common denominator)となっているフォーマットです。
SPARQL結果を表現するためのその他のフォーマットには、SPARQL XML結果フォーマット[RDF-SPARQL-XMLRES]とSPARQL JSON結果フォーマット[SPARQL11-JSON-RES]があります。それぞれのフォーマットは、異なるアプリケーションのシナリオに役立ちます。
SPARQL結果のCSV結果フォーマットは、結果の表のロッシー・エンコーディングです。結果の各RDF用語を細部まですべてエンコードするわけではなく、用語の型(IRI、リテラル、データ型付きリテラル、言語付きリテラル、空白ノード)を示さずに、文字列を提供するだけです。これにより、RDFの詳細を理解する必要なく、アプリケーションでテキストや数値などのデータを利用することが容易になります。例えば、「http://」で始まる文字列はリンクであると推測することで、どの要素がハイパーリンクかの推測を実際的に行うアプリケーションもあります。
SPARQL結果のTSV結果フォーマットは、SPARQL[SPARQL11-QUERY]とTurtle[TURTLE]の構文を用いて、結果の表内のRDF用語を詳細にエンコードします。TSVエンコードされた結果を受け取ったアプリケーションは、各行を結果の行の要素に分割し、より複雑なSPARQL結果フォーマットで必要とされる完全なXMLやJSONパーサなしに、欲しい詳細データをすべて抽出し、シンプルな文字列処理でRDF用語を処理できます。
このドキュメントが、しなければならない(must)、してはならない(must not)、すべきである/する必要がある(should)、すべきでない/する必要がない(should not)、することができる/してもよい(may)、推奨される(recommended)という単語を使用するとき、RFC 2119[RFC2119]で記述されているとおりに解釈されなければなりません。
次の人工的に作成した例は、各フォーマットによる結果のシリアル化の特徴を説明するために使用しています。
x | リテラル | 解説(表の一部ではない) |
---|---|---|
<http://example/x> | String | IRIと、S-t-r-i-n-gという文字で構成される文字列 |
<http://example/x> | String-with-dquote" | ダブル引用符が含まれている文字列 |
_:b0 | Blank node | 空白ノード |
Missing 'x' | x列にはRDF用語がない。 | |
この行には用語がない。 | ||
<http://example/x> | リテラルの列には用語がない。 | |
_:b1 | "String-with-lang"@en | 言語タグ付きのRDFリテラル |
_:b1 | 123 | RDFリテラル、データ型xsd:integer、字句形式123 |
ここで記述しているSPARQL結果フォーマットは、関連フォーマットであるCSV(Comma Separated values)[RFC4180]とTSV(Tab Separated Value)[IANA-TSV]の正式な仕様に準拠します。
これらのフォーマットを提供するシステムは、CSVのコンテンツ・タイプはtext/csvで、TSVのコンテンツ・タイプはtext/tab-separated-valuesであることに注意すべきです。text/*の場合、デフォルトの文字集合はUS-ASCIIです。charsetパラメータは、SPARQL結果とともに用いるべきです(should)。text/csv; charset=utf-8やtext/tab-separated-values; charset=utf-8のように、UTF-8が推奨されます。
CSVの行末はCRLF(Unicodeコードポイントの13(0x0D)と10(0x0A))です。
TSVの行末はEOL(Unicodeコードポイントの10(0x0A))です。
これらのフォーマットを読み込むアプリケーションは、正式な仕様との適合性に依存せず、CRLFとLFの両方を行端マーカーとして処理する方がよいでしょう。
SPARQL結果CSVフォーマットでは、結果の表は、結果の変数を列記した1行としてシリアル化されます。CSVヘッダー行を用い、その後にクエリ・ソリューションが1行ずつ続きます(1行はデータ内の改行で分割終了)。結果内の値は、URI、リテラル、空白ノードの場合は文字列で、リテラルが数値のXSDデータ型である場合は数値です。
SPARQL CSV結果フォーマット応答の最初の行は、結果で用いる変数の名前を示すヘッダー行です。ヘッダー行は、先頭に?がない、コンマ区切りの変数名で構成されます。
text/csvフォーマットではヘッダー行は必須ではありませんが、SPARQL CSV結果フォーマットではヘッダー行を用いなければなりません(must)。コンテンツ・タイプのパラメータにheaderを用いる場合は、header=presentでなければなりません(must)。
残りの行は結果の値で、各バインディングは行内の位置によって決まり、それらはヘッダー行の見出しに対応しています。
変数がバインドされていなければ、空のフィールドが用いられます(例えば、,,)。各行には、同じ数のフィールドがなければならず(must)、各フィールドは、ヘッダー行の同じフィールド・ポジションにある変数のバインディングに対応しています。
各フィールドの見出しは、RDF用語の値に対応する文字列です。(SPARQL STR()を参照)どのような種類の用語かを示す構文はありません。CSVフォーマットの引用符エンコード規則を使用しなければなりません。
空白ノードは、TurtleとSPARQLに基づく_:label形式を用います。同じラベルの使用は、結果の中では同じ空白ノードを示しますが、結果の外では意味を持ちません。
"(引用符。コードポイントの34、Unicode[UNICODE]では0x22)、,(コンマ。コードポイントの44、0x2C)、LF(コードポイントの10、0x0A)、CR(コードポイントの13、0x0D)のいずれかを含んでいるフィールドは、RFC4180[RFC4180]の引用符号法を用いて引用形式にしなければなりません。フィールドの境界は、1組の引用符である"(コードポイントの0x22)で区切られます。引用文字列内では、"以外のすべての文字は、改行文字も含め、それぞれに厳密な意味を有しています - 改行によってCSVデータは終了しません。"は、1組の引用符""を用いて記述します。
標準的なCSVフォーマットは、値の欠落と空の文字列を区別しません。SPARQL 1.1 CSV結果フォーマットは、バインドされていない変数と、空の文字列リテラルにバインドされている変数に同じ表現を用います。この区別が必要な場合は、他のSPARQL結果フォーマット(JSON、TSVまたはXMLに基づく)を使用できます。
x,literal http://example/x,String http://example/x,"String-with-dquote""" _:b0,Blank node ,Missing 'x' , http://example/x, _:b1,String-with-lang _:b1,123
SPARQL結果TSVフォーマットでは、結果の表は、結果内に変数を列記した1行としてシリアル化されます。そして、その後にクエリ・ソリューションが1行ずつ続きます。フォーマットで用いられているすべてのRDF用語は、リテラルの字句部分にトリプル引用符形式を用いてはならない(must not)という点を除き、Turtle[TURTLE]で定められているフォーマットでエンコードされます。これらの形式により、生の(raw)改行とタブをTSVフォーマットの一部として使用できるようになります。TSVフォーマットSPARQL結果は、\t、\n、\rなどの必要なエスケープとともに、シングル引用符付きリテラル形式を用いなければなりません。
結果の表は、結果の変数を列記した1行としてシリアル化されます。そして、その後にクエリ・ソリューションが1行ずつ続きます。この先頭行は、CSVではオプションでしたが、TSVフォーマット[IANA-TSV]では必須です。
変数は、前に疑問符?が付いた変数名を用いて、SPARQL構文でシリアル化されます。
結果の各行は、タブ文字(水平タブ。Unicodeコードポイントの9)で区切られた、SPARQL構文のRDF用語のシーケンスでシリアル化されます。
変数が行内でバインドされていなければ、空のフィールドが用いられます。各行には、同じ数のフィールドがなければならず(must)、それらは1行目に列記されている変数に対応しています。
SPARQL結果TSV結果フォーマットは、SPARQL[SPARQL11-QUERY]とTurtle[TURTLE]の構文を用いて、結果の表内のRDF用語をシリアル化します。
IRIは<...>で囲まれ、リテラルは、オプションで@langまたはデータ型を示す^^が付き、ダブル引用符"..."またはシングル引用符' ...'で囲まれます。字句形式の前後の引用符は必須です。タブ、改行、復帰の文字(Unicodeコードポイントの0x09、0x0A(改行)、0x0D(復帰))は、それぞれ、\t、\n、\rという文字列でエンコードされます。トリプル引用符"""および'''を用いた長い文字列形式は使用してはなりません(must not)。
数値(XSD整数、10進数、倍精度浮動小数点)には省略形を用いるべきです(should)。
空白ノードは、TurtleとSPARQLに基づく_:label形式を用います。同じラベルの使用は、結果の中では同じ空白ノードを示しますが、結果の外では意味を持ちません。
生の(raw)タブ文字(Unicodeコードポイントの9)を<TAB>と記述しています。
?x<TAB>?literal <http://example/x><TAB>"String" <http://example/x><TAB>"String-with-dquote\"" _:blank0<TAB>"Blank node" <TAB>"Missing 'x'" <TAB> <http://example/x><TAB> _:blank1<TAB>"String-with-lang"@en _:blank1<TAB>123
この項には、標準のbiblio DBにまだ含まれていない参考文献が含まれています。