从 DBpedia 获取以色列所有定居点坐标

Get all settlements coordinates in Israel from 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")) } 

但我只得到了几个结果。

例如我没有得到:

有什么改进查询的想法吗?

谢谢。

您得不到您想要的结果,因为他们没有您要求的地理信息。您可以通过 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>. }