откуда взять данные обо всех европейских городах, деревнях? - PullRequest
2 голосов
/ 07 марта 2012

Я ищу данные о всех европейских городах, деревнях и поселках. В частности, меня интересуют имя, почтовые индексы, телефонные коды, широта, долгота, население и страна, к которой он принадлежит.

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 Ответ

4 голосов
/ 07 марта 2012

Для поиска соответствующих наборов данных вы можете взглянуть на каталог наборов данных в виде концентратора данных или плат Q & A данных в виде Получить данные .

Re,Ваши вторые вопросы, кажется, что данные в 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 предназначено для отфильтровывания каждой языковой метки, котораяимеет языковой тег, т.е. с этим запросом будут отображаться простые литералы.

...