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

search API を使用したクエリ

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

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

6.2.6 search API を使用したクエリ

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

ビルトインの検索関数は、テキスト検索を実行するために使用する

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

fn:count(sem:sparql('

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

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