0

我有一个英国地方的清单。我想从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 .
}

我究竟做错了什么?怎样才能得到一个地方的初始信息,以及在一个列表中的所有地方的下一步信息?此外,如果我可以添加一个条件以确保该地点属于英国,那就太好了。

非常感谢。

4

1 回答 1

2

我认为这个查询会得到你想要的,但请注意你必须有正确的标签;没有部分匹配(所以"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 建议的那样,您也可以使用此查询变体results)-

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

两者之间应该没有太大区别;第二个可能会快一点。

于 2018-07-05T19:29:49.707 回答