SPARQL正则表达式过滤器

前端之家收集整理的这篇文章主要介绍了SPARQL正则表达式过滤器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图通过使用正则表达式过滤器匹配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),"i"))
}

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

有人能帮助我吗?

解决方法

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

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

猜你在找的正则表达式相关文章