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

FILTER キーワード

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

6.1 SPARQL を使用したトリプルのクエリ

6.1.10 クエリ節

6.1.10.3 FILTER キーワード

SPARQL

クエリの結果は、複数の手法で制限できます。返されるマッチング結果の数を

制限する場合は、FILTER、DISTINCT、またはLIMITキーワードを使用できます。

1

つあるいは複数の

SPARQL

FILTERキーワードを使用すると、結果を制約する変数 を指定できます。FILTER制約は、WHERE節の波括弧の内側に配置します。論理、算術、

または比較演算子の記号(大なり(>)、小なり(<)、等価(=)など)を含めることが できます。FILTER制約では、マッチングクエリの結果を返すためにブール型条件が使用 されます。また、isURI、isBlankなど、使用できるビルトインの

SPARQL

テストも多数 用意されています。

次の表は、FILTER制約で使用される

SPARQL

単項演算子の一部を示したものです。

注:

演算子の詳細なリストについては、「SPARQL Query Language for RDF」の

Operator Mapping

」を参照してください。

演算子 型 結果の型

! xsd:boolean xsd:boolean

+ 数値 数値

- 数値 数値

BOUND() 変数 xsd:boolean

isURI()

RDF

ターム xsd:boolean

isBLANK()

RDF

ターム xsd:boolean

isLITERAL

RDF

ターム xsd:boolean

STR() リテラル

/IRI

単純リテラル

LANG() リテラル 単純リテラル

DATATYPE() リテラル

IRI

次の例は、変数?bd(人の誕生日)に意味を与えるクエリパターンです。クエリパター

ンのFILTER節では、この変数の値と

1999

1

1

日という日付とを比較し、この日付

よりも後に生まれた人々を返します。

PREFIX onto: <http://dbpedia.org/ontology/>

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

PREFIX xsd: <http://www.w3.org/2001/XMLSchema/>

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns>

SELECT ?s

WHERE {?s rdf:type foaf:Person .

?s onto:birthDate ?bd .

FILTER (?bd > "1999-01-01"^^xsd:date) }

SPARQL

キーワードaは、共通の述語rdf:typeのショートカットであり、リソースの

クラスを指定します。例えば、WHERE節は次のように記述できます。

WHERE {?s a foaf:Person .

?s onto:birthDate ?bd .

regex関数を使用すると、FILTER節を正規表現パターンで表現できます。次に例を示し

ます。

SELECT ?s ?p ?o WHERE {?s ?p ?o

FILTER (regex (?o,

"

Lister

"

,

"

i

"

)) }

この

SPARQL

クエリは、目的語の位置のテキストに、大文字

/

小文字の区別なしで文

字列Listerが含まれるすべてのマッチング結果を返します。iフラグを使用すると、正

規表現のマッチは大文字

/

小文字の区別なしで実行されます。

注:

このタイプのFILTERクエリは、fn:match

XQuery

関数と同等です。

SPARQL

では正規表現が最適化されません。最適化された全文検索を実

行するにはcts:containsを使用してください。

正規表現言語は、「

XQuery 1.0 and XPath 2.0 Functions and Operators

」のセクション7.6.1

Regular Expression Syntaxで定義されています。

SPARQLクエリにおけるXQueryビルトイン関数の使用

関数を使用できる

SPARQL

クエリでは、

SPARQL

関数だけでなくビルトインの

XQuery

関数(例えばプレフィックスfn、cts、またはxdmpが付いた関数)も使用できます。そ のようなクエリには、FILTERやBINDの他、SELECTステートメント内の式が含まれます。

ビルトイン関数とは、XQueryの「インポートモジュール」を使用せずに呼び出せる関

数です。

SPARQL

クエリで使用する場合、このような

XQuery

関数のことを拡張関数と

呼びます。ビルトイン関数のリストは、http://docs.marklogic.comで「Server-Side JavaScript

APIs

」(または「

Server-Side XQuery APIs

」)を選択すると確認できます。また、ビルト インのリストは、「MarkLogic Built-In Functions」および「W3C-Standard Functions」にあ ります。

SPARQL

の拡張関数は、http://www.w3.org/2005/xpath-functions#name/という形式の

IRI

で識別されます。nameは関数のローカル名、#より前の文字列は関数のプレフィックス

IRI

(例えばhttp://www.w3.org/2005/xpath-functions#starts-with/)です。一般的にfn、

xdmp、およびctsに関連付けられたプレフィックス

IRI

の場合(または末尾が「/」や

「#」ではないその他のプレフィックス

IRI

の場合)、#をプレフィックス

IRI

に付加し、

その後に関数のローカル名を続けます。例えば次のようになります。

http://marklogic.com/cts#contains/

ctsなどのビルトイン関数にアクセスするには、SPARQLクエリでPREFIXを使用しま す。次の例では、cts:containsはPREFIXを使用することで追加され、その後はFILTERク エリの一部として含められています。

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

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema/>

PREFIX dc: <http://purl.org/dc/elements/1.1/>

SELECT *

WHERE{ ?s ?p ?o .

FILTER cts:contains(?o, cts:or-query(("Monarch", "Sovereign"))) FILTER(?p IN (dc:description, rdfs:type))

}

これは「Monarch」または「Sovereign」という語の全文検索であり、述語は説明

(description)またはタイプ(type)です。2番目のFILTER節ではINを使用して、フィ ルタを適用する述語を指定しています。結果には、(王国、州、または領域で)

Monarch

」(君主)の肩書を持つ人々と、

Monarch butterfly

(オオカバマダラ)、

Monarch

Islands(モナーク諸島)など「Monarch」という説明が含まれる項目が含まれます。

次の例では、SPARQLクエリで

XPath

関数starts-withを使用して、説明が「Chief」で 始まる人々の役割または肩書を返します。この関数をインポートするには、FILTERクエ リの一部として

IRI

を含めます。

PREFIX dc: <http://purl.org/dc/elements/1.1/>

SELECT ?desc

WHERE {?s dc:description ?desc

FILTER (<http://www.w3.org/2005/xpath-functions#starts-with/>( ?desc,

"Chief" ) )}

注:

FILTERキーワードは、OPTIONALおよびUNIONキーワードと併用できます。

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