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:booleanisBLANK()
RDF
ターム xsd:booleanisLITERAL
RDF
ターム xsd:booleanSTR() リテラル
/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" ) )}
注: