我對wikidata非常陌生。我只是覺得wikidata使用了很多物化。如何以編程方式從維基實體獲取所有可用信息?
假設我們想要獲得奧巴馬提供的所有信息。如果我們要從DBpedia做到這一點,我們只需使用一個簡單的查詢: select * where {<http://dbpedia.org/resource/Barack_Obama> ?p ?o .}
這將返回奧巴馬是主題的所有屬性和值。本質上,結果與此頁面相同:http://dbpedia.org/page/Barack_Obama
,而查詢結果採用我需要的格式。
我想知道如何用Wikidata做同樣的事情。這是奧巴馬的維基數據頁面:https://www.wikidata.org/wiki/Q76
。假設我想要在這個頁面上的所有聲明。但是這個網頁上幾乎所有的聲明都被認爲具有排名和限定詞等。例如,對於「受過教育」的部分,它不僅有學校,還有「開始時間」和「結束時間」由於奧巴馬不在這些學校,所有學校都排名正常。
我可以通過獲取truthy語句(使用https://query.wikidata.org)得到所有的學校:
SELECT ?school ?schoolLabel WHERE {
wd:Q76 wdt:P69 ?school .
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
}
}
上面的查詢將簡單的返回所有的學校。
如果我想要得到的開始時間和學校的結束時間,我需要這樣做:
SELECT ?school ?schoolLabel ?start ?end WHERE {
wd:Q76 p:P69 ?school_statement .
?school_statement ps:P69 ?school .
?school_statement pq:P580 ?start .
?school_statement pq:P582 ?end .
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
}
}
但事實是,不看實際的網頁,我怎麼會知道?school_statement有pq:P580和pq:P582,即「開始時間」和「結束時間」?這一切都歸結爲一個問題,我如何從https://www.wikidata.org/wiki/Q76
獲得所有信息(包括物化)?
最後,我希望像這樣的表: ||predicate||object||objectLabel||qualifier1||qualifier1Value||qualifier2||qualifier2Value||...