1

我正在编写一个 python 代码来匹配 DBPEDIA 和 WIKIDATA 之间的演员列表。首先,我使用 SPARQL 从 Dbpedia 检索带有一些附加信息的演员列表,并使用从 Dbpedia 检索到的相同演员列表,我正在尝试检索一些附加信息,例如收到的奖项. 我的 python 代码抛出错误。

4

1 回答 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 回答