• 検索結果がありません。

SPARQL Update によるデータの操作

ドキュメント内 Semantics Developer’s Guide (ページ 177-182)

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オプションを使用すると、エラーは返さ れません。

ドキュメント内 Semantics Developer’s Guide (ページ 177-182)