首页 文章

通过sparql获取城市信息

提问于
浏览
0

我尝试使用以下SPARQL查询 .

SELECT distinct ?city ?cityName ?country ?population ?knownfor WHERE {
 ?city rdf:type dbo:City .
?city rdfs:label ?cityName.
?city dbo:country ?country.
OPTIONAL{
?city dbp:population ?population.
?city dbo:knownFor ?knownfor.
}

  FILTER (lang(?cityName) = 'en')
} ORDER BY ?city

但是,问题是 -

  • 并非每个城市都有 dbp:population 谓词,但有些城市有 dbp:populationTotal . 所以,对于一些城市,我们可以通过这个获得人口,但是当我在查询的可选部分写入时 -
OPTIONAL{
    ?city dbp:population ?population .
    ?city dbp:populationTotal ?populationTotal
}

这两个部分都变成空白 . dbo:knownFor 谓词也是如此(并非每个城市都有 knownFor 谓词) .

  • 如何在查询中指定我只想要欧洲城市?我找不到任何指定城市大陆的谓词

1 回答

  • 1

    首先要知道的是,DBpedia数据是一个移动目标,就像它来自的维基百科数据一样 . 维基百科的更新最终将成为DBpedia的一部分 . 更快,他们将成为DBpedia-live的一部分 .

    当您包含两个谓词时, OPTIONAL 谓词出现的值的问题似乎是当前托管DBpedia的Virtuoso版本中的错误 . 我建议您查看whether it's been reported yet,如果没有,请自行报告,并监控问题 .

    至于限制你回来的城市的大陆 - 通常最容易检查你想要的实体(或附近),找到相关的属性/谓词/属性 . 例如,Aachen-Mittedbo:countryGermany,其中包含 rdf:type ,包括 yago:EuropeanCountries - 这可能是您想要的,但可能尚未应用于所有此类 . 你需要为你的模式添加一个三元组,如 -

    ?country  a  yago:EuropeanCountries
    

相关问题