SPARQL Update
では、データ操作としてINSERT DATA、DELETE DATA、DELETE/INSERT、LOAD、およびCLEARなどを実行できます。データ操作では、グラフに含まれるトリプルデータ
を操作します。
SPARQL Update
には、RDF
グラフ内のデータを操作するために、次に示すコマンドとオプションが用意されています。
コマンド オプション 説明
INSERT DATA
QuadData
、WITH
、GRAPH
トリプルをグラフに挿入します。グラフを指定していない場合 は、デフォルトグラフが使用さ れます。
DELETE DATA
QuadData QuadData
の指定に従って、トリプルをグラフから削除しま す。グラフを指定していない場 合は、スコープ内のすべてのグ ラフから削除されます。
DELETE/INSERT
WHERE
WITH
、IRIref
、USING
、NAMED、WHERE、DELETE、
INSERT
WHERE節で指定したクエリパ
ターンのバインディングに基づ き、グラフストアに対してトリ プルの削除または追加を実行し ます。
DELETE WHEREは、INSERT(オプ ション)のないINSERT/DELETE
です。INSERT WHEREは、DELETE
(オプション)のない
INSERT/DELETEです。
CLEAR
SILENT、
(GRAPH IRIref |DEFAULT | NAMED | ALL
)指定したグラフのすべてのトリ プルを削除します。
複数のステートメントをセミコロン(;)で区切って
1
つのSPARQL Update
操作内に記 述すると、同一トランザクションとして実行されます。また、同じリクエストに含める ことができます。各ステートメントは、前のステートメントの結果を参照できることに 注意してください。注:
SPARQL Update
の操作は、空のシーケンスを返します。MarkLogic
にトリプルをロードするその他の方法としては、mlcp
、sem:rdf-load、HTTP
REST
エンドポイントなどが挙げられます。「mlcpを使用したトリプルのロード」(42ページ)、「sem:rdf-load」(50ページ)、「グラフストアの処理」(53ページ)、および
「トリプルのロード」(
34
ページ)を参照してください。一括読み込みでは、mlcp
が推 奨される手法です。8.4.1 INSERT DATA
INSERTDATAを実行すると、リクエストで指定されたトリプルがグラフに追加されます。
INSERTDATAのシンタックスは、次のとおりです。
INSERT DATA QuadData
(GRAPH VarOrIri) ? {TriplesTemplates}
QuadDataパラメータはトリプルパターンの集まり(TriplesTemplates)で構成されてお
り、GRAPHブロックにラップすることもできます。
注:
トリプルドキュメントのすべての管理対象トリプルは、
SPARQL Update
を使用して挿入するときに宛先グラフを指定していない限り、デフォルト グラフに配置されます。トリプルを新しいグラフに挿入する場合は、sem:sparql-updateを使用して指定した目的 のパーミッションでグラフを作成します。グラフのパーミッションを指定していない場 合、グラフはユーザーのデフォルトパーミッションで作成されます。グラフのパーミッ ションを管理するには、sem:graph-add-permissionsを使用します。パーミッションおよ びセキュリティの詳細については、「グラフレベルのセキュリティ」(175ページ)を参 照してください。例えば次に示す更新操作では、<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")),
PREFIX exp: <http://example.org/marklogic/people>
PREFIX pre: <http://example.org/marklogic/predicate>
INSERT DATA { GRAPH <MyGraph>{
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 demov:listed "true" .
demor:COMPANY100 demov:industry "Retail/Wholesale" . }
}
DELETE DATA操作に変数または空白ノードが含まれている場合は、エラーがスローされ
ます。存在しないトリプルを削除しても、何も起こりません。グラフストア内に存在し ないトリプルをQuadDataで指定しても無視されます。
8.4.3 DELETE/INSERT WHERE
DELETE/INSERT操作は、WHERE節で指定したクエリパターンのバインディングに基づき、
グラフストアに対してトリプルの削除または追加を実行する目的で使用します。
DELETE/INSERT WHEREを使用すると、マッチの対象となるパターンを指定してトリプルを
削除または挿入できます。
固有のパターンに従ってトリプルを削除するには、オプションのINSERT節なしで
DELETE/INSERT WHEREコンストラクトを使用します。グラフを指定していない場合は、デ
フォルトグラフ(http://marklogic.com/semantics#default-graph、名前なしグラフとも呼
( WITH IRIref )?
( ( DeleteClause InsertClause? ) | InsertClause ) ( USING ( NAMED )? IRIref )*
WHERE GroupGraphPattern
DeleteClause ::= DELETE QuadPattern InsertClause ::= INSERT QuadPattern
この操作では、変数の集まりについてバインディングのマッチングシーケンスを判断す るためのデータを、WHERE節を使用して識別しています。各ソリューションのバイン ディングは、トリプルを削除する場合はDELETEテンプレートに代入され、新しいトリ プルを作成する場合はINSERTテンプレートに代入されます。
存在しないグラフに挿入しようとすると、そのグラフが作成されます。DELETEおよび
INSERTは同じトランザクション内で実行され、MarkLogicのセキュリティルールに従い
ます。
この例では、従業員が
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 )
この例では、「
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 CLEAR
CLEAR操作を実行すると、指定したグラフのすべてのトリプルが削除されます。CLEARの
シンタックスは、次のとおりです。
CLEAR (SILENT)? (GRAPH IRIref | DEFAULT | NAMED | ALL )
GRAPH IRIrefオプションは、GRAPH IRIrefで指定したグラフからすべてのトリプルを削除
する目的で使用します。また、DEFAULTオプションは、グラフストアのデフォルトグラ フからすべてのトリプルを削除する目的で使用します。NAMEDオプションは、グラフス トアのすべての名前付きグラフ内にあるすべてのトリプルを削除するために使用し、
ALLオプションは、グラフストアのすべてのグラフからすべてのトリプルを削除するた めに使用します。
次に例を示します。
CLEAR GRAPH <http://marklogic.com/semantics/COMPANIES100A/> ;
この操作では、グラフからすべてのトリプルが削除されます。グラフおよびそのメタ データ(パーミッションなど)はグラフの消去後も維持されます。指定したグラフが存 在しない場合は、CLEARが失敗します。SILENTオプションを使用すると、エラーは返さ れません。