6

我正在尝试使用正则表达式过滤器匹配 SPARQL 中的一个单词,但没有成功...:/我将查询发送到位于“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

在您的第二个查询中,没有要索引的图形模式。查询处理器满足该查询的唯一方法是检索三重存储中每个艺术家的姓名,然后对每个艺术家应用正则表达式匹配。难怪您会遇到某种资源限制,无论是 CPU 时间还是运行时间。

如果您想做这样的自由文本搜索,我建议将数据集下载到本地端点,并使用自由文本索引,例如LARQ。您的查询会更快,您的用户会感谢您!

于 2012-07-06T18:09:00.620 回答