Получить штат / провинцию города с помощью запроса SPARQL - PullRequest
1 голос
/ 24 апреля 2019

У меня следующий запрос SPARQL:

SELECT ?item ?itemLabel WHERE {
  ?item wdt:P17 wd:Q16;
    (wdt:P31/(wdt:P279*)) wd:Q515.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

, который в данном случае возвращает города в Канаде. Я также хотел бы отобразить состояния / процессы, например, ожидаемый результат должен быть

...
Montreal    Quebec
...

или, если бы мне нужно было выполнить запрос для городов США

...
Los Angeles    California
...

Как можно расширить запрос для отображения штатов / провинций?

1 Ответ

1 голос
/ 21 мая 2019

Вы должны следовать по пути через свойство, расположенное в административно-территориальном образовании, а затем найти какой-то пункт для остановки, т. Е. Здесь, когда объект является провинцией Канады:

SELECT ?item ?itemLabel ?regionLabel 
WHERE { ?item wdt:P17 wd:Q16; 
              (wdt:P31/(wdt:P279*)) wd:Q515; 
              wdt:P131* ?region . 
        ?region wdt:P31 wd:Q11828004 
        SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } 
}

В более общем случае для штатовстраны, мы должны найти какой-то общий термин, который обозначает его.Этот тройной шаблон может сделать это:

 ?region (wdt:P31/(wdt:P279*)) wd:Q107390

Однако пути к свойствам ужасны для магазинов тройки и, скорее всего, истечут.

Вот запрос, который по крайней мере возвращает область верхнего уровня длястрана:

select ?region ?regionLabel 
{ VALUES ?country {wd:Q30} # get the top level regions of the country 
  ?region wdt:P17 ?country . 
  ?region wdt:P31/wdt:P279* wd:Q10864048 . 
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } }
...