Как отфильтровать результаты викиданных на конкретный язык - PullRequest
0 голосов
/ 18 мая 2018

У меня есть запрос, чтобы получить все столицы.(Столицы)

SELECT DISTINCT ?Stadt ?label ?Staat ?StaatLabel ?geographische_Koordinaten ?StadtLabel WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
  ?Stadt wdt:P31 wd:Q5119.
  ?Stadt rdfs:label ?label.
  OPTIONAL { ?Stadt wdt:P17 ?Staat. }
  OPTIONAL { ?Stadt wdt:P625 ?geographische_Koordinaten. }
}
LIMIT 100

Попробуйте здесь

и результат:

 wd:Q61     Washington D.C.     wd:Q30  Vereinigte Staaten  Point(-77.036666666 38.895)     Washington, D.C.
wd:Q61  Washington D. C.    wd:Q30  Vereinigte Staaten  Point(-77.036666666 38.895)     Washington, D.C.
wd:Q61  واشنگٹن ڈی سی   wd:Q30  Vereinigte Staaten  Point(-77.036666666 38.895)     Washington, D.C.
wd:Q61  Washington D.C.     wd:Q30  Vereinigte Staaten  Point(-77.036666666 38.895)     Washington, D.C.
wd:Q61  واشنګټن ډي سي   wd:Q30  Vereinigte Staaten  Point(-77.036666666 38.895)     Washington, D.C.
wd:Q61  Вашингтон   wd:Q30  Vereinigte Staaten  Point(-77.036666666 38.895)     Washington, D.C.
wd:Q61  ওয়াশিংটন, ডি.সি.   wd:Q30  Vereinigte Staaten  Point(-77.036666666 38.895)     Washington, D.C.

Я получаю много результатов одного и того же городана нескольких языках.

Как я могу отфильтровать запрос, чтобы я получил только один результат на город с английской меткой?

* ОБНОВЛЕНО *

Спасибо за помощь Станиславу,Вы ответили на вопрос.Мой новый запрос:

SELECT DISTINCT ?Stadt ?label ?StadtLabel ?Staat ?StaatLabel ?geographische_Koordinaten WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
  ?Stadt wdt:P31 wd:Q5119.
  ?Stadt wdt:P17 ?Staat.
  OPTIONAL { ?Stadt wdt:P625 ?geographische_Koordinaten. }
}
LIMIT 100

Попробуйте здесь

Могу я задать следующий вопрос?Почему я получаю не только столицы с этим запросом?Почему "? Stadt wdt: P31 wd: Q5119."игнорируется?

1 Ответ

0 голосов
/ 24 мая 2018

Следуя комментариям @Stanislav Kralin и примерам здесь , этот запрос возвращает страны и их столицы:

SELECT ?country ?countryLabel ?capital ?capitalLabel ?coords WHERE {
  ?country wdt:P31 wd:Q3624078.
  ?country wdt:P36 ?capital.
  FILTER NOT EXISTS {?country wdt:P31 wd:Q3024240} # not a former country
  OPTIONAL { ?capital wdt:P625 ?coords. }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY ?countryLabel
LIMIT 1000

Попробуйте здесь

Однако в некоторых странах , таких как Боливия , Коста-Рика и Южная Африка имеют более одной столицы по некоторым причинам!

Чтобы ограничить каждую страну одним (случайным) капиталом, попробуйте:

SELECT  ?country ?countryLabel ?aCapital ?aCapitalLabel ?coords
WHERE
  { { { SELECT  ?country (SAMPLE(?capital) AS ?aCapital)
        WHERE
          { ?country  wdt:P31  wd:Q3624078
            FILTER NOT EXISTS { ?country  wdt:P31  wd:Q3024240 }
            ?country  wdt:P36  ?capital
          }
        GROUP BY ?country
      }
      OPTIONAL
        { ?aCapital  wdt:P625  ?coords }
      SERVICE wikibase:label
        { bd:serviceParam
                    wikibase:language  "en"
        }
    }
  }
ORDER BY ?countryLabel
LIMIT   1000

Попробуйте здесь

...