LinkedMDB SPARQL查询

时间:2013-09-13 10:17:23

标签: rdf sparql semantic-web linkedmdb

我在这里有点困惑。我有以下SPARQL查询,它可以很好地对抗LinkedMDB explorer

 PREFIX mdb: <http://data.linkedmdb.org/resource/movie/film>
 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
 PREFIX dc: <http://purl.org/dc/terms/>

 SELECT ?label?resource WHERE {
    ?resource mdb:id ?uri .
    ?resource dc:title ?label . 
    FILTER regex(?label,'^Batman')
}

这个过滤掉所有这样的蝙蝠侠电影(我已经过滤掉了所有结果,这里只显示了五个):

-----------------------------------------------|
| Label                           | Resource   |
|----------------------------------------------|
| Batman                          | db:film/2  |
| Batman                          | db:film/3  |
| Batman & Robin                  | db:film/4  |
| Batman: Mask of the Phantasm    | db:film/737|
| Batman: Mystery of the Batwoman | db:film/974|
-----------------------------------------------|

但是,问题来了。如果我写“Forrest Gump”而不是“Batman”,则查询无法找到任何结果。

但是,如果我将最后一行更改为

    ?resource dc:title "Forrest Gump". 

它在LinkedMDB数据库中找到了这部电影,所以我知道它隐藏在某处。但是当我使用FILTER regex解决方案时,它不会返回。

我注意到如果我只搜索没有过滤器并只打印数据库中的所有电影,看起来LinkedMDB在2557上有某种LIMIT,这样网页就不会崩溃。看起来FILTER只过滤那些2557部电影。有没有办法检索更多电影?

1 个答案:

答案 0 :(得分:1)

SPARQL 1.1引入了更多字符串函数,例如containsstrstartsstrends,它们更加专业化,并且比使用完整的正则表达式快得多。但是,它看起来并不像LinkedMDB资源管理器支持SPARQL 1.1,所以这些在这里没用。

如果你知道电影的确切名称,那么简单地要求它而不是使用正则表达式会更有效率。例如,

SELECT ?resource WHERE {
    ?resource movie:filmid ?uri .
    ?resource dc:title "Forrest Gump" .
}

SPARQL Results

返回电影db:film/38179