【问题标题】:Get movie(s) based on book(s) from DBpedia从 DBpedia 获取基于书籍的电影
【发布时间】:2018-06-03 12:51:54
【问题描述】:

我是 SPARQL 的新手,正在尝试从 dbpedia 获取改编自特定书籍的电影。这是我目前所拥有的:

PREFIX onto: <http://dbpedia.org/ontology/>
SELECT *
WHERE 
{
  <http://dbpedia.org/page/2001:_A_Space_Odyssey> a ?type.
  ?type onto:basedOn ?book .
  ?book   a  onto:Book 
}

我无法得到任何结果。我该怎么做?

【问题讨论】:

标签: sparql ontology dbpedia sparqlwrapper


【解决方案1】:

当使用任何网络资源时,在你的情况下是属性:basedOn,你需要确保你已经声明了正确的前缀。如果您是从 DBpedia SPARQL 端点查询,那么您可以直接使用 dbo:basedOn,甚至无需声明它,因为它在 predefined 中。或者,如果您想使用自己的,或者如果您正在使用另一个 SPARQL 客户端,请确保您为该属性选择的任何短名称,都声明了 http://dbpedia.org/ontology/ 的前缀。

然后,首先,为了获得更多结果,您可能不会限制此三元组模式的主题类型,因为可能有电影实际上没有这样类型。所以,这样的查询

select distinct *

{

?movie dbo:basedOn ?book .

?book a dbo:Book .

}

会给你很多好的结果,但不是全部。例如,您的示例中的资源将丢失。您可以使用如下查询轻松检查测试这两个资源之间的可用属性:

select  ?p

{
{<http://dbpedia.org/resource/2001:_A_Space_Odyssey_(film)> ?p <http://dbpedia.org/resource/2001:_A_Space_Odyssey> }

UNION

{ <http://dbpedia.org/resource/2001:_A_Space_Odyssey> ?p <http://dbpedia.org/resource/2001:_A_Space_Odyssey_(film)>}
}

您只会得到一个结果: http://www.w3.org/2000/01/rdf-schema#seeAlso

(注意URI是'resource',而不是'page')

然后您可以使用here 描述的方法搜索两个资源之间的任何路径,或者找到可以增加结果数量的其他模式的组合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 2014-03-17
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 2021-04-17
    相关资源
    最近更新 更多