2016-09-27 90 views
3

這SPARQL請求類型會在維基數據稱爲「柏林」所有城市:篩選由維基數據

SELECT DISTINCT ?item ?itemLabel ?itemDescription WHERE { 

    ?type (a | wdt:P279) wd:Q515. # Sub-type of city 
    ?item wdt:P31 ?type. 

    ?item rdfs:label "Berlin"@en. 
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } 
} 

問題:它returns zero result

同時,下面correctly finds Q64(資本和德國的城邦),但它也返回了很多其他的東西叫做柏林,所以我想在城市過濾請求(然後在以後的階段,我們將訂這些城市的人口,但就是這個問題的範圍之外)

SELECT DISTINCT ?item ?itemLabel ?itemDescription WHERE { 
    ?item rdfs:label "Berlin"@en. 
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } 
} 

注:我爲獲得城市的子類的實例代碼(柏林是一個big city這是city子類)似乎正常工作如this query的結果所示。

回答

1

您只能查詢數據集中包含的數據。

如果試圖查詢

SELECT DISTINCT ?item ?itemLabel ?itemDescription ?type1 ?type2 WHERE { 
    ?item rdfs:label "Berlin"@en. 
    optional{?item rdf:type ?type1 } 
    optional{?item wdt:P279 ?type2 } 
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } 
} 

的替代它沒有返回類型,既不rdf:type也不wdt:P279連接。

如果你看看entity of the capital and city state Berlin,你可以看到有關於「實例」的信息,但是這個屬性應該是https://www.wikidata.org/wiki/Property:P31。沒有一個鏈接到wd:Q515,我想知道你從哪裏得到這個想法。

但說實話,我不知道太多關於維基數據和對我來說,它爲什麼不使用rdf:type目前尚不清楚,但對於RDF數據集的通用模式是使用

?s rdf:type/rdfs:subClassOf* SUPER_CLASS .

如果我們假設有rdf:type信息可用。

+0

@無論誰給了我一個倒下的機會:我對倒計時錶示滿意,但如果我能夠知道原因,這樣可以幫助我很多,這樣我可以擴展自己的知識並改進未來的答案。 – AKSW

+0

我不是那個低調的人。注:柏林是大城市的一個例子,它本身就是城市的一個子類。 –

+0

謝謝你的提示。我仍然需要了解更多有關維基數據中使用的不同實體的信息,而不是像舊的RDF/RDFS,如'rdf:type'或'rdfs:subClassOf'。 – AKSW

1

如果檢查WD類型:Q64是

SELECT DISTINCT ?type ?typeLabel WHERE { 
wd:Q64 (a | wdt:P31) ?type. 
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } 
} 
ORDER BY ?item 

沒有他們的一個實例是市(WD:Q515)或子類的吧。 看起來像數據問題。也許你應該聯繫維基數據。

+0

柏林是大城市的一個例子,它本身就是城市的一個子類。所以我不認爲有任何數據問題。 –

+0

你在哪裏看到這個? – chrisis

+0

運行上面的查詢我只得到2個結果,他們都不是大城市。 (WD:Q1549591)。同時在其他城市運行原始查詢,例如波士頓我得到了預期的結果。我們中的一個失去了明顯的東西。可能是我。 – chrisis

3

這是一個維基的錯誤。

根據維基數據的Jura1,這是維基數據中的一個錯誤,是由某人對「首選排名」的實驗引起的。在https://www.wikidata.org/wiki/Wikidata:Project_chat#P31_inconsistency.3F

該bug已被修正剛纔

討論。

+0

注意「的子類」好吧,它現在很好用。正如評論一樣,您需要查詢城市的直接子類。如果使用SPARQL 1.1屬性路徑,則可以涵蓋實體不屬於城市的直接子類的情況。 – AKSW

+0

@AKSW:的確,從現在開始,我將使用此語法來遞歸地獲取所有子類:http://opendata.stackexchange.com/a/9743/754乾杯! –