如何从维基数据中检索雨果获奖者?
How to retrieve the Hugo winners from Wikidata?
我是 SPARQL 和维基数据的新手,正在尝试为雨果奖获得者检索以下内容:
- 作品名称
- 作者
- 赢得年份
我发现这出奇地困难。
我开始查询所有元组 link 以 link 类型 "won by" 获得最佳小说奖。
SELECT DISTINCT ?winner WHERE {
# P166: Award Recieved By
# Q103360: Hugo Award for Best Novel
?winner ps:P1346 wd:Q255032.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
这有效,但是当我添加获胜者的标题 link 时,没有数据:
SELECT DISTINCT ?winner WHERE {
?winner ps:P1346 wd:Q255032.
OPTIONAL {
# P1476: Title
?winner wdt:P1476 ?title.
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
我做错了什么?我尝试了不同的命名空间,但几乎没有理解,但无济于事。
在雨果获奖者的页面上,有一部分获奖者:https://www.wikidata.org/wiki/Q255032#P1346
那是怎么生成的?我试图查询 属性 并返回 links 给人们(我认为):
SELECT DISTINCT ?winner ?winnerLabel ?for WHERE {
# P166: winner
# Q103360: Hugo Award for Best Novel
wd:Q255032 wdt:P1346 ?winner.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
对于谓词,您应该使用 wdt:
而不是 ps:
请看this example:
SELECT DISTINCT ?item ?itemLabel ?AuthorLabel ?year WHERE {
?item wdt:P166 wd:Q255032.
?item wdt:P50 ?Author .
?item wdt:P577 ?year .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
PS。我使用的是发布日期,而不是获奖日期。
更新:请参阅this answer:
The point in time property of the award received is what Wikidata
calls a qualifier.
SELECT ?item ?itemLabel ?authorLabel ?publicationDate ?dateOfAwardReceived WHERE {
?item wdt:P50 ?author .
?item wdt:P577 ?publicationDate .
?item p:P166 ?awardReceivedStatement .
?awardReceivedStatement ps:P166 wd:Q255032 .
?awardReceivedStatement pq:P585 ?dateOfAwardReceived .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
我是 SPARQL 和维基数据的新手,正在尝试为雨果奖获得者检索以下内容:
- 作品名称
- 作者
- 赢得年份
我发现这出奇地困难。
我开始查询所有元组 link 以 link 类型 "won by" 获得最佳小说奖。
SELECT DISTINCT ?winner WHERE {
# P166: Award Recieved By
# Q103360: Hugo Award for Best Novel
?winner ps:P1346 wd:Q255032.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
这有效,但是当我添加获胜者的标题 link 时,没有数据:
SELECT DISTINCT ?winner WHERE {
?winner ps:P1346 wd:Q255032.
OPTIONAL {
# P1476: Title
?winner wdt:P1476 ?title.
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
我做错了什么?我尝试了不同的命名空间,但几乎没有理解,但无济于事。
在雨果获奖者的页面上,有一部分获奖者:https://www.wikidata.org/wiki/Q255032#P1346
那是怎么生成的?我试图查询 属性 并返回 links 给人们(我认为):
SELECT DISTINCT ?winner ?winnerLabel ?for WHERE {
# P166: winner
# Q103360: Hugo Award for Best Novel
wd:Q255032 wdt:P1346 ?winner.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
对于谓词,您应该使用 wdt:
而不是 ps:
请看this example:
SELECT DISTINCT ?item ?itemLabel ?AuthorLabel ?year WHERE {
?item wdt:P166 wd:Q255032.
?item wdt:P50 ?Author .
?item wdt:P577 ?year .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
PS。我使用的是发布日期,而不是获奖日期。
更新:请参阅this answer:
The point in time property of the award received is what Wikidata calls a qualifier.
SELECT ?item ?itemLabel ?authorLabel ?publicationDate ?dateOfAwardReceived WHERE {
?item wdt:P50 ?author .
?item wdt:P577 ?publicationDate .
?item p:P166 ?awardReceivedStatement .
?awardReceivedStatement ps:P166 wd:Q255032 .
?awardReceivedStatement pq:P585 ?dateOfAwardReceived .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}