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

6.2 XQuery または JavaScript によるトリプルのクエリ

6.2.6 cts 検索を使用したセマンティックの使用

6.2.6.2 cts:triple-range-query

トリプルインデックスへのアクセスは、cts:triple-range-query関数を通じて提 供されます。この例の1番目のパラメータは、主語の空のシーケンスです。「Lamar

Alexander」という名前の人物を検索するため、述語および目的語の各パラメータが

sameTerm演算子とともに指定されています。

xquery version "1.0-ml";

import module namespace sem = "http://marklogic.com/semantics"

at "/MarkLogic/semantics.xqy";

let $query := cts:triple-range-query((),

sem:iri("http://xmlns.com/foaf/0.1/name"), "Lamar Alexander", "sameTerm")

return cts:search(fn:collection()//sem:triple, $query) 6.2.6.3 cts:search

ビルトインのcts検索関数は、テキスト検索を実行するために使用するXQuery関数で す。次の例では、cts:searchはXMLドキュメントのinfo:govtrack/billsコレ クションに対してクエリを実行し、ドキュメントに「Guam」という語が含まれる法案 の数を特定しています(指定された文字列のcts:word-query)。

xquery version "1.0-ml";

import module namespace sem = "http://marklogic.com/semantics"

at "/MarkLogic/semantics.xqy";

let $search := cts:search(//sem:triple,

cts:and-query((cts:collection-query("info:govtrack/bills"), cts:word-query("Guam"))

) )[1]

return cts:remainder($search)

=>

16

cts:queryと比較演算子の組み合わせを使用できます。次の例の cts:triple-range-query関数は、cts:search内で使用されています。これにより、

foaf:nameが「Lamar Alexander」に等しいか、Alexanderの主語IRIに画像IRIを提供 するfoaf:imgプロパティが含まれるsem:triple要素を探します。

xquery version "1.0-ml";

import module namespace sem = "http://marklogic.com/semantics"

at "/MarkLogic/semantics.xqy";

declare namespace dc = "http://purl.org/dc/elements/1.1/";

cts:search(collection()//sem:triple, cts:or-query((

cts:triple-range-query((), sem:curie-expand("foaf:name"), "Lamar Alexander", "sameTerm"),

cts:triple-range-query(

sem:iri

("http://www.rdfabout.com/rdf/usgov/congress/people/

A000360"),

sem:curie-expand("foaf:img"), (), "="

) )))

SPARQL式、およびSPARQL 1.1のIN/NOT IN演算子でシーケンスを構築すると、

cts:query値のシーケンスを1番目の引数として想定するcts:and-queryなど、

ビルトインcts関数を効果的に活用できます。

また、順序を指定するために、cts:orderコンストラクタをcts:searchのオプ ションとして使用することもできます。これにより、指定したインデックスを使用して cts検索結果を並べることができるため、パフォーマンスの向上と予測可能性が実現さ

れます。『Query Performance and Tuning Guide』の「

を参照してください。

6.2.6.4 cts:contains

cts:contains関数は、FILTERおよびBIND節内に出現するSPARQL式で使用でき ます。例については、「FILTERキーワード」(95 ページ)を参照してください。

cts:containsでは任意の値を1番目の引数にできるため、クエリのトリプルパター

ンでバインドされた変数を1番目の引数として渡すことができます。トリプルパターン では、トリプルインデックスの参照時に返される結果の数を減らすため、全文インデッ クスを使用します。

例えば以下のようになります。

xquery version "1.0-ml";

import module namespace sem = "http://marklogic.com/semantics"

at "/MarkLogic/semantics.xqy";

PREFIX cts: <http://marklogic.com/cts#>

SELECT DISTINCT * WHERE

{ ?s ?p ?o .

FILTER cts:contains(?o, cts:word-query("Environment")) } ')

)

=>

53

次の例は、法案番号「hr543」があるかどうかを検証するシンプルなクエリです。

xquery version "1.0-ml";

import module namespace sem = "http://marklogic.com/semantics"

at "/MarkLogic/semantics.xqy";

cts:contains(collection("info:govtrack/bills")//sem:subject, cts:word-query('hr543'))

=>

true