SPARQL Update
を使用すると、RDFグラフを操作できます。グラフ管理操作は、CREATE、DROP、COPY、MOVE、およびADDで構成されています。
SPARQL Update
の規格には、RDF
グラフを操作するために次の各コマンドとオプションが用意されています。
複数のステートメントをセミコロン(
;
)で区切って1
つのSPARQL Update
操作内に記 述すると、同一トランザクションとして実行されます。また、同じリクエストに含める ことができます。各ステートメントは、前のステートメントの結果を参照できることにコマンド オプション 説明
CREATE
SILENT、GRAPH IRIref
新しいグラフを作成します。グラフの名前を指定するには
GRAPH
を使用します。SILENT
は、グラフをサイレントに作成します。つまり、グラ フがすでに存在する場合でも、
エラーを返しません。
DROP
SILENT
、GRAPH IRIref
、DEFAULT、NAMED、ALL
グラフとそのコンテンツを削除 します。削除するグラフの名前 を指定するには
GRAPH
を使用 します。デフォルトグラフを削 除するにはDEFAULT
を使用し ます。COPY
SILENT、GRAPH、
IRIref_from、DEFAULT、TO、
IRIref_to
ソースグラフを宛先グラフにコ ピーします。宛先グラフ内のす べてのコンテンツが上書き(削 除)されます。
MOVE
SILENT
、GRAPH
、IRIref_from、DEFAULT、TO、
IRIref_to
ソースグラフのコンテンツを宛 先グラフに移動し、ソースグラ フからコンテンツを削除しま す。宛先グラフ内のすべてのコ ンテンツが上書き(削除)され ます。
ADD
SILENT、GRAPH、
IRIref_from、DEFAULT、TO、
IRIref_to
ソースグラフのコンテンツを宛 先グラフに追加します。ADD 操作では、ソースグラフと宛先 グラフのどちらのコンテンツも 変更されません。
例えば、次のクエリのCOPY操作では、最初のステートメントで作成されたグラフ
<TEST>を参照できます。
PREFIX dc: <http://purl.org/dc/elements/1.1/>
INSERT DATA {
<http://example/book0> dc:title "A default book"
GRAPH <TEST> {<http://example/book1> dc:title "A new book" } GRAPH <TEST> {<http://example/book2> dc:title "A second book" } GRAPH <TEST> {<http://example/book3> dc:title "A third book" } };
COPY <TEST> TO <BOOKS1>
注:
SPARQL Update
の操作は、空のシーケンスを返します。8.2.1 CREATE
この操作を実行すると、グラフが作成されます。グラフがすでに存在する場合は、
SILENTオプションを使用していない限り、エラーが返されます。すでに存在するグラフ
のコンテンツは変更されません。グラフを作成するパーミッションがない場合は、エ ラーが返されます(SILENTオプションを使用している場合を除く)。
CREATE操作のシンタックスは、次のとおりです。
CREATE ( SILENT )? GRAPH IRIref
SILENTオプションを使用すると、エラーは返されません。GRAPH IRIrefオプションでは、
新しいグラフの
IRI
を指定します。次に例を示します。
CREATE GRAPH <http://marklogic.com/semantics/tutorial/update> ;
指定した宛先グラフが存在しない場合は、そのグラフが作成されます。CREATE操作に よって作成されるグラフのパーミッションは、sem:sparql-updateで指定したものになり ます。また、パーミッションを指定していない場合は、そのユーザーのデフォルトパー ミッションになります。
8.2.2 DROP
DROP操作を実行すると、指定したグラフがグラフストアから削除されます。DROP操作の シンタックスは、次のとおりです。
DROP ( SILENT )? GRAPH IRIref | DEFAULT |NAMED | ALL )
GRAPHキーワードは、IRIrefで指定したグラフを削除する場合に使用し、DEFAULTキー ワードオプションは、デフォルトグラフをグラフストアから削除する場合に使用しま す。また、NAMEDキーワードオプションは、すべての名前付きグラフをグラフストアか ら削除する場合に使用します。ALLキーワードを指定すると、すべてのグラフがグラフ ストアから削除されます。これは、グラフストアをリセットした場合と同じ結果です。
次に例を示します。
DROP SILENT GRAPH <http://marklogic.com/semantics/tutorial/intro> ;
この操作が正常に完了すると、指定したグラフは以降のグラフ更新操作で使用できなく なります。指定した名前付きグラフが存在しない場合は、エラーが返されます。SILENT
を指定している場合、操作の結果は常に成功になります。
注:
グラフストアのデフォルトグラフを削除すると、ユーザーのデフォルト パーミッションを持つ空のデフォルトグラフが新規に作成されます。
8.2.3 COPY
COPY操作は、ソースグラフのすべてのトリプルを宛先グラフに挿入する目的で使用しま す。ソースグラフのトリプルは影響を受けませんが、宛先グラフにトリプルが存在する 場合は、新しいトリプルが挿入される前に削除されます。
COPY操作のシンタックスは、次のとおりです。
COPY ( SILENT )? ( ( GRAPH )? IRIref_from | DEFAULT) TO ( ( GRAPH )?
IRIref_to | DEFAULT )
COPY操作では、パーミッションがソースグラフから宛先グラフにコピーされます。パー ミッション情報はソースグラフが持っているため、COPY操作にはsem:sparql-updateの
$default-permissionsパラメータは適用されません。
次に例を示します。
COPY <http://marklogic.com/semantics/tutorial/intro> TO
<http://marklogic.com/semantics/tutorial/start> ;
宛先グラフが存在しない場合は作成されます。ソースグラフが存在しない場合は、エ ラーが返されます。SILENTオプションを使用すると、操作の結果は常に成功になります。
COPY操作は、グラフを削除して新しいグラフを挿入する操作と同様の操作です。
DROP SILENT (GRAPH IRIref_to | DEFAULT); INSERT { ( GRAPH IRIref_to )?
{ ?s ?p ?o } } WHERE { ( GRAPH IRIref_from )? { ?s ?p ?o } }
宛先グラフが存在しない場合に更新が失敗となるようにする場合は、sem:sparql-update
のexisting-graphオプションを指定する必要があります。新しいグラフにコピーする
と、その新しいグラフではコピー元のグラフのパーミッションが使用されます。既存の グラフにコピーしても、そのグラフのパーミッションは変更されません。
8.2.4 MOVE
MOVE操作は、ソースグラフのすべてのトリプルを宛先グラフへ移動する目的で使用しま す。MOVE操作のシンタックスは、次のとおりです。
MOVE (SILENT)? ( ( GRAPH )? IRIref_from | DEFAULT) TO ( ( GRAPH )?
IRIref_to | DEFAULT)
ソースグラフは、挿入後に削除されます。宛先グラフにトリプルが存在する場合は、宛 先トリプルが挿入される前に削除されます。
次に例を示します。
MOVE <http://marklogic/semantics/tutorial/queries> TO
<http://marklogic.com/semantics/tutorialSearches> ;
グラフ<http://marklogic.com/semantics/queries>は、そのトリプルが
<http://marklogic.com/semantics/searches>に挿入された後で削除されます。グラフ
<http://marklogic.com/semantics/searches>内のすべてのトリプルは、その他のトリプル が挿入される前に削除されます。
注:
MOVEを使用してグラフをそのグラフ自身に移動しても操作は実行されず、
データはそのままの状態になります。
宛先グラフが存在しない場合は作成されます。ソースグラフが存在しない場合、MOVE操 作からはエラーが返されます。SILENTオプションを使用すると、操作の結果は常に成功 になります。
MOVE操作は、次のようになります。
DROP SILENT (GRAPH IRIref_to | DEFAULT); INSERT { ( GRAPH IRIref_to )?
{ ?s ?p ?o } } WHERE { ( GRAPH IRIref_from )? { ?s ?p ?o } };
DROP ( GRAPH IRIref_from | DEFAULT)
MOVE操作では、パーミッションがソースグラフから宛先グラフに移動されます。パー ミッション情報はソースグラフが持っているため、この操作にはsem:sparql-updateの
$default-permissionsパラメータは適用されません。
宛先グラフが存在しない場合に更新が失敗となるようにする場合は、sem:sparql-update
のexisting-graphオプションを指定する必要があります。新しいグラフにコピーする
と、その新しいグラフではコピー元のグラフのパーミッションが使用されます。既存の グラフにコピーしても、そのグラフのパーミッションは変更されません。
8.2.5 ADD
ADD操作は、ソースグラフのすべてのトリプルを宛先グラフへ挿入する目的で使用しま す。ソースグラフのトリプルは影響を受けず、宛先グラフに既存のトリプルが存在する 場合も変更されません。
ADD操作のシンタックスは、次のとおりです。
ADD ( SILENT )? ( ( GRAPH )? IRIref_from | DEFAULT) TO ( ( GRAPH )?
IRIref_to | DEFAULT)
次に例を示します。
ADD <http://marklogic/semantics/tutorial/queries> TO
<http://marklogic.com/semantics/searches> ;
ADDを使用してグラフをそのグラフ自身に追加しても操作は実行されず、データはその ままの状態になります。宛先グラフが存在しない場合は作成されます。ソースグラフが 存在しない場合、ADD操作からはエラーが返されます。SILENTオプションを使用すると、
操作の結果は常に成功になります。
トリプルを新しいグラフに追加する場合は、sem:sparql-updateを使用して新しいグラフ のパーミッションを設定できます。パーミッションを指定していない場合は、デフォル トグラフのパーミッションがそのグラフに適用されます。
ADD操作は、次のようになります。
INSERT { ( GRAPH IRIref_to )? { ?s ?p ?o } } WHERE { ( GRAPH IRIref_from )? { ?s ?p ?o } }
宛先グラフが存在しない場合に更新を失敗させる場合は、sem:sparql-updateの
existing-graphオプションを指定する必要があります。新しいグラフにコピーすると、
その新しいグラフではコピー元のグラフのパーミッションが使用されます。既存のグラ フにコピーしても、そのグラフのパーミッションは変更されません。