我尝试使用以下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 回答
首先要知道的是,DBpedia数据是一个移动目标,就像它来自的维基百科数据一样 . 维基百科的更新最终将成为DBpedia的一部分 . 更快,他们将成为DBpedia-live的一部分 .
当您包含两个谓词时,
OPTIONAL
谓词出现的值的问题似乎是当前托管DBpedia的Virtuoso版本中的错误 . 我建议您查看whether it's been reported yet,如果没有,请自行报告,并监控问题 .至于限制你回来的城市的大陆 - 通常最容易检查你想要的实体(或附近),找到相关的属性/谓词/属性 . 例如,Aachen-Mitte的
dbo:country
为Germany,其中包含rdf:type
,包括yago:EuropeanCountries
- 这可能是您想要的,但可能尚未应用于所有此类 . 你需要为你的模式添加一个三元组,如 -