根据DBpedia的书籍获取电影

时间:2018-06-03 12:51:55

标签: sparql ontology dbpedia sparqlwrapper

我是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 
}

我无法得到任何结果。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

使用任何网络资源时,如果是属性: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位于&#39;资源&#39;,而不是&#39;页面&#39;)

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