} } }
同様に、XQueryを使用してもドキュメントへの挿入ができます。
xquery version "1.0-ml";
import module namespace sem =
"http://marklogic.com/semantics"
at "/MarkLogic/semantics.xqy";
xdmp:document-insert("myData.xml",
<sem:triples xmlns:sem="http://marklogic.com/semantics">
<sem:triple>
<sem:subject>http://example.org/ns/dir/js/</sem:subject>
<sem:predicate>http://xmlns.com/foaf/0.1/firstname/</sem :predicate>
<sem:object
datatype="http://www.w3.org/2001/XMLSchema#string">John</sem :object>
</sem:triple>
</sem:triples>
)
トリプルを非管理対象トリプルとしてXMLまたはJSONドキュメントに組み込む場合 は、トリプルに関する追加情報を、追加メタデータ(トリプルの日時情報、バイテンポ ラル情報、ソース)とともに含めることができます。また、トリプルの出自など、有用 な情報をXMLまたはJSONファイルに追加できます。トリプルを更新するときは、
ドキュメントとトリプルを同時に更新します。
ドキュメントへのトリプルの追加のほか、インデックス付けするコンテンツをトリ プルとして識別するためのテンプレートを使用することもできます。テンプレート の詳細については、「ドキュメント内のトリプルを識別するテンプレートを 使用する」
(274 ページ)を参照してください。
5.1.1 ドキュメントからのコンテキスト
ドキュメントにトリプルがある場合は、ドキュメントでは、トリプルによって記述され たデータのコンテキストを提供できます。トリプルのソースならびにドキュメントとト リプルの作成時期に関する詳細な情報を、ドキュメントの一部として含めることができ ます。
<article>
<info>AP Newswire - Nixon went to China</info>
<triples-context>
<confidence>80</confidence>
<pub-date>2011-10-14</pub-date>
<source>AP Newswire</source>
</triples-context>
<sem:triple xmlns:sem="http://marklogic.com/semantics">
<sem:subject>http://example.org/news/Nixon</sem:subject>
<sem:predicate>http://example.org/wentTo</sem:predicate>
<sem:object datatype="http://www.w3.org/2001/
XMLSchema#string">China</sem:object>
</sem:triple>
</article>
トリプルに注釈を付けることで、情報に関する信頼性レベルなど、さらに詳細な情報を 提供できます。
5.1.2 複合クエリ
複合クエリは、ドキュメントとトリプル(存在する場合)の両方に対して機能します。
次の例は、AP Newswireドキュメント内の情報に対する複合クエリを示したものです。
xquery version "1.0-ml";
import module namespace sem = "http://marklogic.com/semantics"
at "/MarkLogic/semantics.xqy";
sem:sparql('
SELECT ?country WHERE {
<http://example.org/news/Nixon> <http://example.org/
wentTo> ?country }
', (), (),
cts:and-query( (
cts:path-range-query( "//triples-context/confidence",
">=", 80) ,
cts:path-range-query( "//triples-context/pub-date", ">",
xs:date("1974-01-01")),cts:or-query( (
cts:element-value-query( xs:QName("source"),
"AP Newswire" ),
cts:element-value-query( xs:QName("source"), "BBC" ) ) )
) ) )
この例のctsクエリは、フラグメントの集まりを識別しています。識別されたフラグ メントにあるトリプルはセマンティックストアの構築に使用され、その後、その ストアに対してSPARQLクエリが実行されます。これが意味している、クエリが 述べる内容は、次のとおりです。「ctsクエリによって識別されたフラグメントに あるトリプルの中の国名を検索してください。ここで、識別されたフラグメント とは、sem:triple/@confidence > 80を持ち、1974年よりも前の以前の sem:triple/@dateを持ち、ソース要素に「AP Newswire」または「BBC」
があるすべてのフラグメントのことです。」
5.1.3 セキュリティ
非管理対象トリプルでは、ドキュメントのセキュリティパーミッションがトリプルにも 適用されます。そのため、トリプルを修正したりトリプルをドキュメントに追加したり するには、適切なパーミッションが必要です。ドキュメントの現在のパーミッションを 調べるには、xdmp:document-get-permissionsを使用します。
xquery version "1.0-ml";
xdmp:document-get-permissions("/example.json")
=>
<sec:permission xmlns:sec="http://marklogic.com/xdmp/
security">
<sec:capability>read</sec:capability>
<sec:role-id>11180836995942796002</sec:role-id>
</sec:permission>
<sec:permission xmlns:sec="http://marklogic.com/xdmp/
security">
<sec:capability>update</sec:capability>
<sec:role-id>11180836995942796002</sec:role-id>
</sec:permission>
ドキュメントのパーミッションを設定するには、xdmp:document-set-permissionsを使用します。
xdmp:document-set-permissions("/example.json", (xdmp:permission("sparql-update-user","update"),
xdmp:permission("sparql-update-user","read")) )
ドキュメントパーミッションの詳細については、『Security Guide