2017-03-14 35 views
0

我想用linkedmdb查询2个特定的电影和它们的imdb页面,它会引发解析错误。在linkedmdb中使用过滤器时解析错误SPARQL

当我删除下面的行时,我得到所有电影的列表。我如何获得特定集合的链接。

FILTER (str(?title) IN ("The Magician","Royal Flash")) 

这是我的代码。

SELECT ?title ?imdbID 
WHERE { 
    ?film foaf:page ?imdbID . 
    ?film dc:title ?title . 

    FILTER(regex(str(?imdbID), "www.imdb.com")) 
    FILTER (str(?title) IN ("The Magician","Royal Flash")) 
} 
+0

它** **不支持SPARQL 1.1,因此,SPARQL'UNION'必须被使用。查看规格:https://www.w3.org/TR/sparql11-query/#alternatives – AKSW

回答

0

你可以尝试通过VALUES匹配,而不是让所有的比赛和过滤所需的值了:

SELECT ?title ?imdbID 
WHERE { 
    ?film foaf:page ?imdbID . 
    VALUES ?title {"The Magician" "Royal Flash"} . 
    ?film dc:title ?title 
} 
+0

仍然是相同的错误。我正在使用下面的端点http://www.linkedmdb.org/snorql/ – VKB

+0

它不会**支持SPARQL 1.1,因此必须使用SPARQL'UNION'。下次可以预先向SPARQL服务显示URL。 – AKSW

1

的SPARQL 1.1规格显示IN

https://www.w3.org/TR/sparql11-query/#func-in

等价所以

FILTER (str(?title) IN ("The Magician","Royal Flash"))

相同

FILTER (str(?title) = "The Magician" || str(?title) = "Royal Flash")

这是SPARQL 1.0

+0

我在使用IN之前尝试过。问题是,当我检索所有电影或只有一个电影时,所有这些变化都起作用。当我试图限制他们中的一些时,他们不工作。你使用的等值只会给“魔术师”。我想要“魔术师”和“皇家Flash”的细节。 – VKB

+0

这与过滤器无关。没有什么标题与“Royal Flash”匹配的。您只能查询知识库中的数据。 LinkedMDB相当陈旧,没有与IMDB同步的实时数据集。 IBDM页面将是http://www.imdb.com/title/tt0073639/,您可以通过SPARQL检查是否没有这样的资源,URL的值为'foaf:page' – AKSW

相关问题