SPARQL Updateでは、データ操作としてINSERT DATA、DELETE DATA、
DELETE/INSERT、LOAD、およびCLEARなどを実行できます。データ操作では、グラ
SPARQL Updateには、RDFグラフ内のデータを操作するために、次に示すコマンドと オプションが用意されています。
複数のステートメントをセミコロン(;)で区切って1つのSPARQL Update操作内に記 述すると、同一トランザクションとして実行されます。また、同じリクエストに含める ことができます。各ステートメントは、前のステートメントの結果を参照できることに 注意してください。
注: SPARQL Updateの操作は、空のシーケンスを返します。
コマンド オプション 説明
INSERT DATA QuadData、WITH、GRAPH トリプルをグラフに挿入します。
グラフを指定していない場合 は、デフォルトグラフが使用さ れます。
DELETE DATA QuadData QuadDataの指定に従って、ト リプルをグラフから削除しま す。グラフを指定していない場 合は、スコープ内のすべてのグ ラフから削除されます。
DELETE..INSERT WHERE
WITH、IRIref、USING、
NAMED、WHERE、DELETE、
INSERT
WHERE節で指定したクエリパ
ターンのバインドに基づき、グ ラフストアに対してトリプルの 削除または追加を実行します。
DELETE WHERE WITH、IRIref、USING、
NAMED、WHERE、DELETE、
INSERT
WHERE節で指定したクエリパ
ターンのバインドに基づき、グ ラフストアからトリプルを削除 します。DELETE WHEREとは、
INSERT(オプション)がない DELETE..INSERT WHEREです。
INSERT WHERE WITH、IRIref、USING、
NAMED、WHERE、DELETE、
INSERT
WHERE節で指定したクエリパ
ターンのバインドに基づいて、
グラフストアにトリプルを追加 します。INSERT WHEREとは、
DELETE(オプション)がない DELETE..INSERT WHEREで す。
CLEAR SILENT、(GRAPH IRIref | DEFAULT | NAMED | ALL)
指定したグラフのすべてのトリ プルを削除します。
MarkLogicにトリプルをロードするその他の方法としては、mlcp、sem:rdf-load、
HTTP RESTエンドポイントなどが挙げられます。「mlcpを使用したトリプルのロード」
(37 ページ)、「sem:rdf-load」(46 ページ)、「グラフストアの処理」(49 ページ)、および
「セマンティックトリプルの読み込み」(29 ページ)を参照してください。一括読み込 みでは、mlcpが推奨される手法です。
8.4.1 INSERT DATA
INSERT DATAを実行すると、リクエストで指定されたトリプルがグラフに追加されま
す。INSERT DATAのシンタックスは、次のとおりです。
INSERT DATA QuadData
(GRAPH VarOrIri) ? {TriplesTemplates}
「QuadData」パラメータはトリプルパターンの集まり(「TriplesTemplates」)で構 成されており、GRAPHブロックにラップすることもできます。
注: トリプルドキュメントのすべての管理対象トリプルは、SPARQL Update を使用して挿入するときに宛先グラフを指定していない限り、デフォルト グラフに配置されます。
トリプルを新しいグラフに挿入する場合は、sem:sparql-updateを使用して指定し た目的のパーミッションでグラフを作成します。グラフのパーミッションを指定してい ない場合、グラフはユーザーのデフォルトパーミッションで作成されます。グラフの パーミッションを管理するには、sem:graph-add-permissionsを使用します。
パーミッションおよびセキュリティの詳細については、「グラフレベルのセキュリティ」
(179 ページ)を参照してください。
例えば次に示す更新操作では、<My Graph>を更新(update)できるように
sem:graph-add-permissionsを使用して更新パーミッションをsparql-update-roleに
追加し、3つのトリプルをそのグラフに挿入しています。
xquery version "1.0-ml";
import module namespace sem = "http://marklogic.com/semantics"
at "/MarkLogic/semantics.xqy";
sem:graph-add-permissions(sem:iri("MyGraph"), xdmp:permission("sparql-update-role", "update")), sem:sparql-update('
PREFIX exp: <http://example.org/marklogic/people>
PREFIX pre: <http://example.org/marklogic/predicate>
INSERT DATA {
exp:John_Smith pre:livesIn "London" . exp:Jane_Smith pre:livesIn "London" . exp:Jack_Smith pre:livesIn "Glasgow" . }}
')
グラフが「QuadData」で記述されていない場合は、デフォルトグラフ
(http://marklogic.com/semantics#default-graph)が使用されます。グラフ ストアに存在しないグラフにデータが挿入されると、そのデータ用の新しいグラフが、
ユーザーのパーミッションを使って作成されます。
この例では、INSERT DATAを使用してトリプルをデフォルトグラフに挿入してから、
3つのトリプルを「BOOKS」という名前のグラフに挿入します。
xquery version "1.0-ml";
import module namespace sem = "http://marklogic.com/semantics"
at "/MarkLogic/semantics.xqy";
sem:sparql-update('
PREFIX dc: <http://marklogic.com/dc/elements/1.1/>
INSERT DATA {
<http://example/book0> dc:title "A default book"
GRAPH <BOOKS> {<http://example/book1> dc:title "A new book" }
GRAPH <BOOKS> {<http://example/book2> dc:title "A second book" }
GRAPH <BOOKS> {<http://example/book3> dc:title "A third book" }
} ');
この例では、グラフ「BOOKS」内の「A new book」というタイトルの書籍を削除し、
その位置に「Inside MarkLogic Server」というタイトルを挿入します。
xquery version "1.0-ml";
import module namespace sem = "http://marklogic.com/semantics"
at "/MarkLogic/semantics.xqy";
sem:sparql-update('
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".
}')
WITHキーワードは、このグラフ(<BOOKS>)を各節で使用することを意味します。
8.4.2 DELETE DATA
DELETE DATA操作を実行すると、リクエストで指定したトリプルがグラフストアの各
グラフに含まれている場合、それらのトリプルが削除されます。DELETE DATAのシン タックスは、次のとおりです。
DELETE DATA QuadData
「QuadData」パラメータでは、削除するトリプルを指定します。グラフが
「QuadData」で記述されていない場合は、デフォルトグラフが使用されます。
MarkLogicで管理されているトリプルのうち、「QuadData」で指定されたいずれかの
トリプルの主語、述語、および目的語にマッチするトリプルが削除されます。グラフを
「QuadData」で指定している場合、削除の範囲はそのグラフ内のトリプルに制限され ます。指定していない場合、削除の範囲はデフォルトグラフ内のトリプルに制限され ます。
この例では、<http://marklogic.com/semantics/COMPANIES100A/>から
「true」および「Retail/Wholesale」にマッチするトリプルを削除します。
PREFIX demov: <http:demo/verb#>
PREFIX demor: <http:demo/resource#>
DELETE DATA {
GRAPH <http://marklogic.com/semantics/COMPANIES100A/>
{
demor:COMPANY100 demor:listed "true" .
demor:COMPANY100 demov:industry "Retail/Wholesale" . }
}
DELETE DATA操作に変数または空白ノードが含まれている場合は、エラーがスローさ
れます。存在しないトリプルを削除しても、何も起こりません。グラフストア内に存在 しないトリプルを「QuadData」で指定しても無視されます。
8.4.3 DELETE..INSERT WHERE
DELETE..INSERT WHERE操作は、WHERE節で指定したクエリパターンのバインドに 基づいて、グラフストアに対してトリプルの削除または追加を実行する目的で使用しま す。DELETE..INSERT WHEREを使用すると、マッチさせるパターンを指定してトリ プルを削除または挿入できます。
詳細については、http://www.w3.org/TR/sparql11-update/#updateLanguageを参照して ください。
特定のパターンに従ってトリプルを削除するには、オプションのINSERT節を付けな いでDELETE..INSERT WHEREコンストラクトを使用します。グラフを指定していな い場合、デフォルトグラフ( http://marklogic.com/semantics#default-graph。名前なしグラフとも呼ばれます)に対してトリプルの挿入または削除が実行さ れます。DELETE..INSERT WHEREのシンタックスは、次のとおりです。
( WITH IRIref )?
( ( DeleteClause InsertClause? ) | InsertClause ) ( USING ( NAMED )? IRIref )*
WHERE GroupGraphPattern
DeleteClause ::= DELETE QuadPattern InsertClause ::= INSERT QuadPattern
この操作では、変数の集まりについてバインドのマッチングシーケンスを判断するため のデータを、WHERE節を使用して識別しています。各ソリューションのバインドは、
トリプルを削除する場合はDELETEテンプレートに代入され、新しいトリプルを作成 する場合はINSERTテンプレートに代入されます。
存在しないグラフに挿入しようとすると、そのグラフが作成されます。DELETEおよび INSERTは同じトランザクション内で実行され、MarkLogicのセキュリティルールに従 います。
この例では、「Healthcare/Life Sciences」を含む各トリプルが削除され、2つのトリプル
(「Healthcare」に1つ、「Life Sciences」に1つ)が挿入されます。
PREFIX demov: <http:demo/verb#>
WITH <http://marklogic.com/semantics/COMPANIES100A/>
DELETE {
?company demov:industry "Healthcare/Life Sciences" . }
INSERT {
?company demov:industry "Healthcare" .
?company demov:industry "Life Sciences" . }
WHERE {
?company demov:industry "Healthcare/Life Sciences" .}
DELETEとINSERTは相互に独立しています。
8.4.4 DELETE WHERE
DELETE/INSERT操作は、WHERE節で指定したクエリパターンのバインドに基づいて、
グラフストアに対してトリプルの削除または追加を実行する目的で使用します。
DELETE WHEREとは、INSERT(オプション)がないDELETE..INSERT WHEREです。
DELETE WHEREを使用すると、マッチさせるパターンを指定して、マッチしたトリプ
ルを削除できます。
特定のパターンに従ってトリプルを削除するには、オプションのINSERT節を付けな
いでDELETE WHEREコンストラクトを使用します。グラフを指定していない場合、デ
フォルトグラフ(http://marklogic.com/semantics#default-graph。名前な しグラフとも呼ばれます)からトリプルが削除されます。
DELETE WHEREのシンタックスは、次のとおりです。
( WITH IRIref )?
( ( DeleteClause InsertClause? ) | InsertClause ) ( USING ( NAMED )? IRIref )*
WHERE GroupGraphPattern
DeleteClause ::= DELETE QuadPattern InsertClause ::= INSERT QuadPattern
この例のDELETE WHEREでは、従業員が100人未満の企業に関する売上データをグラ フ<http://marklogic.com/semantics/COMPANIES100A/>から削除します。
PREFIX demov: <http:demo/verb#>
PREFIX vcard: <http:www.w3c.org/2006/vcard/ns#>
WITH <http://marklogic.com/semantics/COMPANIES100A/>
DELETE {
?company demov:sales ?sales . }
WHERE {
?company a vcard:Organization .
?company demov:employees ?employees . }
FILTER ( ?employees < 100 )
8.4.5 INSERT WHERE
INSERT WHERE操作は、WHERE節で指定したクエリパターンのバインドに基づいて、
グラフストアにトリプルを追加する目的で使用します。INSERT WHEREは、DELETE
(オプション)がないDELETE..INSERT WHEREです。INSERT WHEREを使用すると、
マッチさせるパターンを指定して、マッチしたトリプルを挿入できます。
特定のパターンに従ってトリプルを挿入するには、オプションのDELETE節を付けな
いでINSERT WHEREコンストラクトを使用します。グラフを指定していない場合は、
デフォルトグラフ(http://marklogic.com/semantics#default-graph。名前 なしグラフとも呼ばれます)にトリプルが挿入されます。
INSERT WHEREのシンタックスは、次のとおりです。
( WITH IRIref )?
( ( DeleteClause InsertClause? ) | InsertClause ) ( USING ( NAMED )? IRIref )*
WHERE GroupGraphPattern
DeleteClause ::= DELETE QuadPattern InsertClause ::= INSERT QuadPattern
次のINSERT WHEREの例は、米国のニューヨークにある会社を探し、State="NY"と deliveryRegion="East Coast"を追加します。
PREFIX demov: <http:demo/verb#>
PREFIX vcard: <http:www.w3c.org/2006/vcard/ns#>
WITH <http://marklogic.com/semantics/sb/COMPANIES100A/>
INSERT {
?company demov:State "NY" .
?company demov:deliveryRegion "East Coast"
}
WHERE {
?company a vcard:Organization . ?company vcard:hasAddress [ vcard:region "New York" ; vcard:country-name "USA"]
}
8.4.6 CLEAR
CLEAR操作を実行すると、指定したグラフのすべてのトリプルが削除されます。
CLEARのシンタックスは、次のとおりです。