通过 SPARQL 从 DBpedia 获取英国地方的坐标信息
Getting coordinate information of UK places from DBpedia via SPARQL
我有英国的地点列表。我想从 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 .
}
我做错了什么?怎样才能先得到一个地方的信息,然后在下一步得到一个列表里面所有地方的信息呢?此外,如果我可以添加一个条件来确保该地点属于英国,那就太好了。
非常感谢。
我认为this query will get 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 variant (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 .
}
两者之间应该没有太大区别;第二个可能会快一点。
我有英国的地点列表。我想从 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 .
}
我做错了什么?怎样才能先得到一个地方的信息,然后在下一步得到一个列表里面所有地方的信息呢?此外,如果我可以添加一个条件来确保该地点属于英国,那就太好了。
非常感谢。
我认为this query will get 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 variant (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 .
}
两者之间应该没有太大区别;第二个可能会快一点。