2015-10-14 125 views
0

我试着用下面的SPARQL查询。通过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 

但是,问题是 -

  1. 不是每个城市都有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-Mitte有一个dbo:countryGermany,其中有rdf:type s包括yago:EuropeanCountries - 这可能是你想要的,但可能还没有被应用到所有这些。你需要添加一个三重到你的模式 -

?country a yago:EuropeanCountries 
+0

感谢您的回答。雅,欧洲的所有城市都没有yago:EuropeanCountries谓词,这就是为什么这些城市失踪。但我的问题是,为什么这个谓词不见了? –

+1

DBpedia中缺少谓词,因为维基百科中没有进行分类。 DBpedia数据中的大多数错误必须通过更正DBpedia数据从中提取的维基百科内容来纠正。去编辑维基百科,等几个小时或几天,然后用DBpedia-live(来自Wikipedia firehose的更新)运行你的查询;或者等待3到9个月进行下一次批量提取,然后针对DBpedia运行您的查询。 – TallTed