我正在编写一个 python 代码来匹配 DBPEDIA 和 WIKIDATA 之间的演员列表。首先,我使用 SPARQL 从 Dbpedia 检索带有一些附加信息的演员列表,并使用从 Dbpedia 检索到的相同演员列表,我正在尝试检索一些附加信息,例如收到的奖项. 我的 python 代码抛出错误。
问问题
325 次
1 回答
1
我有一种预感,查询的 dbpedia 部分在 wikidata 中超时。跳过联合绑定并添加限制,查询将完成,但需要几秒钟。取消评论关于奖项的三重奏,它会超时。
由于 SPARQL 存在问题,我现在将忽略 Python 处理。
除此之外,我发现了两个故障:
# missing prefixes
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT *
WHERE {
SERVICE <http://dbpedia.org/sparql> {
?c rdf:type <http://umbel.org/umbel/rc/Actor> ;
rdfs:label ?Actor
FILTER ( lang(?Actor) = "en" )
?c dbo:deathDate ?Death_date ;
dbo:birthPlace ?b
# date filterning not working... add cast
FILTER ( xsd:date(?Death_date) >= "1990 - 01 - 01"^^xsd:date )
?b rdfs:label ?birth_Place
FILTER ( lang(?birth_Place) = "en" )
?Starring rdf:type dbo:Film ;
dbo:starring ?c .
?c dbo:deathCause ?d .
?d dbp:name ?Cause_Of_Death .
?c owl:sameAs ?wikidata_actor
FILTER strstarts(str(?wikidata_actor), "http://www.wikidata.org")
}
# ?wikidata_actor wdt:P166 ?award_received.
}
LIMIT 9
每个 SPARQL 端点都有自己独特的个性。所以在我看来,联合查询(使用service
关键字并命中两个或更多端点)可能特别棘手。如果您不熟悉联邦,这里有一个不相关的查询有效。
有一些实体以“darwilliamstour”的名义发布推文。该实体的名称是什么?
select *
where
{
?twitterer wdt:P2002 'darwilliamstour' .
service <http://dbpedia.org/sparql>
{
?twitterer rdfs:label ?name
}
}
于 2017-05-20T17:26:59.527 回答