SPARQL正则表达式过滤器

Gus*_*usa 5 regex rdf sparql pattern-matching

我试图通过使用正则表达式过滤器匹配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"))
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除第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"))
}
Run Code Online (Sandbox Code Playgroud)

我不知道我是做错了什么,还是端点错误......

有人能帮助我吗?

Ian*_*son 7

在第二个查询中,没有要编制索引的图形模式.查询处理器满足该查询的唯一方法是检索三元组中每个艺术家的名称,然后对每个艺术家应用正则表达式匹配.毫无疑问,您正在达到某种资源限制,无论是CPU时间还是经过时间.

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