2015-10-20 2 views
3

Я ввожу следующий запрос на http://dbpedia.org/sparql:DBpedia/SPARQL: получить население & LAT/LNG всех городов/городов/деревень в Великобритании

PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 
SELECT ?s ?name ?value ?lat ?lng 
WHERE { 
    ?s a <http://dbpedia.org/ontology/PopulatedPlace> . 
    ?s <http://dbpedia.org/property/name> ?name . 
    ?s <http://dbpedia.org/property/populationTotal> ?value . 
    FILTER (?lng > -8.64 AND ?lng < 2.1 AND ?lat < 61.1 AND ?lat > 49.35) 
    ?s geo:lat ?lat . 
    ?s geo:long ?lng . 
} 

(Габаритный прямоугольник предназначен, чтобы быть для Великобритании , другой вариант - добавить <http://dbpedia.org/ontology/country> <http://dbpedia.org/resource/United_Kingdom> ., но есть вероятность, что некоторые места, возможно, не были помечены Великобританией как страна).

Проблема в том, что она, кажется, не оттягивает много мест (около 290). Подкачка population для populationTotal дает 1588 мест, и я не могу понять (семантически), какой из них следует использовать.

Является ли это ограничением базовыми данными или есть что-то, что может быть улучшено в том, как я формулирую запрос?

Примечание: этот вопрос в основном является академическим сейчас, когда я получил информацию от http://download.geonames.org/export/dump/GB.zip, но я бы предпочел использовать открытые данные и семантическую сеть, поэтому опубликую этот вопрос, чтобы узнать, есть ли что-то, или выяснить, есть ли недостаток в том, как данные очищаются от Википедии, и могу ли я ошибаться.

ответ

4

Ваш запрос возвращает только те места, которые имеют значение для совокупности. Например, если Town A имеет «10 000» для населенностиTotal в базе данных, а Town B имеет NULL, возвращается только Town A.

Если вы хотите вернуть все местоположения в Великобритании, вам необходимо указать популяцию в качестве необязательного параметра. Этот запрос покажет вам все местоположения, а также группы населения, которые имеют эти данные.

PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 
SELECT ?s ?name ?value ?lat ?lng 
WHERE { 
    ?s a <http://dbpedia.org/ontology/PopulatedPlace> . 
    ?s <http://dbpedia.org/property/name> ?name . 
    OPTIONAL { ?s <http://dbpedia.org/property/populationTotal> ?value . } 
    FILTER (?lng > -8.64 AND ?lng < 2.1 AND ?lat < 61.1 AND ?lat > 49.35) 
    ?s geo:lat ?lat . 
    ?s geo:long ?lng . 
} 
+0

Я считал это, но считал, что 290 и 1588 были очень низкими числами для мест, в которых были определены эти атрибуты. Может быть, мне нужно погрузиться и улучшить код, который анализирует население из инфобокса? – EoghanM

+0

@EoghanM Похоже на комбинацию кода, который виноват (например, он не учитывает [ситуации, когда население разбито] (https://en.wikipedia.org/wiki/Collinstown) в регионы) и Википедии просто [не имея] (https://en.wikipedia.org/wiki/Freshford,_County_Kilkenny) информацию о населении. – KevLoughrey

+0

Спасибо Kev! Похоже, мы местные. Пинг меня в эогане в точке, то есть (именно это я и работаю): D – EoghanM