2015-10-15 49 views
1

我一直在玩弄維基數據API一段時間。我知道如何通過名稱和Q號獲得物品(實體)。但我似乎無法弄清楚如何獲得他們的財產權利。我正在尋找的是P214(爲作者VIAF標識符)從維基資料庫獲得VIAF標識符

例如,我已經使用這個查詢他的全名

https://www.wikidata.org/w/api.php?action=wbsearchentities&search=Douglas%20Adams&language=en 

得到一個作家返回頁面名稱的數組和鏈接到名爲「道格拉斯亞當斯」的網頁上。但沒有屬性。

然後我就可以用Q ID列表來查詢性能,像這樣

https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q42&language=en 

的VIAF屬性,並將其用於Q42的價值在那裏。但是這是一個非常笨拙的方法,因爲我從第一個查詢中得到一個結果列表,然後我必須對它們進行迭代,並查詢每個屬性以尋找那個屬性。

tl; dr:有沒有一種更簡單的方法來獲取項目名稱的項目屬性列表?

+0

這使得它只是一個簡單的,但如果你知道你想要什麼屬性,使用wbgetclaims而不是wbgetentities。例如。 https://www.wikidata.org/w/api.php?action=wbgetclaims&format=json&entity=Q42&property=P214 – Ainali

+0

我已經試過了,你將不得不確保你的Q包含P214以便你的查詢工作。因爲我需要通過名稱搜索來獲得'Q'然後'viafId',所以我需要首先在Q(或者如果結果如此類型的情況下Q的列表)中,在繼續之前確認P214。 – svarog

+0

您無法從沒有P214的項目獲取VIAF標識符。因此,查詢將適用於您有興趣獲取結果的所有項目,在查詢值之前無需進行驗證。例如:Q1沒有P214,所以沒有VIAF標識符。查詢https://www.wikidata.org/w/api.php?action=wbgetclaims&format=json&entity=Q1&property=P214會告訴你。 – Ainali

回答

0

我最終想出瞭如何使用wbgetentities操作按名稱獲取實體的屬性列表。我完全錯過了我可以通過titlessites參數進行查找來獲取實體,而不是僅僅使用相同的動作通過QID進行搜索。

什麼指着我對這個解決方案是本例中(隱藏在頁面的底部):

api.php?action=wbgetentities&sites=enwiki&titles=Berlin&languages=en

小的一面是,我還必須提供sites參數,但我能活與

編輯:

的SPARQL API只是我所需要的所有沿!

PREFIX wikibase: <http://wikiba.se/ontology#> 
PREFIX wd: <http://www.wikidata.org/entity/> 
PREFIX wdt: <http://www.wikidata.org/prop/direct/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 

SELECT ?viaf WHERE { 
    wd:Q42 wdt:P214 ?viaf 
    SERVICE wikibase:label { 
    bd:serviceParam wikibase:language "en" . 
    } 
} 

現在我得到的所有P214(VIAF)爲Q42(亞當斯),搭配素色對象符號?o更換wd:Q42,會讓我有VIAF ID屬性的所有實體,它的價值。

1

可能有效的一種間接方法是下拉包含P213的所有Q項的全面列表 - 因此在會話開始時會有幾MB,然後對於每個搜索,檢查是否有任何搜索結果在本地列表中。如果是,請繼續進行並進一步調用API以查看詳細信息 - 如果不是,則不會有興趣,因此您可以跳過它們。

這不會讓你在會議期間添加任何VIAF項目,但日常的變化相對較小,所以這不應該成爲主要關注的問題。

+0

幸運的是,Wikidata提供了[數據庫轉儲](https://www.wikidata.org/wiki/Wikidata:Database_download)的手段,所以這是一個很好的替代解決方案。 – svarog