我有一个英国的地方清单。我想从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 .
}
我在做什么错?最初如何获取一个位置的信息,而下一步如何获取列表中所有位置的信息?此外,如果我可以添加条件以确保该地点属于英国,那将是很棒的。
非常感谢。
答案 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 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 .
}
两者之间应该没有太大区别;也许第二秒要快一点。