0

自 Freebase 关闭以来,我尝试将基于 Freebase 的测验生成器改编为 Wikidata。我这样做有很多麻烦,现在我遇到了一个简单的问题:

怎么才能有得奖日期和从一个人开始?

示例:我想拥有2016The Revenantfor Leonardo Dicaprio。我尝试了几个这样的请求:

SELECT ?id ?idLabel ?date ?forWork
WHERE {
  wd:Q38111 wdt:P166 ?id .
  ?id wdt:P585 ?date .
  ?id wdt:1411 ?forWork .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr" }
}

问题是日期点 ( wdt:P58) 与收到的奖励 ( P166) 相关联,而不是Leonardo DiCaprioor Academy Award for Best Actor

这些信息可在莱昂纳多·迪卡普里奥页面上找到(作为所获奖项的子部分)

我遇到的另一个问题是将Leonardo他名字中的所有数据作为字符串而不是 id 访问。

4

1 回答 1

6

由于所有数据似乎都在预选赛中,我想出了这样的事情:

SELECT ?actor ?actorLabel ?award ?awardLabel ?date ?forWork ?forWorkLabel
WHERE
{
  # find a human
  ?actor wdt:P31 wd:Q5 .
  # with English label "Leonardo DiCaprio"
  ?actor rdfs:label "Leonardo DiCaprio"@en .
  # Now comes the statements/qualifiers magic:
  # just applying what the documentation says https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/queries#Working_with_qualifiers
  # using this query as example https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/queries#US_presidents_and_their_spouses.2C_in_date_order
  ?actor p:P166 ?awardstatement .
  ?awardstatement ps:P166 ?award .
  ?awardstatement pq:P585 ?date .
  ?awardstatement pq:P1686 ?forWork .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en,fr" . }
}

您可以在这里尝试并在那里获取数据

于 2016-05-09T16:13:35.693 回答