我在http://dbpedia.org/sparql:
输入以下查询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> .
,但有可能有些地方可能没有将UK标记为国家)。
问题是它似乎没有拉回很多地方(290左右)。将population
替换为populationTotal
给出了1588个位置,我不知道(语义上)应该使用哪一个。
这是底层数据的限制,还是在我制定查询的方式中可以改进的东西?
注意:这个问题现在主要是学术性的,因为我从http://download.geonames.org/export/dump/GB.zip得到了信息,但我更喜欢使用开放数据和语义网,所以张贴这个问题,看看是否有什么我错过了,或者找出是否有一个缺点,如何从维基百科上抓取数据,以及我是否可以参与。
您的查询只返回具有populationTotal值的位置。例如,如果城镇A在数据库中的populationTotal为"10,000",而城镇B为NULL,则只返回城镇A。
如果要返回英国的所有位置,则需要将population指定为可选参数。此查询将显示所有位置,以及拥有该数据的位置的人口。
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 .
}