Wikidata SPARQL - Страны и их (все еще существующие) соседи - PullRequest
0 голосов
/ 08 сентября 2018

Я хочу запросить соседей в стране с помощью SPARQL из Викиданных, например this :

SELECT ?country ?countryLabel WHERE { 
  ?country wdt:P47 wd:Q183 . 
  FILTER NOT EXISTS{ ?country wdt:P576 ?date } # don't count dissolved country - at least filters German Democratic Republic
  SERVICE wikibase:label {
        bd:serviceParam wikibase:language "en" .
    }
}

Моя проблема в том, например, в этом примере для соседей Германии все еще показаны страны, которых больше не существует, например:

  • Королевство Дания или
  • Саар.

Уже пробовал

Я мог бы уже уменьшить число с помощью оператора FILTER.

Вопрос

  • Как сделать заявление, чтобы сократить его до 9 стран?
  • (также было бы неплохо разделить на сухопутную и морскую границу)

Альтернативные

1 Ответ

0 голосов
/ 10 сентября 2018

Вы можете проверить объекты типа wd:Q133346 («граница») или wd:Q12413618 («международная граница»):

SELECT ?border ?borderLabel ?country1Label ?country2Label ?isLandBorder ?isMaritimeBorder ?constraint {
  VALUES (?country1) {(wd:Q183)}
  ?border wdt:P31 wd:Q12413618 ;
          wdt:P17 ?country1 , ?country2 .
  FILTER (?country1 != ?country2)
  BIND (EXISTS {?border wdt:P31 wd:Q15104814} AS ?isLandBorder)
  BIND (EXISTS {?border wdt:P31 wd:Q3089219} AS ?isMaritimeBorder)
  BIND ((?isLandBorder || ?isMaritimeBorder) AS ?constraint)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
  } ORDER BY ?country1Label

Попробуйте!

В некотором смысле записи дублируются: для границы между Афганистаном и Узбекистаном список содержит как (?country1=Afganistan,?country2=Uzbekistan), так и (?country1=Uzbekistan,?country2=Afganistan).


  • база данных или списки или подготовленные HashMaps со всеми странами мира с соседями

Вы можете спросить на https://opendata.stackexchange.com.

...