2012-03-28 91 views
3

我確定我想要做的事很容易,但我似乎無法得到正確的查詢。我在數據集中記錄具有諸如城市名稱的值的記錄,例如'紐約'和相應的國家代碼,例如'美國'。我也可以訪問完整的國家名稱和國家ISO代碼。dbpedia SPARQL查詢獲得給定城市的特定值

我想獲得人口和抽象價值的這些城市離DBpedia中,通過使用where子句,如:

Get population where name = "New York" and isoCountryCode = "US" 

我搜索了這個求助無果。

到目前爲止,我已經好心的@rohk與此查詢,它不完全爲所有地點的工作幫助:紐約

SELECT DISTINCT ?city ?abstract ?pop 
WHERE { 
    ?city rdf:type schema:City ; 
    rdfs:label ?label ; 
    dbpedia-owl:abstract ?abstract ; 
    dbpedia-owl:country ?country ; 
    dbpedia-owl:populationTotal ?pop . 
    ?country dbpprop:countryCode "USA"@en . 
    FILTER (lang(?abstract) = 'en' and regex(?label, "New York City")) 
} 

上述工作,但是當我將其更改爲:

SELECT DISTINCT ?city ?abstract ?pop 
WHERE { 
    ?city rdf:type schema:City ; 
     rdfs:label ?label ; 
     dbpedia-owl:abstract ?abstract ; 
     dbpedia-owl:country ?country ; 
     dbpedia-owl:populationTotal ?pop . 
    ?country dbpprop:countryCode "THA"@en . 
    FILTER (lang(?abstract) = 'en' and regex(?label, "Bangkok")) 
} 

它不返回泰國曼谷的結果。

我只是不能得到正確的SPARQL查詢,我敢肯定我是愚蠢的與我的查詢。如果任何一位大師能夠提供幫助,我會很感激。謝謝!

回答

2

此查詢工作

SELECT DISTINCT * 
WHERE { 
    ?city rdf:type schema:City ; 
     rdfs:label ?label ; 
     dbpedia-owl:abstract ?abstract ; 
     dbpedia-owl:country ?country ; 
     dbpprop:website ?website ; 
     dbpedia-owl:populationTotal ?pop . 
    ?country dbpprop:countryCode "USA"@en . 
    FILTER (lang(?abstract) = 'en' and regex(?label, "New York City")) 
} 

編輯:曼谷,有2個問題:泰國

  • 沒有一個國家代碼:你可以使用rdfs:label "Thailand"@en代替。
  • 曼谷的rdf:type不是schema:Citydbpedia-owl:Settlement

這裏是曼谷

SELECT DISTINCT * 
WHERE { 
    ?city rdf:type dbpedia-owl:Settlement ; 
     rdfs:label "Bangkok"@en ; 
     dbpedia-owl:abstract ?abstract ; 
     dbpedia-owl:populationTotal ?pop ; 
     dbpedia-owl:country ?country ; 
     dbpprop:website ?website . 
    ?country rdfs:label "Thailand"@en . 
    FILTER (lang(?abstract) = 'en') 
} 
+0

嗨,謝謝!如下所述,這似乎返回的是國家的細節而不是城市的細節,是否有任何方法可以指定地點類型必須是城市或城鎮,而不是州或國家?再次感謝。 – Paul 2012-03-28 10:33:10

+0

對,我編輯了我的答案 – 2012-03-28 10:38:10

+0

刪除了我的意見並更新了實際問題和進度報告,謝謝! – Paul 2012-03-28 13:11:45

4

工作查詢我想你想是這樣的:

SELECT * WHERE { 
    ?x rdfs:label "New York City"@en. 
    ?x dbpedia-owl:populationTotal ?pop. 
    ?x dbpedia-owl:abstract ?abstract. 
} 

,僅保留英文摘要,加一個FILTER

SELECT * WHERE { 
    ?x rdfs:label "New York City"@en. 
    ?x dbpedia-owl:populationTotal ?pop. 
    ?x dbpedia-owl:abstract ?abstract. 
    FILTER (LANG(?abstract) = 'en') 
} 

「紐約州」是州,它沒有附上populationTotal附圖。 「紐約市」就是這座城市。

+0

非常感謝,我希望有一種方法可以將地點類型指定爲城市或城鎮? – Paul 2012-03-28 10:33:50

+0

有多種方式,它們都不能完美工作,它取決於你想要過濾的東西的種類。檢查'rdf:type','dcterms:subject'和'dbpprop:wikiPageUsesTemplate'屬性的值,以便可靠地選擇所需的實體。在你的查詢中加入這樣的一行可以工作:'?x rdf:type dbpedia-owl:City.' – cygri 2012-03-28 15:08:56

+0

謝謝。你正在幫助我學會不讓你們發瘋。 – Paul 2012-03-28 15:24:45