0

谁能告诉我任何 SPARQL 查询以从http://www4.wiwiss.fu-berlin.de/factbook/sparql获取所有国家的所有接壤国家?

例如阿富汗有:factbook:landboundary db:China, factbook:landboundary db:Iran, factbook:landboundary db:Pakistan, factbook:landboundary db:Tajikistan, factbook:landboundary db:Turkmenistan

我尝试获取数据:

SELECT ?country ?name ?neighbour
WHERE {
?country rdf:type factbook:Country .
?country rdfs:label ?name.
OPTIONAL{
  ?country factbook:landboundary ?neighbour.
 }
}

以以下消息结束:

rethrew: de.fuberlin.wiwiss.d2rq.D2RQException: Table 'factbook.neighbors' doesn't exist: SELECT DISTINCT `T0_neighbors`.`name_encoded` FROM `bordercountries` AS `T0_bordercountries`, `neighbors` AS `T0_neighbors`, `countries` AS `T0_countries` WHERE `T0_bordercountries`.`Landboundaries_bordercountries_title` = `T0_neighbors`.`Name` AND `T0_bordercountries`.`Name` = `T0_countries`.`Name` AND `T0_countries`.`name_encoded` = 'Aruba' (E0)

我在http://answers.semanticweb.com上问过同样的问题,但还没有运气,所以我在这里试试运气

4

2 回答 2

1

故障似乎是由内部系统错误引起的。您的 SPARQL 查询没有任何语法错误,并且您提供的谓词根据数据是有效的。

但是,我不明白您的查询应该如何返回一个特定国家的邻居。也许你想尝试这样的事情:

SELECT DISTINCT ?neighbor
WHERE {
    ?neighbor rdf:type factbook:Country .
    ?neighbor factbook:landboundary db:Afghanistan .
}
于 2012-09-09T18:02:23.297 回答
0

很久以后,并且不完全是这个问题的答案(CIA Factbook 的 SPARQL 端点目前似乎已关闭),但 WikiData 提供了一些示例,如何根据https://query上的数据集获取毗邻国家.wikidata.org/

例如,如果您打开示例并搜索“边界”,您会得到“与喀麦隆共享边界的国家”的查询:

#Population of countries sharing a border with Cameroon
#defaultView:LineChart
SELECT ?country ?year ?population ?countryLabel WHERE {
  {
    SELECT ?country ?year (AVG(?population) AS ?population) WHERE {
      {
        SELECT ?country (str(YEAR(?date)) AS ?year) ?population WHERE {
          ?country wdt:P47 wd:Q1009;  # shares border with Cameroon
                   p:P1082 ?populationStatement.
          ?populationStatement ps:P1082 ?population;
                               pq:P585 ?date.
        }
      }
    }
    GROUP BY ?country ?year
  }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}

要了解这一点,必须知道(或弄清楚)这wd:Q1009实际上是喀麦隆。不知道该怎么做。这个例子还显示了一个 - imo 不是很有用 - 按年份显示周边国家的人口。

没有额外数据的更简单的版本是:

SELECT ?country ?countryLabel WHERE {
  ?country wdt:P47 wd:Q1009  # shares border with Cameroon
  SERVICE wikibase:label { 
    bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
  }
}

(这SERVICE wikibase:label是一个WikiData 扩展

最后,所有国家的所有邻国可能是:

SELECT ?country ?countryLabel ?neighbourLabel ?neighbour WHERE {
  ?country wdt:P31 wd:Q6256;
           wdt:P47 ?neighbour
  SERVICE wikibase:label { 
    bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
  }
} ORDER BY ?countryLabel ?neighbourLabel 
于 2018-08-25T10:20:56.063 回答