我是SPARQL和维基数据的新手,我正在尝试为雨果奖获奖者检索以下内容:
我发现这非常困难。
我开始查询链接类型为“赢了”的最佳小说链接的所有元组。
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" }
}
这样可行,但是当我从获胜者添加标题链接时,没有数据:
SELECT DISTINCT ?winner WHERE {
?winner ps:P1346 wd:Q255032.
OPTIONAL {
# P1476: Title
?winner wdt:P1476 ?title.
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
我做错了什么?我尝试了不同的命名空间,但没有多少理解,也无济于事。
在Hugo获奖者的页面上,有一部分获奖者:https://www.wikidata.org/wiki/Q255032#P1346
这是如何产生的?我试图查询该属性并找回人们的链接(我认为):
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" }
}
答案 0 :(得分:2)
对于谓词,您应该使用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:
获奖的时间点属性是维基达 调用限定符。
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" }
}