2012-07-06 135 views
5

我试图通过使用正则表达式筛选器匹配SPARQL中的一个词,但没有成功......:/ 我将查询发送到位于“http://dbtune.org/”的端点MusicBrainz上/ SPARQL”。 好了,下面的查询工作: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(艺术家FOAF:?名 “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")) 
} 

我不知道我是否做错了或者是端点的错误...

有人能帮助我吗?

+0

这可能是一个bug(如你所说)或某种查询限制。我想知道他们使用了什么终端? – user205512 2012-07-06 14:57:21

+0

端点是“http://dbtune.org/musicbrainz/sparql”... 我做了一个测试,我意识到该端点限制结果为1000.我发送了以下查询: SELECT count(?艺术家) WHERE {?艺术家莫:MusicArtist} 它返回1000,这太少了... 我想也许它确实是一个bug ... =/ – 2012-07-06 15:02:00

回答

7

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

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

+0

谢谢,伊恩! – 2012-07-06 22:33:43

+0

我想我会创建一个服务器来存储我需要与正则表达式匹配的数据,比如“name”,“label”和其他可能的数据,以便我可以通过自己的服务器获取资源URI,用它来获取其他属性! – 2012-07-07 01:30:35