2017-09-23 106 views
2

我的問題是我如何可以提取所有屬性,並有相應的標籤也呈現在網頁上從wikidata最好通過SPARQL。wikidata獲取標籤和項目的值的所有屬性

以wikidata上的Google條目爲例。對於P414(證券交易所)或P159屬性,有像P969(位於街道地址)的子屬性。他們實際上一旦出現querywbgetentities就顯示爲合格。 wbgetentities的問題是標籤丟失。我得到以下SPARQL查詢所需的輸出(例如wdt:P17 => country => United States of America):

SELECT ?prop_id ?prop_label ?prop_val_label WHERE { 
    VALUES (?company) { 
    (wd:Q95) 
    } 
    ?company ?prop_id ?company_item. 
    ?wd wikibase:directClaim ?prop_id. 
    ?wd rdfs:label ?prop_label. 
    OPTIONAL { 
    ?company_item rdfs:label ?prop_val. 
    FILTER((LANG(?prop_val)) = "en") 
    } 
    BIND(COALESCE(?prop_val, ?companyItem) AS ?prop_val_label) 
    FILTER((LANG(?prop_label)) = "en") 
} 

但是,這些「子屬性」丟失,因爲它們不直接受索賠。提取單個語句限定符我可以這樣做:

SELECT ?company ?hq ?country WHERE { 
    wd:Q95 p:P159 ?company. 
    OPTIONAL { 
    ?company ps:P159 ?hq. 
    ?company pq:P17 ?country. 
    } 
} 

但問題是如果有一種方法可以將所有內容組合到一個查詢中嗎?

回答

3

對維基數據的數據模型相關鏈接:

您的查詢應該這樣的:

SELECT ?wdLabel ?ps_Label ?wdpqLabel ?pq_Label { 
    VALUES (?company) {(wd:Q95)} 

    ?company ?p ?statement . 
    ?statement ?ps ?ps_ . 

    ?wd wikibase:claim ?p. 
    ?wd wikibase:statementProperty ?ps. 

    OPTIONAL { 
    ?statement ?pq ?pq_ . 
    ?wdpq wikibase:qualifier ?pq . 
    } 

    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" } 
} ORDER BY ?wd ?statement ?ps_ 

Try it!

只有限定符及其值包含在結果中。包括起源參考和價值註釋(例如時間精度)。如果您需要添加它們,請寫評論。