Wikidata Sparql如何从人们那里获得奖励时间和工作

Eyg*_*gle 0 sparql wikidata wikidata-api

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

我如何获得获奖日期以及从人民开始?

例如:我想有2016The RevenantLeonardo 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" }
}
Run Code Online (Sandbox Code Playgroud)

问题在于日期(wdt:P58)与获得的奖励(P166)相关联,而与Leonardo DiCaprionor无关Academy Award for Best Actor

这些信息可在Leonardo DiCaprio页面上获得(作为所获得奖项的一部分)

我的另一个问题是Leonardo从他的名字访问的所有数据都是字符串而不是id。

如果有人可以帮助我,那就太好了!

max*_*ath 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" . }
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里尝试获取数据有