SPARQL 1.2プロトコル

W3C作業草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/WD-sparql12-protocol-20260426/
最新公開バージョン:
https://www.w3.org/TR/sparql12-protocol/
最新編集者草案:
https://w3c.github.io/sparql-protocol/spec/
履歴:
https://www.w3.org/standards/history/sparql12-protocol/
コミット履歴
テストスイート:
https://w3c.github.io/rdf-tests/
最新の勧告:
https://www.w3.org/TR/2013/REC-sparql11-protocol-20130321
編集者:
Andy Seaborne
Ruben Taelman
Gregory Williams
Thomas Pellissier Tanon
元編集者:
Lee Feigenbaum
Gregory Todd Williams
Kendall Grant Clark
Elias Torres
フィードバック:
GitHub w3c/sparql-protocolプルリクエスト新しい課題未解決の課題
public-rdf-star-wg@w3.org 宛に、件名行を[sparql12-protocol] … メッセージのトピック …として送信してください(アーカイブ

要約

SPARQL Protocol and RDF Query Language(SPARQL)は、RDFのためのクエリ言語およびプロトコルです。この文書はSPARQLプロトコルを規定します。これは、 SPARQLクエリおよび更新をSPARQL処理サービスへ伝達し、その結果をHTTP経由で、 それらを要求したエンティティへ返す手段を説明します。このプロトコルは、W3C SPARQL Working Groupによって開発されました。これは、Semantic Web Activityの一部であり、 活動声明で説明されています。

この文書のステータス

この節では、公開時点におけるこの 文書のステータスを説明します。現在のW3C 公開物およびこの技術報告の最新改訂の一覧は、 W3C標準および草案 インデックスで確認できます。

この仕様は、 RDF Star Working Groupにより、形式および正誤表に関する 仕様更新の一部として公開されています。

この文書は、RDF & SPARQL Working Groupにより、 勧告 トラックを使用する作業草案として公開されました。

作業草案としての公開は、 W3Cおよびそのメンバーによる承認を意味しません。

これは草案文書であり、いつでも他の文書によって更新、置換、または廃止される可能性があります。 この文書を作業中のもの以外として引用することは不適切です。 今後予定される勧告への更新には、 新機能が組み込まれる可能性があります。

この文書は、 W3C 特許 ポリシーの下で運営されるグループによって作成されました。 W3Cは、 グループの成果物に関連して行われた特許 開示の公開一覧を管理しています。 そのページには、特許を開示するための手順も含まれています。個人が、 その個人が必須クレームを含むと考える 特許について実際の知識を有する場合、その情報を W3C特許ポリシーの第6節に従って 開示しなければなりません。

この文書は、 2025年8月18日版W3Cプロセス文書に準拠します。

1. 導入

この文書は、SPARQL 1.2プロトコル、すなわちSPARQLクエリおよび更新をクライアントから SPARQLプロセッサへ伝達する手段について説明します。SPARQLプロトコルは、 SPARQL 1.2クエリ言語および SPARQL 1.2 更新との互換性を考慮して設計されています。この文書は主に、 SPARQLクエリおよび更新サービスならびにクライアントの実装に関心のあるソフトウェア開発者を対象としています。

SPARQLプロトコルは、2つのHTTP操作から構成されます。SPARQLクエリ言語のクエリを実行するための クエリ操作と、SPARQL更新言語のリクエストを実行するための更新 操作です。SPARQLプロトコル・クライアントはHTTPリクエストを SPARQLプロトコル・サービスへ送信し、そのサービスがリクエストを処理して、送信元クライアントへ HTTPレスポンスを返します。

別の文書では、RESTアーキテクチャスタイルにおいてグラフの集合を管理する目的で HTTP操作を使用する方法を説明するSPARQL 1.2グラフストア プロトコルについて説明しています。

1.1 文書の規約

この文書でmustmust notshouldshould not、 およびmayという語を使用し、それらの語が強調テキストとして現れる場合、 それらは[RFC2119]で説明されているように 解釈されなければなりません。

1.2 用語

SPARQLプロトコル・クライアント
HTTP Semantics [RFC9110]の 第3.3節 接続、 クライアント、および サーバーで定義されるHTTPクライアントであり、 SPARQLプロトコル操作のためにHTTPリクエストを送信するものです。(別名: クライアント。)
RFC 9110 [RFC9110]で定義されるHTTPクライアントであり、SPARQL プロトコル操作のためにHTTPリクエストを送信するものです。(別名: クライアント
SPARQLプロトコル・サービス
HTTPリクエストを処理し、SPARQLプロトコル操作のためにHTTPレスポンスを返すHTTPサーバーです。 SPARQLプロトコル・サービスがリクエストを待ち受けるURIは、一般に SPARQLエンドポイントとして知られています。(別名: サービス
SPARQLエンドポイント
SPARQLプロトコル・サービスがSPARQLプロトコル・クライアントからのリクエストを待ち受けるURIです。
SPARQLプロトコル操作
この文書で定義されるプロトコルに適合するHTTPリクエストおよびレスポンスです。
RDFデータセット
SPARQL 1.2クエリ言語で定義される、 デフォルトグラフと0個以上の名前付きグラフの集合です。

2. SPARQLプロトコル操作

SPARQLプロトコルは、queryおよびupdateの2つの操作から構成されます。プロトコル操作は、次の組み合わせを定義します:

SPARQL 1.2プロトコルはHTTPの上に構築されています。リクエストおよびレスポンスに関するすべてのHTTP要件に must従わなければなりません。

2.1 バージョン告知

クエリまたは更新操作をエンドポイントへ送信する場合、この操作のバージョンは、 構文上のversionディレクティブを使用するか、 またはversionパラメーター(使用されるHTTPメソッドに依存します)を渡すことによって告知MAYできます。

バージョンが構文とパラメーターの両方で示される場合、 それらは同じであることが期待されます。 それらが異なる場合、 パーサーはパラメーターからのバージョンを使用し、不一致に関する警告を発することがあります。

古いパーサーとの互換性を可能な限り広く維持するため、 SPARQL 1.2固有の機能を使用するクエリのみが バージョンを告知することを推奨されます(すなわち、SPARQL 1.2固有の機能を 使用しないクエリについては、バージョンを告知することは推奨されません)。

操作へのレスポンスも、バージョン告知を含むことがMAYあります。 SPARQL結果バージョンまたはRDFバージョンは、リクエストで指定された 操作バージョンと必ずしも同じではありません。 代わりに、バージョン告知は、レスポンスとその形式、たとえばSPARQL 1.2クエリ結果JSON 形式またはRDF 1.2 Turtleに依存します。

バージョン文字列の値については、RDF 1.2 Concepts and Abstract Data Modelで説明されています。

2.2 クエリ操作

query操作は、SPARQLクエリをサービスへ送信し、そのクエリの結果を受け取るために使用されます。 query操作は、HTTP GETまたはHTTP POSTメソッドのいずれかで呼び出されなければなりません。 この操作に対するクライアントリクエストは、SPARQLクエリ文字列を正確に1つ (パラメーター名: query)含まなければならず、 また、バージョン(パラメーター名: version)、 0個以上のデフォルトグラフURI(パラメーター名: default-graph-uri)および名前付きグラフ URI(パラメーター名: named-graph-uri)を含むことができます。

クエリリクエストへのレスポンスは、クエリ形式および コンテンツネゴシエーション [RFC9110]に応じて、 SPARQL ResultsまたはRDFに対応する形式でなければなりません。 そのような形式の例は次のとおりです:

  HTTPメソッド クエリ文字列パラメーター リクエストのContent Type リクエストメッセージ本文
GETによるquery GET query(正確に1)
version(0または1)
default-graph-uri(0以上)
named-graph-uri(0以上)
なし なし
URLエンコードPOSTによるquery POST なし application/x-www-form-urlencoded URLエンコードされ、アンパサンドで区切られたクエリパラメーター。
query(正確に1)
version(0または1)
default-graph-uri(0以上)
named-graph-uri(0以上)
直接POSTによるquery POST default-graph-uri(0以上)
named-graph-uri(0以上)
application/sparql-query(任意のversionメディア型 パラメーター付き) エンコードされていないSPARQLクエリ文字列

queryリクエストのパラメーターは、次の3つの選択肢のいずれかに従って送信されなければなりません:

2.2.1 GETによるquery

プロトコル・クライアントは、HTTP GETメソッドを介してプロトコルリクエストを送信mayできます。GETメソッドを使用する場合、 クライアントはすべてのパラメーターをURL パーセントエンコード し、それらを上記で与えられた名前のクエリパラメーター文字列 [RFC3986] として含めなければなりません。

HTTPクエリ文字列パラメーターは、アンパサンド (&)文字で区切られなければなりません。クライアントはクエリ文字列パラメーターを任意の順序で含めてもよいです。

HTTPリクエストはメッセージ本文を含んではなりません。

2.2.2 URLエンコードされたパラメーターを伴うPOSTによるquery

プロトコル・クライアントは、パラメーターをURLエンコードすることにより、HTTP POSTメソッドを介して プロトコルリクエストを送信mayできます。この方法を使用する場合、クライアントはすべてのパラメーターをURL パーセントエンコード [RFC3986] し、 上記で与えられた名前を用いて、application/x-www-form-urlencodedメディア型を介して リクエスト本文内のパラメーターとして含めなければなりません。パラメーターは アンパサンド(&)文字で区切られなければなりません。クライアントは パラメーターを任意の順序で含めてもよいです。HTTPリクエストのContent-Typeヘッダーは application/x-www-form-urlencodedに設定されなければなりません。

2.2.3 直接POSTによる query

プロトコル・クライアントは、クエリをHTTPリクエストメッセージ本文として直接かつエンコードせずに含めることにより、 HTTP POSTメソッドを介してプロトコルリクエストを送信mayできます。この 方法を使用する場合、クライアントはSPARQLクエリ文字列をエンコードせずに含め、それ以外は何も リクエストのメッセージ本文に含めてはなりません。クライアントはHTTPリクエストのContent-Type ヘッダーをapplication/sparql-queryに設定しなければならず、任意の versionメディア型パラメーターを付けてもよいです。クライアントは、任意の default-graph-uriおよびnamed-graph-uri パラメーターを、リクエストURI内のHTTPクエリ文字列パラメーターとして含めてもよいです。ここで有効な charsetはUTF-8のみであることに注意してください。

2.2.4 RDFデータセットの指定

SPARQLクエリはRDFデータセットに対して実行されます。 クエリのRDFデータセットは、SPARQLプロトコル内の default-graph-uriおよびnamed-graph-uriパラメーターを介して指定するか、 SPARQLクエリ文字列内でFROMおよびFROM NAMED キーワードを使用して指定できます。異なるRDFデータセットがプロトコルリクエストとSPARQLクエリ 文字列の両方で指定された場合、SPARQLサービスはプロトコルリクエストで与えられたRDF データセットを使用してクエリを実行しなければなりません。

サービスがプロトコル・クライアントによるRDFデータセットの指定を許可しない場合、 サービスはHTTPレスポンスコード400でクエリを拒否してもよいことに注意してください。

RDFデータセットがプロトコルリクエストまたはSPARQLクエリ文字列のいずれでも指定されていない場合、 実装は実装定義のデフォルトRDFデータセットに対してクエリを実行してもよいです。

2.2.5 受け入れられるレスポンス形式

プロトコル・クライアントは、クライアントが処理できるレスポンス形式を要求するために、HTTP コンテンツネゴシエーション [RFC9110] を 使用すべきです。潜在的なレスポンス形式の詳細については下記を参照してください。

2.2.6 成功レスポンス

SPARQLプロトコルは、操作の成功または失敗を示すためにHTTPで定義されたレスポンスステータスコードを使用します。 各ステータスコードの詳細な定義については、HTTP仕様 [RFC9110] を参照してください。 プロトコル・サービスは、成功したクエリに対して2XX HTTPレスポンスコードを使用 shouldしますが、HTTPに従って代わりに3XXレスポンスコードを使用することを 選択mayできます。

2XXレスポンスを伴う成功したクエリ操作のレスポンス本文は、次のいずれかです:

成功したクエリ操作へのレスポンスのContent-Typeは、レスポンス本文の形式に対して定義されたメディア型でなければなりません。

2.2.7 失敗レスポンス

失敗したクエリ操作に適用されるHTTPレスポンスコードには、次のものが含まれます:

  • リクエストで供給されたSPARQLクエリがSPARQL文法で定義された言語における合法な文字列でない場合は400; または、
  • サービスがクエリの実行に失敗した場合は500。SPARQLプロトコル・サービスは、クエリの実行を拒否する場合にも 500レスポンスコードを返すことがあります。このレスポンスは、 サーバーが後続の同一リクエストを処理するかどうかを示すものではありません。

失敗したクエリリクエストのレスポンス本文は実装定義です。実装は HTTPコンテンツネゴシエーションを使用して、失敗したクエリリクエストに関する、人間可読または機械処理可能な (またはその両方の)情報を提供してもよいです。

プロトコル・サービスは、HTTPに従って、その他の失敗条件に対して他の4XXまたは5XX HTTPレスポンスコードを使用してもよいです。

2.3 更新操作

update操作は、SPARQL更新リクエストをサービスへ送信するために使用されます。update 操作は、HTTP POSTメソッドを使用して呼び出されなければなりません。この操作に対する クライアントリクエストは、SPARQL更新リクエスト文字列を正確に1つ(パラメーター名: update)含まなければならず、バージョン(パラメーター名: version)ならびに0個以上のデフォルトグラフ URI(パラメーター名: using-graph-uri)および名前付きグラフURI(パラメーター名: using-named-graph-uri)を含むことができます。更新リクエストへのレスポンスは、 HTTPレスポンスステータスコードを介してリクエストの成功または失敗を示します。

  HTTPメソッド クエリ文字列パラメーター リクエストのContent Type リクエストメッセージ本文
URLエンコードPOSTによるupdate POST なし application/x-www-form-urlencoded URLエンコードされ、アンパサンドで区切られたクエリパラメーター。
version(0または1)
update(正確に1)
using-graph-uri(0以上)
using-named-graph-uri(0以上)
直接POSTによるupdate POST using-graph-uri(0以上)
using-named-graph-uri(0以上)
application/sparql-update(任意のversionメディア型 パラメーター付き) エンコードされていないSPARQL更新リクエスト文字列

updateリクエストのパラメーターは、次の2つの選択肢のいずれかに従って送信されなければなりません:

2.3.1 URLエンコードされたパラメーターを伴うPOSTによるupdate

プロトコル・クライアントは、パラメーターをURLエンコードすることにより、HTTP POSTメソッドを介して 更新プロトコルリクエストを送信mayできます。この方法を使用する場合、クライアントはすべてのパラメーターをURL パーセント エンコードし、上記で与えられた名前を用いて、 application/x-www-form-urlencodedメディア型を介してリクエスト本文内のパラメーターとして含めなければなりません。 パラメーターはアンパサンド(&)文字で区切られなければなりません。クライアントは パラメーターを任意の順序で含めてもよいです。HTTPリクエストのContent-Typeヘッダーは application/x-www-form-urlencodedに設定されなければなりません。

2.3.2 直接POSTによる update

プロトコル・クライアントは、更新リクエストをHTTPリクエストメッセージ本文として直接かつエンコードせずに含めることにより、 HTTP POSTメソッドを介して更新プロトコルリクエストを送信mayできます。 この方法を使用する場合、クライアントはSPARQL更新リクエスト文字列を エンコードせずに含め、それ以外は何もリクエストのメッセージ本文に含めてはなりません。クライアントは HTTPリクエストのContent-Typeヘッダーをapplication/sparql-updateに設定しなければならず、 任意のversionメディア型パラメーターを付けてもよいです。クライアントは、 任意のusing-graph-uriおよび using-named-graph-uriパラメーターを、リクエストURI内のHTTPクエリ文字列パラメーターとして含めてもよいです。

2.3.3 RDFデータセットの指定

SPARQL更新リクエストは、SPARQLサービスによって管理されるRDFグラフの可変コンテナーであるGraph Storeに対して実行されます。 SPARQL更新DELETE/INSERT操作WHERE句は、 Graph StoreのサブセットであるRDFデータセット内のデータに対して照合されます。 更新操作のRDFデータセットは、操作文字列自体の中でUSINGUSING NAMED、および/または WITHキーワードを使用して指定することも、 using-graph-uriおよびusing-named-graph-uriパラメーターを介して指定することもできます。

USINGUSING NAMED、またはWITH句を使用する 操作を含むSPARQL 1.2更新リクエストをこのプロトコルで伝達する場合に、 using-graph-uriまたはusing-named-graph-uri パラメーターを供給することはエラーです。

SPARQL更新プロセッサは、更新プロトコル操作におけるusing-graph-uri=g パラメーターの各出現を、SPARQL 1.2更新リクエスト内のすべての操作に USING <g>句が含まれているかのように扱うべきです。同様に、SPARQL更新プロセッサは、 更新プロトコル操作におけるusing-named-graph-uri=gパラメーターの各出現を、 SPARQL 1.2更新リクエスト内のすべての操作にUSING NAMED <g>句が含まれているかのように 扱うべきです。

2.3.4 成功レスポンス

SPARQLプロトコルは、操作の成功または失敗を示すためにHTTPで定義されたレスポンスステータスコードを使用します。 各ステータスコードの詳細な定義については、HTTP仕様 [RFC9110] を参照してください。 プロトコル・サービスは、 正常に処理された更新リクエストに対して2XX HTTPレスポンスコードを使用 shouldしますが、HTTPに従って代わりに3XX レスポンスコードを使用することを選択mayできます。

成功した更新リクエストのレスポンス本文は実装定義です。実装は HTTPコンテンツネゴシエーションを使用して、完了した更新リクエストに関する人間可読および 機械処理可能な情報の両方を提供してもよいです。

2.3.5 失敗レスポンス

失敗した更新リクエストに対するHTTPレスポンスコードは、次のとおりであるべきです:

  • SPARQL更新リクエスト文字列がSPARQL Update文法で定義された言語における合法な文字列でない場合は400; または、
  • サービスが更新リクエストの実行に失敗した場合は500。SPARQLプロトコル・サービスは、 更新リクエストの実行を拒否する場合にも500レスポンスコードを返すことがあります。このレスポンスは、 サーバーが後続の同一リクエストを処理するかどうかを示すものではありません。

失敗した更新リクエストのレスポンス本文は実装定義です。実装は HTTPコンテンツネゴシエーションを使用して、失敗した更新リクエストに関する人間可読または機械処理可能な (またはその両方の)情報を提供してもよいです。

プロトコル・サービスは、HTTPに従って、その他の失敗条件に対して他の4XXまたは5XX HTTPレスポンスコードを使用してもよいです。

2.4 基底IRIの決定

SPARQLクエリまたはSPARQL更新リクエスト文字列内のBASEキーワードは、 Uniform Resource Identifier (URI): Generic Syntax第5.1.1節「Base URI Embedded in Content」に従って相対IRIを解決するために使用される 基底IRIを定義します。SPARQLプロトコルはクエリURIを逆参照しないため、第5.1.3節は適用されません。 最後に、第5.1.4節に従って、SPARQLプロトコル・サービスは独自の基底URIを定義しなければならず、 それはサービスエンドポイントであってもよいです。

3. SPARQLプロトコル リクエスト例(参考)

以下のHTTPトレース例は、いくつかの異なるシナリオにおけるqueryおよびupdate 操作の呼び出しを示します。一部のトレース例は、 完全なHTTPトレースから次の方法で抽象化されています:

  1. 一部の例では、文字列「EncodedQuery」は、その例で示される SPARQLクエリ文字列に相当するURLエンコード済み文字列を表し、文字列「UnencodedQuery」は その例で示される正確なSPARQLクエリ文字列を、いかなるエンコードもせずに表します。
  2. query操作の例では、クエリ結果を含むレスポンス本文の一部のみを 表示しています。

3.1 SPARQLクエリの例

3.1.1 サービス提供の RDFデータセットを伴うSELECT

この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

そのSPARQLクエリサービスによって実行される、サービス提供の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>
 <results>
   <result>
     <binding name="book"><uri>http://www.example/book/book5</uri></binding>
     <binding name="who"><bnode>r29392923r2922</bnode></binding>
   </result>
...
</sparql>

3.1.2 単純なRDF データセットを伴うSELECT

この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>

3.1.3 単純なRDFデータセットとHTTPコンテンツネゴシエーションを伴うCONSTRUCT

この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 Jimeñez";
            foaf:depiction <http://www.example/jose/jose.jpg>;
            foaf:nick "Jo";
...

3.1.4 単純なRDF データセットを伴うASK

この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>

3.1.5 単純な RDFデータセットを伴うDESCRIBE

この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>

3.1.6 複雑な RDFデータセットを伴うSELECT

この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>

3.1.7 クエリのみの RDFデータセットを伴うSELECT

この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>

3.1.8 曖昧な RDFデータセットを伴うSELECT

この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>

3.1.9 不正なクエリ 障害を伴うSELECT

この構文的に無効な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 '}'

3.1.10 クエリ リクエスト拒否障害を伴うSELECT

この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.

3.1.11 URLエンコード付きPOSTを使用する 長いSELECTクエリ

一部の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>

3.1.12 直接POSTを使用する 長いSELECTクエリ

SPARQLクエリは、2.1.3 直接POSTによるqueryで説明されているように、URLエンコードせずに直接POSTすることもできます。前の例で使用したものと同じクエリが、SPARQLクエリサービス http://www.example/sparql/へ、このHTTPトレースに示すように伝達されます:

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

レスポンスは前の例と同じです。

3.1.13 国際化を伴うSELECT

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>

3.1.14 具象化トリプルパターンを伴うSELECT

SPARQLクエリは具象化トリプルを対象にできます。このSPARQLクエリ

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX ex: <http://example.org/>
SELECT ?name ?person
WHERE { << _:a foaf:name ?name >> ex:statedBy ?person . }

は、SPARQLクエリサービスhttp://www.example/sparql/へ伝達されます。このクエリは SPARQL 1.2構文を使用しており、クエリが1.2バージョンを構文的に告知していないため、 GETリクエストはversion=1.2パラメーターを使用して発行されます。これは、この HTTPトレースに示されています:

GET /sparql/?query=PREFIX%20foaf%3A%20%3Chttp%3A%2F%2Fxmlns.com%2Ffoaf%2F0.1%2F%3E%0APREFIX%20ex%3A%20%3Chttp%3A%2F%2Fexample.org%2F%3E%0ASELECT%20%3Fname%20%3Fperson%0AWHERE%20%7B%20%3C%3C%28%20_%3Aa%20foaf%3Aname%20%3Fname%20%29%3E%3E%20ex%3AstatedBy%20%3Fperson%20.%20%7D&version=1.2
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>

3.1.15 直接POSTを使用する1.2クエリおよび1.2レスポンスを伴うSELECT

以下のクエリはisTRIPLE関数を使用します。これはSPARQL 1.2の機能であるため、 構文的にそのバージョンを告知します:

VERSION "1.2"
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX ex: <http://example.org/>
SELECT ?statement ?person
WHERE { ?statement ex:statedBy ?person . FILTER (isTRIPLE(?statement)) }

クエリは構文的にそのバージョンを告知していますが、SPARQLクライアントは version=1.2メディア型を使用して直接POSTリクエストを送信することを決定します。これは、 バージョンがすでに構文的に告知されている場合には許可されていますが必須ではありません。これは、このHTTPトレースに示されています:

POST /sparql HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1
Content-Type: application/sparql-query; version=1.2

UnencodedQuery

レスポンスにはRDF 1.2トリプル項が含まれるため、サーバーは version=1.2メディア型パラメーター付きで応答します:

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; version=1.2

<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
...
</sparql>

3.2 SPARQL更新の例

3.2.1 URLエンコードされた パラメーターを使用するUPDATE

クエリ 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

3.2.2 直接POSTを使用するUPDATE

更新リクエストは、Content-Typeが 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> }

3.2.3 データセットを指定し、直接POSTを使用するUPDATE

更新リクエストのデータセットは、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' }

3.2.4 URLエンコードされたパラメーターを使用する複数操作UPDATE

複数の操作の列は、「;」 (セミコロン)で区切って、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

3.2.5 データセットを指定し、URLエンコードされた パラメーターを使用する複数操作UPDATE

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.rdfhttp://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

3.2.6 データセットを指定し、直接POSTを使用する複数操作UPDATE

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' } }

4. ポリシー上の考慮事項

4.1 セキュリティ

SPARQLプロトコル・サービスに対するサービス拒否攻撃には、少なくとも2つの可能な発生源があります。 第1に、制約が不十分なクエリは非常に大量の結果を生じさせる可能性があり、 それらを処理、組み立て、または返すために大量の計算資源を必要とすることがあります。もう1つの可能な 発生源は、資源サイズ、取得すべき資源数、またはサイズと数の組み合わせのために非常に複雑な RDFデータセット記述を含むクエリであり、 サービスは帯域幅、CPU、または二次記憶装置を含む相当な資源消費なしにはそれらを組み立てられない可能性があります。 場合によっては、そのような消費は実質的に サービス拒否攻撃を構成することがあります。SPARQLプロトコル・サービスは、取得する資源、 または外部資源が取得される速度に制限を設けることがmayあります。 SPARQLクエリ処理サービスに対するサービス拒否攻撃には、他の発生源も存在する可能性があります。

SPARQLプロトコル・サービスはクライアントに代わって他のオリジンサーバーへHTTPリクエストを行う場合があるため、 他のサイトまたはサービスに対する攻撃の媒介として使用される可能性があります。したがって、SPARQL プロトコル・サービスは、実質的に第三者クライアントのプロキシとして機能することがあります。そのようなサービスは、 取得する資源または外部資源を取得できる速度に制限を設けることが mayあります。SPARQLプロトコル・サービスは、第三者のオリジンサーバーまたは サービスに関して追跡を容易にするような方法で、クライアントリクエストを記録することが mayあります。

SPARQLプロトコル・サービスは、これらおよびその他の高コストまたはその他の点で 安全でないクエリを検出し、クエリに時間またはメモリ制限を課し、またはその他の制限を課して、 サービス(および他のサービス)のサービス拒否攻撃に対する脆弱性を低減することを選択してもよいです。また、 そのようなクエリ リクエストの処理を拒否することもmayあります。

SPARQLプロトコル・サービスは、更新操作を介して基礎となるデータを削除、挿入、および変更できます。 悪意ある更新または破壊的な更新から保護するため、実装は更新操作を実装しないことを 選択してもよいです。あるいは、実装はHTTP認証メカニズムまたはその他の実装定義のメカニズムを使用して、 更新操作の無許可の呼び出しを防止することを選択してもよいです。

異なるIRIが同じ外観を持つことがあります。異なる用字の文字が似て見えることがあります(キリル文字の "о" はラテン文字の "o" に似て見えることがあります)。結合文字が後続する文字は、 別の文字と同じ視覚表現を持つことがあります(COMBINING ACUTE ACCENTが後続するLATIN SMALL LETTER Eは、 LATIN SMALL LETTER E WITH ACUTEと同じ視覚表現を持ちます)。SPARQLの利用者は、 データ内のIRIと一致するIRIを用いてクエリを構築するよう注意しなければなりません。類似文字の照合に関する詳細情報は、 Unicode Security Considerations およびInternationalized Resource Identifiers (IRIs)第8節にあります。

5. 適合性

非規範的とマークされた節に加えて、この仕様内のすべての作成ガイドライン、図、例、および注記は 非規範的です。それ以外のこの仕様内のすべては規範的です。

この文書におけるキーワードMAYは、 ここに示すようにすべて大文字で現れる場合に限り、 BCP 14 [RFC2119] [RFC8174] で説明されているように解釈されるものとします。

5.1 適合性

SPARQL 1.2プロトコル(この文書)の各部分のステータスは次のとおりです:

適合するSPARQLプロトコル サービス:

  1. この文書("SPARQL 1.2 Protocol")で説明されている方法で、 query操作またはupdate操作のいずれかを実装mustしなければなりません;
  2. query操作とupdate操作の両方を実装することがmayあります;
  3. RFC2119 キーワード [RFC2119] によって示される、 4. ポリシー上の 考慮事項で説明される規範的制約と整合していなければなりません。

A. SPARQL 1.1プロトコルと SPARQL 1.2プロトコルの間の変更点

この節は非規範的です。

この仕様は、2013年3月のSPARQL 1.1プロトコルを拡張および更新します。 重要な変更点は 次のとおりです:

B. SPARQL 1.0プロトコルと SPARQL 1.1プロトコルの間の変更点

この節は非規範的です。

この仕様は、2008年1月のRDF向けSPARQLプロトコルを拡張および更新します。 重要な変更点は 次のとおりです:

C. プライバシー上の考慮事項

TODO

D. セキュリティ上の考慮事項

TODO

E. 国際化上の 考慮事項

TODO

F. 索引

F.1 この仕様で定義される 用語

F.2 参照により定義される用語

G. 参考文献

G.1 規範参考文献

[RDF12-CONCEPTS]
RDF 1.2 Concepts and Abstract Data Model. Andy Seaborne; Gregg Kellogg; Olaf Hartig; Pierre-Antoine Champin. W3C. 2026年4月7日. W3C候補勧告. URL: https://www.w3.org/TR/rdf12-concepts/
[RFC2119]
RFCで要件レベルを示すために用いる キーワード. S. Bradner. IETF. 1997年3月. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC3986]
Uniform Resource Identifier (URI): Generic Syntax. T. Berners-Lee; R. Fielding; L. Masinter. IETF. 2005年1月. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc3986
[RFC3987]
Internationalized Resource Identifiers (IRIs). M. Duerst; M. Suignard. IETF. 2005年1月. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc3987
[RFC8174]
RFC 2119キーワードにおける大文字と小文字の曖昧性. B. Leiba. IETF. 2017年5月. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174
[RFC9110]
HTTP Semantics. R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed. IETF. 2022年6月. Internet Standard. URL: https://httpwg.org/specs/rfc9110.html
[SPARQL12-GRAPH-STORE-PROTOCOL]
SPARQL 1.2グラフストア プロトコル. Andy Seaborne; Thomas Pellissier Tanon. W3C. 2024年12月19日. W3C 作業草案. URL: https://www.w3.org/TR/sparql12-graph-store-protocol/
[SPARQL12-QUERY]
SPARQL 1.2クエリ言語. Olaf Hartig; Andy Seaborne; Ruben Taelman; Gregory Williams; Thomas Pellissier Tanon. W3C. 2026年4月23日. W3C作業草案. URL: https://www.w3.org/TR/sparql12-query/
[SPARQL12-UPDATE]
SPARQL 1.2 Update. Ruben Taelman; Andy Seaborne; Thomas Pellissier Tanon. W3C. 2026年4月23日. W3C作業草案. URL: https://www.w3.org/TR/sparql12-update/
[UTR36]
Unicode Security Considerations. Mark Davis; Michel Suignard. Unicode Consortium. 2014年9月19日. Unicode Technical Report #36. URL: https://www.unicode.org/reports/tr36/tr36-15.html

G.2 参考参考文献

[JSON-LD11]
JSON-LD 1.1. Gregg Kellogg; Pierre-Antoine Champin; Dave Longley. W3C. 2020年7月16日. W3C勧告. URL: https://www.w3.org/TR/json-ld11/
[RDF12-N-TRIPLES]
RDF 1.2 N-Triples. Gregg Kellogg; Dominik Tomaszuk. W3C. 2026年4月24日. W3C作業草案. URL: https://www.w3.org/TR/rdf12-n-triples/
[RDF12-TURTLE]
RDF 1.2 Turtle. Gregg Kellogg; Andy Seaborne; Dominik Tomaszuk. W3C. 2026年4月23日. W3C作業草案. URL: https://www.w3.org/TR/rdf12-turtle/
[RDF12-XML]
RDF 1.2 XML Syntax. Gregg Kellogg; Jerven Bolleman. W3C. 2026年4月9日. W3C作業草案. URL: https://www.w3.org/TR/rdf12-xml/
[SPARQL12-CONCEPTS]
SPARQL 1.2 Concepts. The W3C RDF & SPARQL Working Group. W3C. W3C編集者草案. URL: https://w3c.github.io/sparql-concepts/spec/
[SPARQL12-ENTAILMENT]
SPARQL 1.2含意レジーム. Peter Patel-Schneider. W3C. 2026年4月9日. W3C作業草案. URL: https://www.w3.org/TR/sparql12-entailment/
[SPARQL12-FEDERATED-QUERY]
SPARQL 1.2連合 クエリ. Ruben Taelman; Gregory Williams. W3C. 2026年4月23日. W3C作業草案. URL: https://www.w3.org/TR/sparql12-federated-query/
[SPARQL12-NEW]
SPARQL 1.2の新機能. The W3C RDF & SPARQL Working Group. W3C. W3C編集者草案. URL: https://w3c.github.io/sparql-new/spec/
[SPARQL12-RESULTS-CSV-TSV]
SPARQL 1.2クエリ結果CSVおよびTSV 形式. Ruben Taelman; Gregory Williams; Thomas Pellissier Tanon. W3C. 2026年3月28日. W3C作業草案. URL: https://www.w3.org/TR/sparql12-results-csv-tsv/
[SPARQL12-RESULTS-JSON]
SPARQL 1.2クエリ結果JSON 形式. Andy Seaborne; Ruben Taelman; Gregory Williams; Thomas Pellissier Tanon. W3C. 2026年3月28日. W3C作業草案. URL: https://www.w3.org/TR/sparql12-results-json/
[SPARQL12-RESULTS-XML]
SPARQL 1.2クエリ結果XML 形式. Ruben Taelman; Dominik Tomaszuk; Thomas Pellissier Tanon. W3C. 2024年12月27日. W3C作業草案. URL: https://www.w3.org/TR/sparql12-results-xml/
[SPARQL12-SERVICE-DESCRIPTION]
SPARQL 1.2サービス 記述. Ruben Taelman; Gregory Williams. W3C. 2026年4月23日. W3C作業 草案. URL: https://www.w3.org/TR/sparql12-service-description/