通过SPARQL从DBpedia获取英国地点的坐标信息

时间:2018-07-05 10:34:39

标签: sparql rdf ontology dbpedia opendata

我有一个英国的地方清单。我想从http://dbpedia.org获取他们的纬度和经度信息。 我刚刚开始学习SPARQL,并且对DBpedia不太熟悉。目前,我正在尝试检索至少一个地方,但到目前为止没有成功。如果我设法获得一席之地,那么我将尝试获得所有席位。

地点列表如下:

Llandysul
Rostrevor
Lee on the Solent
.
.
.

我想要得到的是地名,纬度和经度。 如何使用SPARQL实现这一目标?

我已经在http://dbpedia.org/sparql上尝试了以下查询,至少获得了一个地方(Llandysul)的信息,但即使这样也不起作用。

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 :(得分:2)

我认为this query将获得what you want,但请注意,您必须具有正确的标签;没有部分匹配项(因此"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所建议的,您还可以使用this query variantresults)-

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 .
}

两者之间应该没有太大区别;也许第二秒要快一点。

相关问题