从 DBpedia 获取基于书籍的电影

Get movie(s) based on book(s) from DBpedia

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

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

使用任何网络资源时,在您的情况下为 属性 :basedOn,您需要确保声明了正确的前缀。如果您从 DBpedia SPARQL 端点查询,那么您可以直接使用 dbo:basedOn,即使不声明它,因为它在 predefined. Alternatively, if you want to use your own, or if you are using another SPARQL client, make sure that whatever short name you choose for this property, you declare the prefix for 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')

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