从DBpedia

时间:2016-11-29 13:05:06

标签: sparql dbpedia

对于我的申请,我想获得以色列(特拉维夫,海地等)大部分定居点的名称和地理坐标。

我的想法是从DBpedia获取它(查询英文页面对我来说已经足够了)。

我尝试了这个查询:

SELECT distinct ?subject AS ?mainSubject ?o1 AS ?name ?o2 AS ?point ?o3 AS ?country
WHERE {?subject ?property <http://dbpedia.org/ontology/PopulatedPlace>.
?subject <http://xmlns.com/foaf/0.1/name> ?o1.
?subject <http://www.georss.org/georss/point> ?o2.
?subject <http://dbpedia.org/ontology/country> ?o3.
filter (contains(str(?o3),"Israel")) } 

但我只得到了一些结果。

例如我没有得到:

任何更好查询的想法?

感谢。

1 个答案:

答案 0 :(得分:2)

您无法获得所需的结果,因为它们没有您要求的georss信息。你可以通过OPTIONAL子句来做到这一点。

SELECT distinct ?subject AS ?mainSubject ?o1 AS ?name ?o2 AS ?point ?o3 AS ?country WHERE {
   ?subject ?property <http://dbpedia.org/ontology/PopulatedPlace>.
   ?subject <http://xmlns.com/foaf/0.1/name> ?o1.
   OPTIONAL{?subject <http://www.georss.org/georss/point> ?o2.}
   ?subject <http://dbpedia.org/ontology/country> ?o3.
   filter (contains(str(?o3),"Israel")) } 

另一方面,您可以直接放置以色列的资源而不是FILTER:

SELECT distinct ?subject AS ?mainSubject ?o1 AS ?name ?o2 AS ?point WHERE {
   ?subject ?property <http://dbpedia.org/ontology/PopulatedPlace>.
   ?subject <http://xmlns.com/foaf/0.1/name ?o1.
   OPTIONAL{?subject <http://www.georss.org/georss/point> ?o2.}
   ?subject <http://dbpedia.org/ontology/country> <http://dbpedia.org/resource/Israel>. }