Python SPARQL 代码无法正常工作
Python code with SPARQL not working
我正在编写 python 代码来匹配 DBPEDIA 和 WIKIDATA 之间的参与者列表。首先,我使用 SPARQL 从 Dbpedia 检索带有一些附加信息的演员列表,例如出生日期、出生地,并使用从 Dbpedia 检索的相同演员列表,我试图检索一些附加信息,例如收到的奖项.我的 python 代码出错。
我有预感查询的 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
}
}
我正在编写 python 代码来匹配 DBPEDIA 和 WIKIDATA 之间的参与者列表。首先,我使用 SPARQL 从 Dbpedia 检索带有一些附加信息的演员列表,例如出生日期、出生地,并使用从 Dbpedia 检索的相同演员列表,我试图检索一些附加信息,例如收到的奖项.我的 python 代码出错。
我有预感查询的 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
}
}