Свойство обхода службы запросов Викиданных

я пытаюсь получить список всех гиперонимов данного элемента Викиданных. Например, я хочу пройти по элементу «подкласс» для https://www.wikidata.org/wiki/Q4421

Как будет выглядеть команда SPARQL для https://query.wikidata.org?


person Lunatech    schedule 28.07.2016    source источник


Ответы (3)


Вы можете использовать синтаксис пути к свойству (*).

В этом случае wdt: P279 *, чтобы указать 0 или более времени wdt: P279, который является подклассом эквивалента в модели Викиданных.

Я добавил здесь несколько вариантов, чтобы указать глубину, чтобы вы могли их заказать

SELECT ?entity ?entityLabel (count(?mid) as ?depth) WHERE {
  wd:Q4421 wdt:P279* ?mid.
  ?mid wdt:P279* ?entity
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
} group by ?entity ?entityLabel
order by ?depth

https://query.wikidata.org/#SELECT%20%3Fentity%20%3FentityLabel%20%28count%28%3Fmid%29%20as%20%3Fdepth%29%20WHERE%20%7B%0A%20%20wd%3AQ4421%20wdt%3AP279%2a%20%3Fmid.%0A%20%20%3Fmid%20wdt%3AP279%2a%20%3Fentity%0A%20%20SERVICE%20wikibase%3Alabel%20%7B%0A%20%20%20%20bd%3AserviceParam%20wikibase%3Alanguage%20%22en%22%20.%0A%20%20%20%7D%0A%7D%20group%20by%20%3Fentity%20%3FentityLabel%0Aorder%20by%20%3Fdepth

person innovimax    schedule 30.07.2016

Только что нашел инструмент, который решает именно мою проблему. https://angryloki.github.io/wikidata-graph-builder/?property=P279&item=Q4421

person Lunatech    schedule 28.07.2016

вы можете использовать синтаксис рекурсии SPARQL *:

SELECT ?entity WHERE {
  wd:Q4421 wdt:P279* ?entity.
}

см. На query.wikidata.org

person maxlath    schedule 28.07.2016