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

} } }

同様に、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