【问题标题】:Getting coordinate information of UK places from DBpedia via SPARQL通过 SPARQL 从 DBpedia 获取英国地方的坐标信息
【发布时间】:2018-07-05 10:34:39
【问题描述】:

我有一份英国地点列表。我想从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 .
}

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

非常感谢。

【问题讨论】:

  • 使用"Llandysul"@en 而不是"Llandysul"。您的列表有多大?
  • DBpedia 中的位置数据非常异构,具体取决于地点的类型。可以使用dbo:country、维基百科分类等属性,应该结合使用
  • 列表:通过VALUES 内联数据或通过IN 基于过滤器
  • @Stanislav,我有 204 个位置。 “@en”添加返回一个有效的城市。有没有办法处理整个列表,或者我应该编写一个脚本来迭代列表添加并处理查询?
  • @AKSW 与国家结合,很有意义,但我该如何编写查询。一个有效的查询将非常有帮助。非常感谢。

标签: sparql rdf ontology dbpedia opendata


【解决方案1】:

我认为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 .
}

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

【讨论】:

  • 有什么理由更喜欢 filter/in 而不是更简单的values ?label { "Llandysul"@en "Rostrevor"@en ... }
  • 无特殊原因; filter/in 只是我当时想到的第一个。
  • 是否也可以确定地点国家是英国?我通过添加以下过滤器来限制坐标:''FILTER (?lng > -8.64 AND ?lng 49.35 )'',但我想看看如何将它与国名。
  • 国家/地区很少是正方形,因此您的过滤器的实用性有限。您可以尝试查看您感兴趣的一些地方的描述,并可能在WHERE 模式中添加类似?place dbo:country dbr:United_Kingdom . 的内容,但我注意到{ &lt;http://dbpedia.org/resource/Rostrevor&gt; dbo:country dbr:Northern_Ireland, dbr:United_Kingdom } 和其他?place 可能没有任何@ 987654335@ 在所有...
猜你喜欢
  • 2017-11-25
  • 1970-01-01
  • 2014-03-17
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多