#sparql #wikidata
#sparql #wikidata-query-service
Вопрос:
Я пытаюсь написать запрос SPARQL, используя службу запросов викиданных, чтобы получить всех премьер-министров Нидерландов с 1970 года. Однако я хочу отфильтровать выходные данные, проверив, работал ли премьер-министр в университете. Если министр работал в университете, его не должно быть в выходных данных.
Я думаю, что я должен использовать выражение FILTER NOT EXISTS, но не знаю, как правильно написать эту строку. Может кто-нибудь, пожалуйста, помочь мне?
Смотрите ниже мой запрос и выходные данные:
SELECT ?pmLabel ?start ?companyLabel
WHERE
{
?pm wdt:P39 wd:Q3058109.
?pm p:P39 ?posHeld.
?pm wdt:P108 ?company.
?posHeld ps:P39 wd:Q3058109.
?posHeld pq:P580 ?start.
FILTER(year(?start) > 1970)
# FILTER NOT EXISTS(?company (something) "Universit")
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } # labels
}
ORDER BY DESC(?start)
---------------------- ------------------ ------------------------------
| primeMinisterLabel | start | companyLabel |
---------------------- ------------------ ------------------------------
| Mark Rutte | 14 October 2010 | Unilever |
| Mark Rutte | 14 October 2010 | Calvé |
| Jan Peter Balkenende | 22 July 2002 | Erasmus University Rotterdam |
| Jan Peter Balkenende | 22 July 2002 | Vrije Universiteit Amsterdam |
| Ruud Lubbers | 4 November 1982 | United Nations |
| Ruud Lubbers | 4 November 1982 | Harvard University |
| Ruud Lubbers | 4 November 1982 | Tilburg University |
| Ruud Lubbers | 4 November 1982 | Hollandia |
| Dries van Agt | 19 December 1977 | Kyoto University |
| Dries van Agt | 19 December 1977 | Radboud University Nijmegen |
| Dries van Agt | 19 December 1977 | Kwansei Gakuin University |
| Dries van Agt | 19 December 1977 | Ritsumeikan University |
---------------------- ------------------ ------------------------------
Комментарии:
1.
FILTER NOT EXISTS {?company wdt:P31 wd:Q3918 }
2. Есть ли способ проверить, есть ли в значении слово «Университет»? Не каждый университет в этом выводе является экземпляром university (Q3918).
3. Попробуйте добавить
FILTER(!CONTAINS(LCASE(?companyLabel), "universit"))
.4. тогда правильным фильтром было бы следовать иерархии классов:
FILTER NOT EXISTS {?company wdt:P31/wdt:P279* wd:Q3918 }