このセクションでは、SPARQL Updateを使用して、SPARQLエンドポイントからグラ フやトリプルデータを管理する方法について説明します。エンドポイントとは、W3C
SPARQL
プロトコルの実装です。このエンドポイントのURL
には、次のようなアドレスが割り当てられます。
http://host:port/v1/graphs/sparql?
GET:/v1/graphs/sparqlまたはPOST:/v1/graphs/sparqlを使用することで、RESTで
SPARQL Update
を使用できます。•
RESTでSPARQL Updateを使用する方法•
POSTを使用したSPARQL Update•
POSTとURLエンコードされたパラメータを使用したSPARQL UpdateRDF
トリプルでREST
を使用する方法の詳細については、『REST Application Developer’s
Guide』の「
」を参照してください。8.8.1 REST
でSPARQL Update
を使用する方法SPARQL
エンドポイントには、3種類の方法で更新を送信できます。PREFIX dc: <http://marklogic.com/dc/elements/1.1/>
WITH <BOOKS>
DELETE {?b dc:title "A new book"}
INSERT {?b dc:title "Inside MarkLogic Server" } WHERE {
?b dc:title "A new book".
}
リクエストのボディに次の形式でクエリを埋め込み、URLに対して
POST:/v1/graphs/sparqlリクエストを実行できます。
http://host:port/v1/graphs/sparql
または、次のような更新パラメータにクエリを埋め込む形式で、POST:/v1/graphs/sparql
リクエストを実行できます。
http://host:port/v1/graphs/sparql
content-type:application/x-www-form-urlencoded
また、次の形式で更新パラメータにクエリを埋め込み、GET:/v1/graphs/sparqlリクエス トを実行することもできます。
http://host:port/v1/graphs/sparql?update=URLENCODEDQUERY
オプションは、GET:/v1/graphs/sparql?query=とPOST:/v1/graphs/sparqlです。POSTを使 用する場合は、リクエストのボディに
SPARQL
を直接配置することも、x-www-form-urlencodedを使用して、更新形式パラメータを
URL
エンコードされたSPARQL Update
に設定することもできます。このセクションの例では、URLエンコーディングなしでPOSTリクエストを使用し、content-type:application/sparql-updateを指 定しています。
REST
で使用するパラメータを指定する方法の詳細については、「パラメータの指定」(133ページ)を参照してください。POSTおよびGETの詳細については、「サポートされ ている動詞」(139ページ)および
SPARQL Update
のグラフストアエンドポイントでサ ポートされている動詞のリストを参照してください。SPARQLエンドポイントの詳細に ついては、POST:/v1/graphs/sparqlおよびGET:/v1/graphs/sparqlを参照してください。8.8.2 POST
を使用したSPARQL Update
リクエストのボディに
SPARQL Update
を含めることで、POSTメソッドを使用してリク エストを送信できます。HTTPリクエストのコンテンツタイプヘッダはapplication/sparql-updateに設定します。
次に例を示します。
# Windows???????????
curl --anyauth --user admin:admin -i -X POST \ -H "Content-type:application/sparql-update" \ -H "Accept:application/sparql-results+xml" \
-d "PREFIX dc: <http://marklogic.com/dc/elements/1.1/> \ WITH <BOOKS> DELETE {?b dc:title "A new book"} \
INSERT {?b dc:title "Inside MarkLogic Server" } \ WHERE {?b dc:title "A new book".}" \
http://localhost:8000/v1/graphs/sparql
注:
わかりやすくするため、長いコマンドラインは行継続文字「\」または
「
^
」を使用して複数の行に分割しています。curl
コマンドを使用するとき は、行継続文字を削除してください。SPARQL Update
はファイルに含めることもできます。このSPARQL Update
は、booktitle.sparqlという名前のファイルに記載されています。
PREFIX dc: <http://purl.org/dc/elements/1.1/>
INSERT DATA {
<http://example/book1> dc:title "book title" ; dc:creator "author name" .
}
このファイルが含まれるリクエストは、次のようになります。
curl --anyauth --user admin:admin -i -X POST \ --data-binary @./booktitle.sparql \
-H "Content-type:application/sparql-update" \ -H "Accept:application/sparql-results+xml" \ http://localhost:8000/v1/graphs/sparql
リクエスト
URI
のHTTP
クエリ文字列パラメータとして、オプションのusing-graph-uri、using-named-graph-uri、およびrole-capabilityパラメータを含めるこ とができます。default-permissionsパラメータは、ロールと権限をカンマ区切りの文字 列で指定してください。
default-permissions=admin,update default-permissions=admin,execute
この例では、SPARQL Updateおよび
URL
エンコードされたパラメータを指定したPOSTを使用して、データ(およびパーミッションの集まり)をグラフC1に挿入します。パ ラメータは、アンパサンド(
&
)文字で区切ります。また、任意の順序で含めることが できます。curl --anyauth --user admin:admin -i -X POST \ --data-urlencode update= 'PREFIX dc:
<http://purl.org/dc/elements/1.1/> \ INSERT DATA \
{<http://example/book1> dc:title "book title" ; \ dc:creator "author name" .}' \
-H "Content-type:application/sparql-update" \ -H "Accept:application/sparql-results+xml" \
'http://localhost:8000/v1/graphs/sparql?using-named-graph-uri=C1 \
&default-permissions=admin,update&default-permissions=admin,execute'
このプロトコルを使用してUSING NAMEDまたはWITH節を使用する
SPARQL 1.1 Update
リ クエストを伝達する場合、using-graph-uriまたはusing-named-graph-uriパラメータを指 定すると、この操作はエラーになります。新しい
RDF
グラフが作成されると、サーバーは201 Createdメッセージで応答します。更新リクエストに対する応答では、
HTTP
応答ステータスコード経由でリクエストの成 功または障害を示します(200または400)。リクエストのボディが空の場合、サーバーは204 No Contentで応答します。
8.8.3 POST
とURL
エンコードされたパラメータを使用したSPARQL Update
パラメータを
URL
エンコードすることで、HTTP POSTメソッド経由で更新プロトコルの リクエストを送信することもできます。これを実行する場合は、URLのすべてのパラ メータをパーセント記号でエンコードし、application/x-www-form-urlencodedメディアタ イプを使用してリクエストボディ内にパラメータとして含めます。HTTP
リクエストの コンテンツタイプヘッダはapplication/x-www-form-urlencodedに設定します。注:
REST
を使用して、パラメータをURL
の一部として渡すときは、常にURL
をURL
エンコードします。この例では
curl
を使用し、URLエンコーディングが含まれるSPARQL Update
でPOSTを 使用します。curl --anyauth --user admin:admin -i -X POST \
-H "Content-type:application/x-www-form-urlencoded" \ -H "Accept:application/sparql-results+xml" \
--data-urlencode update='PREFIX dc: <http://purl.org/dc/elements/1.1/>
INSERT DATA{ GRAPH <C1> {http://example/book1/> dc:title "C book"} }' \ http://localhost:8321/v1/graphs/sparql?
次の例は、
SPARQL Update
とパラメータを使用するPOSTの例を示したものです。curl --anyauth --user admin:admin -i -X POST \
--data-urlencode update='PREFIX dc: <http://purl.org/dc/elements/1.1/>
INSERT DATA{ GRAPH <C1> {http://example/book1/> dc:title "C book"} }' --data-urlencode default-permissions=rest-writer,read \
--data-urlencode default-permissions=rest-writer,update \ --data-urlencode default-permissions=rest-reader,read \ --data-urlencode default-permissions=rest-reader,update \ -H "Content-type:application/x-www-form-urlencoded" \ -H "Accept:application/sparql-results+xml" \
http://localhost:8321/v1/graphs/sparql