6

正規表現フィルターを使用して SPARQL の 1 つの単語を一致させようとしていますが、成功しません... :/ "http://dbtune.org/musicbrainz/sparql" にあるエンドポイントにクエリを送信しています。さて、次のクエリが機能します。

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX mo: <http://purl.org/ontology/mo/>
SELECT ?artist ?name
WHERE {
    ?artist a mo:MusicArtist
    . ?artist foaf:name "Switchfoot"
    . ?artist foaf:name ?name
    . FILTER(regex(str(?name), "switchfoot", "i"))
}

しかし、7 行目 (. ?artist foaf:name "Switchfoot") を削除すると、次のクエリは一致しません。

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX mo: <http://purl.org/ontology/mo/>
SELECT ?artist ?name
WHERE {
    ?artist a mo:MusicArtist
    . ?artist foaf:name ?name
    . FILTER(regex(str(?name), "switchfoot", "i"))
}

何か間違ったことをしているのか、エンドポイントのバグなのかわかりません...

誰か助けてくれませんか?

4

1 に答える 1

7

2 番目のクエリには、インデックスを作成するグラフ パターンがありません。クエリ プロセッサがそのクエリを満たす唯一の方法は、トリプル ストア内のすべてのアーティストの名前を取得し、それぞれに正規表現の一致を適用することです。CPU 時間であろうと経過時間であろうと、ある種のリソース制限に達しているのも不思議ではありません。

このようなフリー テキスト検索を行いたい場合は、データセットをローカル エンドポイントにダウンロードし、LARQなどのフリーテキスト インデックスを使用することをお勧めします。あなたのクエリはより速くなり、ユーザーはそれを感謝します!

于 2012-07-06T18:09:00.620 に答える