2015-10-14 129 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