Я новичок в SPARQL и Wikidata, и я пытаюсь получить следующее для победителей премии Hugo:
- Название работы
- Автор
- Год Победы
Я нахожу это на удивление трудным.
Я начал с запроса всех кортежей, ссылающихся на награду за лучший роман, с типом ссылки «выиграл».
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" }
}
wdt:P166
в качестве предиката? - person UninformedUser   schedule 11.02.2017wdt:P166
. Но, чтобы вернуть поля, нужно, конечно, добавить их в часть SELECT, т.е.SELECT DISTINCT ?winner ?winnerLabel ?titleLabel
- person UninformedUser   schedule 11.02.2017