SPARQL 1.1クエリ結果CSVおよびTSVフォーマット (original) (raw)
【注意】 このドキュメントは、W3CのSPARQL 1.1 Query Results CSV and TSV Formats W3C Recommendation 21 March 2013の和訳です。
このドキュメントの正式版はW3Cのサイト上にある英語版であり、このドキュメントには翻訳に起因する誤りがありえます。誤訳、誤植などのご指摘は、訳者までお願い致します。
First Update: 2014年2月23日
要約
CSV[RFC4180](comma separated values;コンマ区切り)とTSV[IANA-TSV](tab separated values;タブ区切り)のフォーマットは、単純で、処理が容易な、表形式のデータ送信用フォーマットです。これらは多くのツール(特にスプレッドシート)に対する入力データ・フォーマットとして利用されています。このドキュメントは、SELECT
クエリに基づくSPARQLクエリ結果を表現するためにこれらのフォーマットを使用する方法について記述しています。
目次
1. はじめに
このドキュメントは、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]で記述されているとおりに解釈されなければなりません。
1.1 例
次の人工的に作成した例は、各フォーマットによる結果のシリアル化の特徴を説明するために使用しています。
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 |
3. CSV - コンマ区切り
SPARQL結果CSVフォーマットでは、結果の表は、結果の変数を列記した1行としてシリアル化されます。CSVヘッダー行を用い、その後にクエリ・ソリューションが1行ずつ続きます(1行はデータ内の改行で分割終了)。結果内の値は、URI、リテラル、空白ノードの場合は文字列で、リテラルが数値のXSDデータ型である場合は数値です。
3.1 結果の表のシリアル化
SPARQL CSV結果フォーマット応答の最初の行は、結果で用いる変数の名前を示すヘッダー行です。ヘッダー行は、先頭に?がない、コンマ区切りの変数名で構成されます。
text/csvフォーマットではヘッダー行は必須ではありませんが、SPARQL CSV結果フォーマットではヘッダー行を用いなければなりません(_must_)。コンテンツ・タイプのパラメータにheaderを用いる場合は、header=presentでなければなりません(_must_)。
残りの行は結果の値で、各バインディングは行内の位置によって決まり、それらはヘッダー行の見出しに対応しています。
変数がバインドされていなければ、空のフィールドが用いられます(例えば、,,)。各行には、同じ数のフィールドがなければならず(_must_)、各フィールドは、ヘッダー行の同じフィールド・ポジションにある変数のバインディングに対応しています。
3.2 RDF用語のシリアル化
各フィールドの見出しは、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に基づく)を使用できます。
3.3 CSVシリアル化の結果の例
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
4. TSV - タブ区切り
SPARQL結果TSVフォーマットでは、結果の表は、結果内に変数を列記した1行としてシリアル化されます。そして、その後にクエリ・ソリューションが1行ずつ続きます。フォーマットで用いられているすべてのRDF用語は、リテラルの字句部分にトリプル引用符形式を用いてはならない(_must not_)という点を除き、Turtle[TURTLE]で定められているフォーマットでエンコードされます。これらの形式により、生の(raw)改行とタブをTSVフォーマットの一部として使用できるようになります。TSVフォーマットSPARQL結果は、\t、\n、\rなどの必要なエスケープとともに、シングル引用符付きリテラル形式を用いなければなりません。
4.1 結果の表のシリアル化
結果の表は、結果の変数を列記した1行としてシリアル化されます。そして、その後にクエリ・ソリューションが1行ずつ続きます。この先頭行は、CSVではオプションでしたが、TSVフォーマット[IANA-TSV]では必須です。
変数は、前に疑問符?が付いた変数名を用いて、SPARQL構文でシリアル化されます。
結果の各行は、タブ文字(水平タブ。Unicodeコードポイントの9)で区切られた、SPARQL構文のRDF用語のシーケンスでシリアル化されます。
変数が行内でバインドされていなければ、空のフィールドが用いられます。各行には、同じ数のフィールドがなければならず(_must_)、それらは1行目に列記されている変数に対応しています。
4.2 RDF用語のシリアル化
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形式を用います。同じラベルの使用は、結果の中では同じ空白ノードを示しますが、結果の外では意味を持ちません。
4.3 TSVシリアル化の結果の例
生の(raw)タブ文字(Unicodeコードポイントの9)をと記述しています。
?x?literal http://example/x"String" http://example/x"String-with-dquote""
_:blank0"Blank node" "Missing 'x'" http://example/x _:blank1"String-with-lang"@en _:blank1123
A. 参考文献
この項には、標準のbiblio DBにまだ含まれていない参考文献が含まれています。
A.1 規範的な参考文献
SPARQL11-JSON-RES
SPARQL 1.1 Query Results JSON Format, A. Seaborne, Editor, W3C Recommendation, 21 March 2013, http://www.w3.org/TR/2013/REC-sparql11-results-json-20130321\. Latest version available at http://www.w3.org/TR/sparql11-results-json.
SPARQL11-QUERY
SPARQL 1.1 Query Language, S. Harris, A. Seaborne, Editors, W3C Recommendation, 21 March 2013, http://www.w3.org/TR/2013/REC-sparql11-query-20130321\. Latest version available at http://www.w3.org/TR/sparql11-query.
A.2 非規範的な参考文献
変更履歴
勧告案以後の変更履歴
- なし
最終草案以後の変更履歴
- なし