【注意】 このドキュメントは、W3CのSPARQL 1.1 Protocol W3C Recommendation 21 March 2013の和訳です。
このドキュメントの正式版はW3Cのサイト上にある英語版であり、このドキュメントには翻訳に起因する誤りがありえます。誤訳、誤植などのご指摘は、訳者までお願い致します。
First Update: 2013年8月13日
このドキュメントに対する正誤表を参照してください。いくつかの規範的な修正が含まれているかもしれません。
翻訳版も参照してください。
Copyright © 2013 W3C® (MIT, ERCIM, Keio, Beihang), All Rights Reserved. W3C liability, trademark and document use rules apply.
SPARQLプロトコルとRDFクエリ言語(SPARQL)は、RDF用のクエリ言語とプロトコルです。このドキュメントでは、SPARQLプロトコルの仕様を定めています。それは、SPARQLのクエリと更新をSPARQL処理サービスに伝え、要求を行ったエンティティーにHTTPで結果を返すための手段を記述しています。このプロトコルは、アクティビティ声明で記述されているように、セマンティック・ウェブ・アクティビティの一部であるW3CのSPARQLワーキンググループによって開発されました。
この項は、このドキュメントの公開時のステータスについて記述しています。他のドキュメントがこのドキュメントに取って代わることがありえます。現行の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 はじめに
1.1 ドキュメントの規定
1.2 用語
2 SPARQLプロトコル・オペレーション
2.1 queryオペレーション
2.1.1 GETによるquery
2.1.2 URLエンコードされたパラメータを用いたPOSTによるquery
2.1.3 POSTによる直接的なquery
2.1.4 RDFデータセットの指定
2.1.5 認められるレスポンス形式
2.1.6 成功のレスポンス
2.1.7 失敗のレスポンス
2.2 updateオペレーション
2.2.1 URLエンコードされたパラメータを用いたPOSTによるupdate
2.2.2 POSTによる直接的なupdate
2.2.3 RDFデータセットの指定
2.2.4 成功のレスポンス
2.2.5 失敗のレスポンス
2.3 基底IRIの決定
3 SPARQLプロトコル・リクエストの例(参考情報)
3.1 SPARQLクエリの例
3.1.1 SELECTとサービスから提供されたRDFデータセット
3.1.2 SELECTとシンプルなRDFデータセット
3.1.3 CONSTRUCTとシンプルなRDFデータセットおよびHTTP内容交渉
3.1.4 ASKとシンプルなRDFデータセット
3.1.5 DESCRIBEとシンプルなRDFデータセット
3.1.6 SELECTと複合的なRDFデータセット
3.1.7 SELECTとクエリのみのRDFデータセット
3.1.8 SELECTと曖昧なRDFデータセット
3.1.9 SELECTと不正なクエリのフォルト
3.1.10 SELECTとクエリ・リクエスト拒否のフォルト
3.1.11 POSTとURLエンコーディングを用いた長いSELECTクエリ
3.1.12 POSTを直接用いた長いSELECTクエリ
3.1.13 SELECTと国際化
3.2 SPARQL更新の例
3.2.1 URLエンコードされたパラメータを用いたUPDATE
3.2.2 POSTを直接用いたUPDATE
3.2.3 データセットを指定し、POSTを直接用いたUPDATE
3.2.4 URLエンコードされたパラメータを用いた多重オペレーションUPDATE
3.2.5 データセットを指定し、URLエンコードされたパラメータを用いた多重オペレーションUPDATE
3.2.6 データセットを指定し、POSTを直接用いた多重オペレーションUPDATE
4 方針に関する留意点
4.1 セキュリティ
5 適合性
6 前勧告以後の変更(参考情報)
このドキュメントでは、SPARQLのクエリと更新をクライアントからSPARQLプロセッサに伝える手段であるSPARQL 1.1プロトコルについて記述しています。SPARQLプロトコルは、SPARQL 1.1クエリ言語[SPARQL]およびRDF用のSPARQL 1.1更新言語と互換性があるように設計してあります。このドキュメントは、SPARQLのクエリと更新のサービスとクライアントの実装に興味を持っているソフトウェア開発者を主として対象としています。
SPARQLプロトコルは、SPARQLクエリ言語のクエリを行なうためのクエリ・オペレーションと、SPARQL更新言語のリクエストを行なうための更新オペレーションの2つのHTTPオペレーションで構成されます。SPARQLプロトコルのクライアントは、リクエストを処理して元のクライアントにHTTPレスポンスを送り返すSPARQLプロトコル・サービスにHTTPリクエストを送ります。
別のドキュメントでは、RESTアーキテクチャ・スタイルのグラフのコレクションを管理する目的でHTTPオペレーションの用法を記述したSPARQL 1.1グラフ・ストアHTTPプロトコルを記述しています。
ドキュメントが、しなければならない(MUST)、してはならない(MUST NOT)、すべきである/する必要がある(SHOULD)、すべきでない/する必要がない(SHOULD NOT)、することができる/してもよい(MAY)、推奨される(RECOMMENDED)という単語を使用し、強調されたテキストとして出現するとき、RFC 2119[RFC2119]で記述されているとおりに解釈されなければなりません。
SPARQLプロトコルは、クエリと更新の、2つのオペレーションで構成されます。プロトコル・オペレーションは、次の組み合わせを定義します。
SPARQL 1.1プロトコルは、HTTP上に構築されます。リクエストとレスポンスに対するすべてのHTTPの要件に従わなければなりません(MUST)。
query
オペレーションquery
オペレーションは、サービスにSPARQLクエリを送り、そのクエリの結果を受け取るために用いられます。クエリ・オペレーションは、HTTP GETメソッドかHTTP POSTメソッドのいずれかで呼び出さなければなりません(MUST)。このオペレーションに対するクライアントのリクエストは、きっかり1つのSPARQLクエリ文字列(パラメータ名: query
)を含まなければならず(must)、0以上のデフォルト・グラフURI(パラメータ名: default-graph-uri
)と名前付きグラフURI(パラメータ名: named-graph-uri
)を含むことができます(may)。クエリ・リクエストに対するレスポンスは、クエリ形式[SPARQL]や内容交渉[RFC2616]に応じて、SPARQL XML結果フォーマット、SPARQL JSON結果フォーマット、SPARQL CSV/TSV結果フォーマット、RDFシリアル化のいずれかです。
HTTPメソッド | クエリ文字列パラメータ | リクエストのコンテンツ・タイプ | リクエストのメッセージ本文 | |
---|---|---|---|---|
GETによるクエリ | GET | query (exactly 1)default-graph-uri (0 or more)named-graph-uri (0 or more) |
なし | なし |
URLエンコードされたPOSTによるクエリ | POST | なし | application/x-www-form-urlencoded |
URL-encoded, ampersand-separated query parameters.query (exactly 1)default-graph-uri (0 or more)named-graph-uri (0 or more) |
POSTによる直接的なクエリ | POST | default-graph-uri (0 or more)named-graph-uri (0 or more) |
application/sparql-query |
Unencoded SPARQL query string |
query
リクエストのパラメータは、これらの3つのオプションのうちの1つで送らなければなりません(must)。
query
プロトコルのクライアントは、HTTP GETメソッドでプロトコル・リクエストを送ることができます(may)。GETメソッドを用いる場合、クライアントは、すべてのパラメータをURLパーセント・エンコーディング[RFC3986]し、それらを上記の名前を持つクエリ・パラメータ文字列として含まなければなりません(must)。
HTTPクエリ文字列のパラメータは、アンパサンド(&
)の文字で区切られていなければなりません(must)。クライアントには、クエリ文字列パラメータを任意の順序で含むことができます。
HTTPリクエストには、メッセージ本文が含まれていてはなりません(MUST NOT)。
query
プロトコル・クライアントは、URLエンコードされたパラメータにより、HTTP POSTメソッドでプロトコル・リクエストを送ることができます(may)。このメソッドを用いる場合、クライアントは、すべてのパラメータをURLパーセント・エンコーディング[RFC3986]し、上記の名前を持つapplication/x-www-form-urlencoded
メディア・タイプにより、それらをパラメータとしてリクエスト本文内に含まなければなりません(must)。パラメータは、アンパサンド(&
)で区切られていなければなりません(must)。クライアントには、パラメータを任意の順序で含むことができます。HTTPリクエストのコンテンツ・タイプ・ヘッダは、application/x-www-form-urlencoded
に設定しなければなりません(must)。
query
プロトコル・クライアントは、クエリを直接含め、HTTPリクエストのメッセージ本文としてコード化せずに、HTTP POSTメソッドでプロトコル・リクエストを送ることができます(may)。このアプローチを用いる場合、クライアントは、SPARQLクエリ文字列を、コード化せず、リクエストのメッセージ本文には他に何もない状態で含まなければなりません(must)。クライアントは、HTTPリクエストのコンテンツ・タイプ・ヘッダをapplication/sparql-query
に設定しなければなりません(must)。クライアントは、リクエストURIに、オプションのdefault-graph-uri
とnamed-graph-uri
のパラメータをHTTPクエリ文字列パラメータとして含めることができます(may)。ここで、UTF-8のみが有効なcharset(文字集合)であることに注意してください。
SPARQLクエリは、RDFデータセットに対して実行されます。クエリに対するRDFデータセットは、SPARQLプロトコルのdefault-graph-uri
パラメータとnamed-graph-uri
パラメータによるか、または、SPARQLクエリ文字列にFROM
キーワードおよびFROM NAMED
キーワードを用いるかのいずれかで指定できます。異なるRDFデータセットが、プロトコル・リクエストとSPARQLクエリ文字列の両方で指定されていれば、SPARQLサービスは、プロトコル・リクエストで与えられているRDFデータセットを用いてクエリを実行しなければなりません(must)。
プロトコル・クライアントによるRDFデータセットの指定がサービスで認められていない場合、サービスはHTTPレスポンス・コードが400のクエリを拒否できる(may)ことに注意してください。
RDFデータセットが、プロトコル・リクエストでもSPARQLクエリ文字列でも指定されていなければ、実装は、実装が定義したデフォルトRDFデータセットにクエリを実行できます(may)。
プロトコル・クライアントは、クライアントが利用できるレスポンス形式をリクエストするためにHTTP内容交渉[RFC2616]を使用すべきです(should)。可能なレスポンス形式の詳細に関しては、下記を参照してください。
SPARQLプロトコルは、オペレーションが成功か失敗かを示すために、HTTPで定義されているレスポンス・ステータス・コードを用います。各ステータス・コードの詳細な定義に関しては、HTTP仕様[RFC2616]を参照してください。プロトコル・サービスは、成功したクエリに2XX HTTPレスポンス・コードを用いるべきです(should)が、その代わりに、HTTPのように3XXレスポンス・コードを用いることも選択できます(may)。
2XXのレスポンスを持つ成功したクエリ・オペレーションのレスポンス本文は、次のいずれかです。
成功したクエリ・オペレーションに対するレスポンスのコンテンツ・タイプは、レスポンス本文の形式に対して定義されているメディア・タイプでなければなりません。
成功しなかったクエリ・オペレーションに適用できるHTTPレスポンス・コードには、次のものが含まれます。
失敗したクエリ・リクエストのレスポンス本文は、実装依存です。実装は、人間または機械(または両方)が読むことのできる、失敗したクエリ・リクエストに関する情報を提供するためにHTTP内容交渉を使用できます(may)。
プロトコル・サービスは、HTTPのように、その他の失敗の状況に4XXや5XXのHTTPレスポンス・コードを用いることもできます(may)。
update
オペレーション更新オペレーションは、サービスにSPARQL更新リクエストを送るために用いられます。更新オペレーションは、HTTP POSTメソッドを用いて呼び出されなければなりません(must)。このオペレーションのクライアントのリクエストには、きっかり1つのSPARQL更新リクエスト文字列(パラメータ名: update
)が含まれていなければならず(must)、0以上のデフォルト・グラフURI(パラメータ名: using-graph-uri
)と名前付きグラフURI(パラメータ名: using-named-graph-uri
)を含むことができます(may)。更新リクエストに対するレスポンスは、HTTP反応ステータス・コードにより、リクエストの成功または失敗を示します。
HTTPメソッド | クエリ文字列パラメータ | リクエストのコンテンツ・タイプ | リクエストのメッセージ本文 | |
---|---|---|---|---|
URLエンコードされたPOSTによる更新 | POST | なし | application/x-www-form-urlencoded |
URL-encoded, ampersand-separated query parameters.update (exactly 1)using-graph-uri (0 or more)using-named-graph-uri (0 or more) |
POSTによる直接的な更新 | POST | using-graph-uri (0 or more)using-named-graph-uri (0 or more) |
application/sparql-update |
Unencoded SPARQL update request string |
update
リクエストのパラメータは、これらの2つのオプションのうちの1つで送らなければなりません(must)。
update
プロトコル・クライアントは、パラメータのURLエンコーディングによってHTTP POSTメソッドで更新プロトコル・リクエストを送ることができます(may)。このアプローチを用いる場合、クライアントは、すべてのパラメータをURLパーセント・エンコーディング[RFC3986]し、上記の名前を持つapplication/x-www-form-urlencoded
メディア・タイプにより、それらをパラメータとしてリクエスト本文内に含まなければなりません(must)。パラメータは、アンパサンド(&
)で区切られていなければなりません(must)。クライアントには、パラメータを任意の順序で含むことができます。HTTPリクエストのコンテンツ・タイプ・ヘッダは、application/x-www-form-urlencoded
に設定しなければなりません(must)。
update
プロトコル・クライアントは、更新リクエストを直接含め、HTTPリクエストのメッセージ本文としてコード化せずに、HTTP POSTメソッドで更新プロトコル・リクエストを送ることができます(may)。このアプローチを用いる場合、クライアントは、SPARQL更新リクエスト文字列を、コード化せず、リクエストのメッセージ本文には他に何もない状態で含まなければなりません(must)。クライアントは、HTTPリクエストのコンテンツ・タイプ・ヘッダをapplication/sparql-update
に設定しなければなりません(must)。クライアントは、リクエストURIに、オプションのusing-graph-uri
とusing-named-graph-uri
のパラメータをHTTPクエリ文字列パラメータとして含めることができます(may)。
SPARQL更新リクエストは、グラフ・ストア(SPARQLサービスが管理するRDFグラフの可変コンテナ)に対して実行されます。SPARQL更新DELETE/INSERTオペレーション[UPDATE]のWHERE句は、RDFデータセットのデータにマッチし、それはグラフ・ストアのサブセットです。更新オペレーションに対するRDFデータセットは、USING
、USING NAMED
、および/またはWITH
キーワードを用いて、オペレーション文字列自身で指定するか、using-graph-uri
とusing-named-graph-uri
のパラメータによって指定するかのいずれかが可能です。
USING
、USING NAMED
、またはWITH
句を用いたオペレーションが含まれているSPARQL 1.1更新リクエストを伝えるためにこのプロトコルを用いる場合、using-graph-uri
またはusing-named-graph-uri
のパラメータを提供することはエラーです。
SPARQL更新プロセッサは、USING <g>
句がSPARQL 1.1更新リクエストのすべてのオペレーションに含まれているかのように、更新プロトコル・オペレーションの個々のusing-graph-uri=g
パラメータの発生に対応すべきです。同様に、SPARQL更新プロセッサは、USING NAMED <g>
句がSPARQL 1.1更新リクエストのすべてのオペレーションに含まれているかのように、更新プロトコル・オペレーションの個々のusing-named-graph-uri=g
パラメータの発生に対応すべきです。
SPARQLプロトコルは、オペレーションが成功か失敗かを示すために、HTTPで定義されているレスポンス・ステータス・コードを用います。各ステータス・コードの詳細な定義に関しては、HTTP仕様[RFC2616]を参照してください。プロトコル・サービスは、処理が成功した更新リクエストに2XX HTTPレスポンス・コードを用いるべきです(should)が、その代わりに、HTTPのように3XXレスポンス・コードを用いることも選択できます(may)。
成功した更新リクエストのレスポンス本文は、実装依存です。実装は、人間と機械の両方が読むことのできる、完了した更新リクエストに関する情報を提供するためにHTTP内容交渉を使用できます(may)
成功しなかった更新リクエストに対するHTTPレスポンス・コードは、次のとおりであるべきです。
失敗した更新リクエストのレスポンス本文は、実装依存です。実装は、人間または機械(または両方)が読むことのできる、失敗した更新リクエストに関する情報を提供するためにHTTP内容交渉を使用できます(may)。
プロトコル・サービスは、HTTPのように、その他の失敗の状況に4XXや5XXのHTTPレスポンス・コードを用いることもできます(may)。
SPARQLクエリのBASE
キーワードまたはSPARQL更新リクエスト文字列は、URI(Uniform Resource Identifier):一般的構文[RFC3986]の5.1.1項「コンテンツ内に組み込まれた基底URI」にあるとおり、相対IRIを解決するために用いられる基底IRIを定めます。SPARQLプロトコルは、クエリのURIを逆参照しないため、5.1.3項は当てはまりません。最後に、5.1.4項のとおり、SPARQLプロトコル・サービスは、自身の基底URIを定義しなければならず(must)、それはサービス・エンドポイントになりえます(may)。
以下のHTTPトレースの例では、いくつかの異なるシナリオにおけるquery
とupdate
のオペレーションの呼び出しを示します。次の方法で、完全なHTTPトレースから、いくつかのトレースの例を抽出しました。
query
ペレーションの例の場合、クエリの結果を含む、部分的なレスポンス本文のみを表示しています。次のSPARQLクエリ
PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?book ?who WHERE { ?book dc:creator ?who }
は、次のHTTPトレースで示しているとおり、HTTP GETでSPARQLクエリのサービス(http://www.example/sparql/)に伝えられます。
GET /sparql/?query=PREFIX%20dc%3A%20%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%3E%20%0ASELECT%20%3Fbook%20%3Fwho%20%0AWHERE%20%7B%20%3Fbook%20dc%3Acreator%20%3Fwho%20%7D%0A HTTP/1.1 Host: www.example User-agent: my-sparql-client/0.1
サービスから提供されたRDFデータセットに対するそのクエリ(そのSPARQLクエリのサービスによって実行された)は、次のクエリ結果を返します。
HTTP/1.1 200 OK Date: Fri, 06 May 2005 20:55:12 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: application/sparql-results+xml <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head> <variable name="book"/> <variable name="who"/> </head> <results> <result> <binding name="book"><uri>http://www.example/book/book5</uri></binding> <binding name="who"><bnode>r29392923r2922</bnode></binding> </result> ... </sparql>
次のSPARQLクエリ
PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?book ?who WHERE { ?book dc:creator ?who }
は、次のHTTPトレースで示しているとおり、SPARQLクエリのサービス(http://www.other.example/sparql/)に伝えられます。
GET /sparql/?query=PREFIX%20dc%3A%20%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%3E%20%0ASELECT%20%3Fbook%20%3Fwho%20%0AWHERE%20%7B%20%3Fbook%20dc%3Acreator%20%3Fwho%20%7D%0A&default-graph-uri=http%3A%2F%2Fwww.other.example%2Fbooks HTTP/1.1 Host: www.other.example User-agent: my-sparql-client/0.1
そのSPARQLクエリのサービスによって実行された、そのクエリ ― default-graph-uri
パラメータ(http://www.other.example/books)の値で識別されるRDFデータセットに対する ― は、次のクエリ結果を返します。
HTTP/1.1 200 OK Date: Fri, 06 May 2005 20:55:12 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: application/sparql-results+xml <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head> <variable name="book"/> <variable name="who"/> </head> ... </sparql>
次のSPARQLクエリ
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX myfoaf: <http://www.example/jose/foaf.rdf#> CONSTRUCT { myfoaf:jose foaf:depiction <http://www.example/jose/jose.jpg>. myfoaf:jose foaf:schoolHomepage <http://www.edu.example/>. ?s ?p ?o.} WHERE { ?s ?p ?o. myfoaf:jose foaf:nick "Jo". FILTER ( ! (?s = myfoaf:kendall && ?p = foaf:knows && ?o = myfoaf:edd ) && ! ( ?s = myfoaf:julia && ?p = foaf:mbox && ?o = <mailto:julia@mail.example> ) && ! ( ?s = myfoaf:julia && ?p = rdf:type && ?o = foaf:Person)) }
は、次のHTTPトレースで示しているとおり、SPARQLクエリのサービス(http://www.example/sparql/)に伝えられます。
GET /sparql/?query=EncodedQuery&default-graph-uri=http%3A%2F%2Fwww.example%2Fjose-foaf.rdf HTTP/1.1 Host: www.example User-agent: sparql-client/0.1 Accept: text/turtle, application/rdf+xml
すると、次のレスポンスが得られます。
HTTP/1.1 200 OK Date: Fri, 06 May 2005 20:55:11 GMT Server: Apache/1.3.29 (Unix) Connection: close Content-Type: text/turtle @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. @prefix foaf: <http://xmlns.com/foaf/0.1/>. @prefix myfoaf: <http://www.example/jose/foaf.rdf#>. myfoaf:jose foaf:name "Jose Jimenez"; foaf:depiction <http://www.example/jose/jose.jpg>; foaf:nick "Jo"; ...
注意: このメディア・タイプtext/turtleの登録に着手しましたが、この仕様の公表時点では完了していません。Turtle言語の最終的に登録されたメディア・タイプに関しては、http://www.w3.org/TR/turtleを参照してください。
次のSPARQLクエリ
PREFIX dc: <http://purl.org/dc/elements/1.1/> ASK WHERE { ?book dc:creator "J.K. Rowling"}
は、次のHTTPトレースで示しているとおり、SPARQLクエリのサービス(http://www.example/sparql/)に伝えられます。
GET /sparql/?query=EncodedQuery&default-graph-uri=http%3A%2F%2Fwww.example%2Fbooks HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
すると、次のレスポンスが得られます。
HTTP/1.1 200 OK Date: Fri, 06 May 2005 20:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: application/sparql-results+xml <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head></head> <boolean>true</boolean> </sparql>
次のSPARQLクエリ
PREFIX books: <http://www.example/book/> DESCRIBE books:book6
は、次で示しているとおり、SPARQLクエリのサービス(http://www.example/sparql/)に伝えられます。
GET /sparql/?query=EncodedQuery&default-graph-uri=http%3A%2F%2Fwww.example%2Fbooks HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
すると、次のレスポンスが得られます。
HTTP/1.1 200 OK Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: application/rdf+xml <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:books="http://www.example/book/" xmlns:dc="http://purl.org/dc/elements/1.1/" > <rdf:Description rdf:about="http://www.example/book/book6"> <dc:title>Example Book #6 </dc:title> </rdf:Description> </rdf:RDF>
次のSPARQLクエリ
PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?who ?g ?mbox WHERE { ?g dc:publisher ?who . GRAPH ?g { ?x foaf:mbox ?mbox } }
は、次で示しているとおり(読みやすいように改行付きで)、SPARQLクエリのサービス(http://www.example/sparql/)に伝えられます。
GET /sparql/?query=EncodedQuery&default-graph-uri=http%3A%2F%2Fwww.example%2Fpublishers &default-graph-uri=http%3A%2F%2Fwww.example%2Fmorepublishers&named-graph-uri=http%3A%2F%2Fyour.example%2Ffoaf-alice &named-graph-uri=http%3A%2F%2Fwww.example%2Ffoaf-bob&named-graph-uri=http%3A%2F%2Fwww.example%2Ffoaf-susan &named-graph-uri=http%3A%2F%2Fthis.example%2Fjohn%2Ffoaf Host: www.example User-agent: sparql-client/0.1
すると、次のレスポンスが得られます。
HTTP/1.1 200 OK Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: application/sparql-results+xml <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head> <variable name="who"/> <variable name="g"/> <variable name="mbox"/> </head> ... </sparql>
次のSPARQLクエリ
PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?who ?g ?mbox FROM <http://www.example/publishers> FROM NAMED <http://www.example/alice> FROM NAMED <http://www.example/bob> WHERE { ?g dc:publisher ?who . GRAPH ?g { ?x foaf:mbox ?mbox } }
は、次のHTTPトレースで示しているとおり、SPARQLクエリのサービス(http://www.example/sparql/)に伝えられます。
GET /sparql/?query=EncodedQuery HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
すると、次のレスポンスが得られます。
HTTP/1.1 200 OK Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: application/sparql-results+xml <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> ... </sparql>
次のSPARQLクエリ
PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?who ?g ?mbox FROM <http://www.example/publishers> FROM NAMED <http://www.example/john> FROM NAMED <http://www.example/susan> WHERE { ?g dc:publisher ?who . GRAPH ?g { ?x foaf:mbox ?mbox } }
は、次のHTTPトレースで示しているとおり、SPARQLクエリのサービス(http://www.example/sparql/)に伝えられます。
GET /sparql/?query=EncodedQuery&default-graph-uri=http%3A%2F%2Fwww.example%2Fmorepublishers &named-graph-uri=http%3A%2F%2Fwww.example%2Fbob&named-graph-uri=http%3A%2F%2Fwww.example%2Falice HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
このプロトコル・オペレーションには曖昧なRDFデータセットが含まれています。クエリで指定されているデータセットは、プロトコルで指定されたもの(default-graph-uri
とnamed-graph-uri
のパラメータにより)とは異なります。適合SPARQLプロトコル・サービスは、プロトコルで指定されているRDFデータセットにクエリを実行することで、この曖昧さを解決しなければなりません。
HTTP/1.1 200 OK Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: application/sparql-results+xml <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head> <variable name="who"/> <variable name="g"/> <variable name="mbox"/> </head> <results> <result> <binding name="who"> <literal>Bob Hacker</literal> </binding> <binding name="g"> <uri>http://www.example/bob</uri> </binding> <binding name="mbox"> <uri>mailto:bob@oldcorp.example</uri> </binding> </result> <result> <binding name="who"> <literal>Alice Hacker</literal> </binding> <binding name="g"> <uri>http://www.example/alice</uri> </binding> <binding name="mbox"> <uri>mailto:alice@work.example</uri> </binding> </result> </results> </sparql>
次の構文的に不正なSPARQLクエリ
PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name WHERE { ?x foaf:name ?name ORDER BY ?name }
は、次のHTTPトレースで示しているとおり、SPARQLクエリのサービス(http://www.example/sparql/)に伝えられます。
GET /sparql/?query=EncodedQuery&default-graph-uri=http%3A%2F%2Fwww.example%2Fmorepublishers HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
すると、次のエラーのレスポンスが得られます。
HTTP/1.1 400 Bad Request Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: text/plain; charset=UTF-8 4:syntax error, unexpected ORDER, expecting '}'
次のSPARQLクエリ
PREFIX bio: <http://bio.example/schema/#> SELECT ?valence FROM <http://another.example/protein-db.rdf> WHERE { ?x bio:protein ?valence } ORDER BY ?valence
は、次のHTTPトレースで示しているとおり、SPARQLクエリのサービス(http://www.example/sparql/)に伝えられます。
GET /sparql/?query=EncodedQuery&default-graph-uri=http%3A%2F%2Fanother.example%2Fprotein-db.rdf HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
すると、次のエラーのレスポンスが得られます。
HTTP/1.1 500 Internal Server Error Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: text/plain SPARQL Processing Service: Query Request Refused Your request could not be processed because http://another.example/protein-db.rdf could not be retrieved within the time alloted.
一部のSPARQLクエリ(恐らく、システムにより生成された)は、2.1.1 GETによるqueryで記述しているHTTP GETバインディングで確実に伝えることができる長さを超えているかもしれません。その場合は、2.1.2 URLエンコードされたパラメータを用いたPOSTによるqueryで記述しているPOSTバインディングを使用できます。次のSPARQLクエリ
PREFIX : <http://www.w3.org/2002/12/cal/icaltzd#> PREFIX Chi: <http://www.w3.org/2002/12/cal/test/Chiefs.ics#> PREFIX New: <http://www.w3.org/2002/12/cal/tzd/America/New_York#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> SELECT ?summary WHERE { { Chi:D603E2AC-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-09-08T16:00:00"^^New:tz; :dtstamp "2002-09-06T03:09:27Z"^^xsd:dateTime; :dtstart "2002-09-08T13:00:00"^^New:tz; :summary ?summary; :uid "D603E2AC-C1C9-11D6-9446-003065F198AC" . } UNION { Chi:D603E90B-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-09-15T16:00:00"^^New:tz; :dtstamp "2002-09-06T03:10:19Z"^^xsd:dateTime; :dtstart "2002-09-15T13:00:00"^^New:tz; :summary ?summary; :uid "D603E90B-C1C9-11D6-9446-003065F198AC" . } UNION { Chi:D603ED6E-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-09-22T16:00:00"^^New:tz; :dtstamp "2002-09-06T03:11:05Z"^^xsd:dateTime; :dtstart "2002-09-22T13:00:00"^^New:tz; :summary ?summary; :uid "D603ED6E-C1C9-11D6-9446-003065F198AC" . } UNION { Chi:D603F18C-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-09-29T16:00:00"^^New:tz; :dtstamp "2002-09-06T03:15:46Z"^^xsd:dateTime; :dtstart "2002-09-29T13:00:00"^^New:tz; :summary ?summary; :uid "D603F18C-C1C9-11D6-9446-003065F198AC" . } UNION { Chi:D603F5B7-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-11-04"^^xsd:date; :dtstamp "2002-09-06T03:12:53Z"^^xsd:dateTime; :dtstart "2002-11-03"^^xsd:date; :summary ?summary; :uid "D603F5B7-C1C9-11D6-9446-003065F198AC" . } UNION { Chi:D603F9D7-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-11-10T20:15:00"^^New:tz; :dtstamp "2002-09-06T03:14:12Z"^^xsd:dateTime; :dtstart "2002-11-10T17:15:00"^^New:tz; :summary ?summary; :uid "D603F9D7-C1C9-11D6-9446-003065F198AC" . } UNION { Chi:D604022C-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-11-17T17:00:00"^^New:tz; :dtstamp "2002-09-06T03:14:51Z"^^xsd:dateTime; :dtstart "2002-11-17T14:00:00"^^New:tz; :summary ?summary; :uid "D604022C-C1C9-11D6-9446-003065F198AC" . } UNION { Chi:D604065C-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-10-06T19:05:00"^^New:tz; :dtstamp "2002-09-06T03:16:54Z"^^xsd:dateTime; :dtstart "2002-10-06T16:05:00"^^New:tz; :summary ?summary; :uid "D604065C-C1C9-11D6-9446-003065F198AC" . } UNION { Chi:D6040A7E-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-10-13T19:15:00"^^New:tz; :dtstamp "2002-09-06T03:17:51Z"^^xsd:dateTime; :dtstart "2002-10-13T16:15:00"^^New:tz; :summary ?summary; :uid "D6040A7E-C1C9-11D6-9446-003065F198AC" . } UNION { Chi:D6040E96-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-10-20T16:00:00"^^New:tz; :dtstamp "2002-09-06T03:18:32Z"^^xsd:dateTime; :dtstart "2002-10-20T13:00:00"^^New:tz; :summary ?summary; :uid "D6040E96-C1C9-11D6-9446-003065F198AC" . } UNION { Chi:D6041270-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-10-27T17:00:00"^^New:tz; :dtstamp "2002-09-06T03:19:15Z"^^xsd:dateTime; :dtstart "2002-10-27T14:00:00"^^New:tz; :summary ?summary; :uid "D6041270-C1C9-11D6-9446-003065F198AC" . } UNION { Chi:D6041673-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-11-24T20:05:00"^^New:tz; :dtstamp "2002-09-06T03:22:09Z"^^xsd:dateTime; :dtstart "2002-11-24T17:05:00"^^New:tz; :summary ?summary; :uid "D6041673-C1C9-11D6-9446-003065F198AC" . } UNION { Chi:D6041A73-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-12-01T17:00:00"^^New:tz; :dtstamp "2002-09-06T03:22:52Z"^^xsd:dateTime; :dtstart "2002-12-01T14:00:00"^^New:tz; :summary ?summary; :uid "D6041A73-C1C9-11D6-9446-003065F198AC" . } UNION { Chi:D60421EF-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-12-08T17:00:00"^^New:tz; :dtstamp "2002-09-06T03:24:04Z"^^xsd:dateTime; :dtstart "2002-12-08T14:00:00"^^New:tz; :summary ?summary; :uid "D60421EF-C1C9-11D6-9446-003065F198AC" . } UNION { Chi:D6042660-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-12-15T20:05:00"^^New:tz; :dtstamp "2002-09-06T03:25:03Z"^^xsd:dateTime; :dtstart "2002-12-15T17:05:00"^^New:tz; :summary ?summary; :uid "D6042660-C1C9-11D6-9446-003065F198AC" . } UNION { Chi:D6042A93-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-12-22T17:00:00"^^New:tz; :dtstamp "2002-09-06T03:25:47Z"^^xsd:dateTime; :dtstart "2002-12-22T14:00:00"^^New:tz; :summary ?summary; :uid "D6042A93-C1C9-11D6-9446-003065F198AC" . } UNION { Chi:D6042EDF-C1C9-11D6-9446-003065F198AC a :Vevent; :dtend "2002-12-28T21:00:00"^^New:tz; :dtstamp "2002-09-06T03:26:51Z"^^xsd:dateTime; :dtstart "2002-12-28T18:00:00"^^New:tz; :summary ?summary; :uid "D6042EDF-C1C9-11D6-9446-003065F198AC" . } }
は、次のHTTPトレースで示しているとおり、SPARQLクエリのサービス(http://www.example/sparql/)に伝えられます。
POST /sparql/ HTTP/1.1 Host: www.example User-agent: sparql-client/0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 9461 query=EncodedQuery&default-graph-uri=http%3A%2F%2Fanother.example%2Fcalendar.rdf
すると、次のレスポンスが得られます。
HTTP/1.1 200 OK Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: application/sparql-results+xml <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head> <variable name="summary"/> </head> <results> <result> <binding name="summary"> <literal>Chiefs vs. Cleveland @ Cleveland Stadium</literal> </binding> </result> <result> <binding name="summary"> <literal>Chiefs vs. Jacksonville @ Arrowhead Stadium</literal> </binding> </result> <result> <binding name="summary"> <literal>Chiefs vs. New England @ Gillette Stadium</literal> </binding> </result> ... <result> <binding name="summary"> <literal>Chiefs vs. Oakland @ Network Associates Coliseum</literal> </binding> </result> </results> </sparql>
SPARQLクエリは、2.1.3 POSTによる直接的なqueryで記述しているように、URLエンコーディングなしに直接POSTすることもできます。前の例で用いた同じクエリは、次のHTTPトレースで示しているとおり、SPARQLクエリのサービス(http://www.example/sparql/)に伝えられます。
POST /sparql/?default-graph-uri=http%3A%2F%2Fanother.example%2Fcalendar.rdf HTTP/1.1 Host: www.example User-agent: sparql-client/0.1 Content-Type: application/sparql-query UnencodedQuery
すると、前の例と同じレスポンスが得られます。
SPARQLクエリは、国際化した文字や文字集合を含むことができます。次のSPARQLクエリ
PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX 食: <http://www.w3.org/2001/sw/DataAccess/tests/data/i18n/kanji.ttl#> SELECT ?name ?food WHERE { [ foaf:name ?name ; 食:食べる ?food ] . }
は、次のHTTPトレースで示しているとおり、SPARQLクエリのサービス(http://www.example/sparql/)に伝えられます。
GET /sparql/?query=PREFIX%20foaf%3A%20%3Chttp%3A%2F%2Fxmlns.com%2Ffoaf%2F0.1%2F%3E%0APREFIX%20%E9%A3%9F%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2001%2Fsw%2FDataAccess%2Ftests%2Fdata%2Fi18n%2Fkanji.ttl%23%3E%0ASELECT%20%3Fname%20%3Ffood%20%0AWHERE%20%7B%20%5B%20foaf%3Aname%20%3Fname%20%3B%20%E9%A3%9F%3A%E9%A3%9F%E3%81%B9%E3%82%8B%20%3Ffood%20%5D%20.%20%7D Host: www.example User-agent: sparql-client/0.1
HTTP/1.1 200 OK Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) Connection: close Content-Type: application/sparql-results+xml <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> ... </sparql>
次のリクエストの例は、INSERT DATA { <a> <p> <b> }
というクエリに対してhttp://localhost:8888/test
に送られたリクエストのシリアル化で、URLエンコードされたパラメータ形式を用いると、下に示しているようになります。
POST /test HTTP/1.1 Host: localhost:8888 Accept: text/plain Content-Length: 62 Content-Type: application/x-www-form-urlencoded update=INSERT%20DATA%20%7B%20%3Ca%3E%20%3Cp%3E%20%3Cb%3E%20%7D
更新リクエストは、application/sparql-update
というコンテンツ・タイプを持つPOSTリクエストとして送ることができます。
POST /test HTTP/1.1 Host: localhost:8888 Accept: */* Content-Type: application/sparql-update Content-Length: 27 INSERT DATA { <a> <p> <b> }
更新リクエストに対するデータセットは、using-graph-uri
とusing-named-graph-uri
のパラメータを用いて指定できます。以下に、http://localhost:8888/test
に送られたリクエストの例のシリアル化と、デフォルト・グラフhttp://localhost:8888/people
を持つデータセットの指定を示します。
POST /test?using-graph-uri=http%3A%2F%2Flocalhost%3A8888%2Fpeople HTTP/1.1 Host: localhost:8888 Accept: */* Content-Type: application/sparql-update Content-Length: 136 PREFIX foaf: <http://xmlns.com/foaf/0.1/> DELETE { ?person ?property ?value } WHERE { ?person ?property ?value ; foaf:givenName 'Fred' }
多重オペレーションのシーケンスは、「;」(セミコロン)で区切って、1つのリクエストに含むことができます。クエリに対してhttp://localhost:8888/test
に送られたリクエストの例のシリアル化である
DELETE DATA { <a> <p> <old> } ; INSERT DATA { <a> <p> <new> }
は、URLエンコードされたパラメータ形式を用いると、下に示しているようになります。
POST /test HTTP/1.1 Host: localhost:8888 Accept: */* Content-Type: application/x-www-form-urlencoded Content-Length: 130 update=DELETE%20DATA%20%7B%20%3Ca%3E%20%3Cp%3E%20%3Cold%3E%20%7D%20%3B%0AINSERT%20DATA%20%7B%20%3Ca%3E%20%3Cp%3E%20%3Cnew%3E%20%7D
URLエンコードされたパラメータを持つ更新リクエストをPOSTする場合、using-graph-uri
とusing-named-graph-uri
のデータセット・パラメータは、シリアル化されたリクエストを持つPOSTの本文で指定されます。以下に、クエリに対してhttp://localhost:8888/test
に送られた、リクエストの例のシリアル化である
PREFIX foaf: <http://xmlns.com/foaf/0.1/> INSERT { GRAPH <http://localhost:8888/people> { ?person ?property ?value } } WHERE { GRAPH ?g { ?person ?property ?value ; foaf:givenName 'Fred' } }
と、http://localhost:8888/alice/foaf.rdfとhttp://localhost:8888/eve/foaf.rdfの名前付きグラフを持つデータセットの指定を示します。
POST /test HTTP/1.1 Host: localhost:8888 Accept: */* Content-Type: application/x-www-form-urlencoded Content-Length: 130 using-named-graph-uri=http%3A%2F%2Flocalhost%3A8888%2Falice%2Ffoaf.rdf&using-named-graph-uri=http%3A%2F%2Flocalhost%3A8888%2Feve%2Ffoaf.rdf&update=PREFIX%20foaf%3A%20%3Chttp%3A%2F%2Fxmlns.com%2Ffoaf%2F0.1%2F%3E%0AINSERT%20%7B%20GRAPH%20%3Chttp%3A%2F%2Flocalhost%3A8888%2Fpeople%3E%20%7B%20%3Fperson%20%3Fproperty%20%3Fvalue%20%7D%20%7D%0AWHERE%20%7B%20GRAPH%20%3Fg%20%7B%20%3Fperson%20%3Fproperty%20%3Fvalue%20%3B%20foaf%3AgivenName%20%27Fred%27%20%7D%20%7D
以下に、http://localhost:8888/test
に送られた、リクエストの例のシリアル化と、http://localhost:8888/alice/foaf.rdf
とhttp://localhost:8888/eve/foaf.rdf
の名前付きグラフを持つデータセットの指定を示します。
POST /test?using-named-graph-uri=http%3A%2F%2Flocalhost%3A8888%2Falice%2Ffoaf.rdf&using-named-graph-uri=http%3A%2F%2Flocalhost%3A8888%2Feve%2Ffoaf.rdf HTTP/1.1 Host: localhost:8888 Accept: */* Content-Type: application/sparql-update Content-Length: 190 PREFIX foaf: <http://xmlns.com/foaf/0.1/> INSERT { GRAPH <http://localhost:8888/people> { ?person ?property ?value } } WHERE { GRAPH ?g { ?person ?property ?value ; foaf:givenName 'Fred' } }
SPARQLプロトコル・サービスに対するDoS攻撃(denial-of-service attack)の原因となる可能性が少なくとも2つありえます。まず最初に、制約が不足しているクエリは、非常に多くの結果をもたらす可能性があり、これらを、処理したり、まとめたり、返したりするために大きなコンピュータ資源の消費を必要とするかもしれません。別のありえる原因は、非常に複雑な――情報源の大きさ、検索すべき資源の数、または、サイズと数の組み合わせのいずれかのせいで――RDFデータセット記述を含むクエリで、サービスは、帯域幅、CPU、または補助記憶装置を含む資源の大きな消費なしには、その記述をまとめられないかもしれません。そのような消費が、事実上、DoS攻撃を引き起こす場合もありえます。SPARQLプロトコル・サービスは、検索する資源、または、外部資源を検索する割合に制限を課すことができます(may)。SPARQLクエリ処理サービスには、他にもDoS攻撃の原因があるかもしれません。
SPARQLプロトコル・サービスは、クライアントの代わりに他の元サーバにHTTPリクエストを行えるため、他のサイトやサービスに対する攻撃の進路として使用されるかもしれません。したがって、SPARQLプロトコル・サービスが、事実上、サード・パーティー・クライアントのプロキシとして動作することがありえます。このようなサービスは、検索する資源、または、外部資源を検索できる割合に制限を課すことができます(may)。SPARQLプロトコル・サービスは、サード・パーティーの元サーバやサービスに関するクライアントのリクエストのトレースを容易にするような方法で、そのログを取ることができます(may)。
SPARQLプロトコル・サービスは、これらや他の費用のかかる(そうでなければ危険な)クエリを検出するか、時間またはメモリの限度をクエリに課すか、DoS攻撃に対する当該サービスの(また、他のサービスの)脆弱性を減少させるために他の制限を課すかを選択できます(may)。これらは、このようなクエリ・リクエストの処理を拒否することもできます(may)。
SPARQLプロトコル・サービスは、更新オペレーションにより、基礎となるデータを削除、挿入、変更できます。悪意があったり破壊的であるような更新を防ぐために、実装は、更新オペレーションを実行しないことも選択できます。あるいは、実装は、更新オペレーションが承認されずに呼び出されること防ぐために、HTTP認証メカニズムやその他の実装で定義されているメカニズムの使用を選択することができます。
異なるIRIが同じ外観を持っているかもしれません。異なるスクリプトの文字が、同じに見えるかもしれません(キリル文字の「о」はラテン文字の「o」と同じに見えるかもしれません)。結合文字が後続する文字は、別の文字と同じ視覚表現を持っているかもしれません(結合アキュート・アクセントが後続するラテン小文字Eは、アキュート付きラテン小文字Eと同じ視覚的表現を持っています)。SPARQLのユーザは、注意してデータ中のIRIにマッチするIRIを持つクエリを構築しなければなりません。類似している文字のマッチングに関する詳細は、Unicodeセキュリティに関する留意点 [UNISEC]およびIRI(Internationalized Resource Identifiers) [RFC3987]の8項にあります。
SPARQL 1.1プロトコル(このドキュメント)の各部のステータスは次のとおりです。
query
オペレーションまたはupdate
オペレーションのいずれかを実装しなければなりません(must)。query
とupdate
の両方のオペレーションを実装できます。この仕様は、2008年1月のRDF用SPARQLプロトコルを拡張、更新したものです。重要な変更点は次のとおりです。