Откуда взять данные обо всех европейских городах, деревнях?
Я ищу данные обо всех европейских городах, деревнях и поселках. В частности, меня интересуют имя, почтовые индексы, телефонные коды, широта, долгота, население и страна, к которой он принадлежит.
1. Где я могу извлечь наиболее полный объем данных?
2. Как запросить данные из LinkedGeoData
Для начала я попытался извлечь данные из LinkedGeoData ( http://linkedgeodata.org/sparql). Однако я не могу получить никаких разумных результатов. Когда выполняется следующий запрос, время от времени появляется только совокупность, остальные поля всегда остаются пустыми.
SELECT * WHERE
{
?place a <http://linkedgeodata.org/ontology/Place> .
OPTIONAL { ?place <http://linkedgeodata.org/property/openGeoDB:name> ?name . }
OPTIONAL { ?place <http://linkedgeodata.org/ontology/openGeoDB:lat> ?lat . }
OPTIONAL { ?place <http://linkedgeodata.org/ontology/openGeoDB:lon> ?lon . }
OPTIONAL { ?place <http://linkedgeodata.org/property/openGeoDB:postal_codes> ?postal . }
OPTIONAL { ?place <http://linkedgeodata.org/ontology/openGeoDB:telephone_area_code> ?tel . }
OPTIONAL { ?place <http://linkedgeodata.org/ontology/population> ?population . }
OPTIONAL { ?place <http://linkedgeodata.org/ontology/openGeoDB:is_in_loc_id> ?inLocId . }
?place <http://linkedgeodata.org/property/is_in> ?in.
FILTER ( REGEX(?in, "europe", "i") ) .
}
Я заметил, что все свойства, содержащие openGeoDB
пустые, хотя свойства существуют. Так что не так с запросом?
1 ответ
Для поиска соответствующих наборов данных вы можете взглянуть на каталог наборов данных, например Data Hub, или на доски вопросов и ответов, например, Get Data.
Число рейнольдса Ваши вторые вопросы, кажется, что данные в connectedgeodata кажутся немного скудными, или нужно использовать другие свойства и / или классы. Однако следующий запрос, по-видимому, дает по крайней мере некоторые результаты, и вы можете видеть, что каждое место в Европе может быть адресовано через свойство lgdb:is_in
PREFIX lgd:<http://linkedgeodata.org/>
PREFIX lgdo:<http://linkedgeodata.org/ontology/>
PREFIX lgdp:<http://linkedgeodata.org/property/>
PREFIX lgdoogdb: <http://linkedgeodata.org/ontology/openGeoDB>
PREFIX lgdpogdb: <http://linkedgeodata.org/property/openGeoDB>
SELECT *
FROM <http://linkedgeodata.org>
WHERE
{
?place a lgdo:Place .
OPTIONAL { ?place lgdpogdb:name ?name . }
OPTIONAL { ?place lgdoogdb:lat ?lat . }
OPTIONAL { ?place lgdoogdb:lon ?lon . }
OPTIONAL { ?place lgdpogdb:postal_codes ?postal . }
OPTIONAL { ?place lgdoogdb:telephone_area_code ?tel . }
OPTIONAL { ?place lgdo:population ?population . }
OPTIONAL { ?place lgdoogdb:is_in_loc_id ?inLocId . }
OPTIONAL { ?place lgdp:is_in ?in . }
}
LIMIT 100
например, с помощью следующего запроса вы можете немного изучить структуру набора данных:
PREFIX lgdo:<http://linkedgeodata.org/ontology/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT *
FROM <http://linkedgeodata.org>
WHERE
{
?place a lgdo:Place .
?place rdfs:label ?label .
}
LIMIT 100
... и, наконец, следующий запрос возвращает 100 мест в Европе:
PREFIX lgdo:<http://linkedgeodata.org/ontology/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT *
FROM <http://linkedgeodata.org>
WHERE
{
?place a lgdo:Place .
?place rdfs:label ?label .
?place <http://linkedgeodata.org/property/is_in%3Acontinent> "Europe" .
FILTER ( lang(?label) = "" )
}
LIMIT 100
Обратите внимание, что выражение FILTER предназначено для фильтрации каждой языковой метки, имеющей языковой тег, то есть простые литералы будут отображаться с этим запросом.