Получение информации о координатах мест в Великобритании из DBpedia через SPARQL - PullRequest
0 голосов
/ 05 июля 2018

У меня есть список мест в Великобритании. Я хочу получить информацию о широте и долготе от http://dbpedia.org. Я только начал изучать SPARQL, и я не очень знаком с DBpedia. В настоящее время я пытаюсь найти хотя бы одно место, но пока безуспешно. Если мне удастся получить одно место, я постараюсь получить все места.

Список мест похож на следующий:

Llandysul
Rostrevor
Lee on the Solent
.
.
.

То, что я хочу получить, это название места, широта, долгота. Как этого добиться с помощью SPARQL?

Я пробовал следующий запрос на http://dbpedia.org/sparql, получая хотя бы информацию об одном месте (Лландисул), но даже это не сработало.

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX geo:  <http://www.w3.org/2003/01/geo/wgs84_pos#>
SELECT DISTINCT ?place ?lat ?lng
WHERE { 
 ?place a dbo:Place.
 ?place rdfs:label "Llandysul".
 ?place geo:lat ?lat .
 ?place geo:long ?lng .
}

Что я делаю не так? Как можно получить информацию об одном месте изначально, а на следующем шаге информацию обо всех местах внутри списка? Кроме того, если бы я мог добавить условие, чтобы убедиться, что это место принадлежит Великобритании, это было бы здорово.

Большое спасибо.

1 Ответ

0 голосов
/ 05 июля 2018

Я думаю этот запрос получит того, что вы хотите , но учтите, что у вас должна быть правильная метка; нет частичных совпадений (поэтому "Lee on the Solent"@en не даст вам "Lee-on-the-Solent"@en) -

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX geo:  <http://www.w3.org/2003/01/geo/wgs84_pos#>

SELECT DISTINCT ?place ?label ?lat ?lng
WHERE { 
  ?place a dbo:Place .
  ?place rdfs:label ?label 
     FILTER ( ?label IN ( "Llandysul"@en, 
                          "Rostrevor"@en, 
                          "Lee-on-the-Solent"@en
            ) ) .
  ?place geo:lat ?lat .
  ?place geo:long ?lng .
}

Как предлагает @JoshuaTaylor, вы также можете использовать этот вариант запроса ( результаты ) -

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX geo:  <http://www.w3.org/2003/01/geo/wgs84_pos#>

SELECT DISTINCT ?place ?label ?lat ?lng
WHERE { 
  ?place a dbo:Place .
  ?place rdfs:label ?label 
     VALUES ?label { "Llandysul"@en
                     "Rostrevor"@en 
                     "Lee-on-the-Solent"@en} .
  ?place geo:lat ?lat .
  ?place geo:long ?lng .
}

Между ними не должно быть большой разницы; возможно, немного быстрее со вторым.

...