2016-08-11 81 views
0

我對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||...

回答

2

你應該去爲Wikidata data API(更具體的wbgetentities模塊),而不是SPARQL端點:

你的情況: https://www.wikidata.org/w/api.php?action=wbgetentities&format=json&ids=Q76

您應該找到所需的所有資格數據:例如:entities.Q76.claims.P69.1

{ mainsnak: 
    { snaktype: 'value', 
    property: 'P69', 
    datavalue: 
     { value: { 'entity-type': 'item', 'numeric-id': 3273124, id: 'Q3273124' }, 
     type: 'wikibase-entityid' }, 
    datatype: 'wikibase-item' }, 
    type: 'statement', 
    qualifiers: 
    { P580: 
     [ { snaktype: 'value', 
      property: 'P580', 
      hash: 'a1db249baf916bb22da7fa5666d426954435256c', 
      datavalue: 
      { value: 
       { time: '+1971-01-01T00:00:00Z', 
       timezone: 0, 
       before: 0, 
       after: 0, 
       precision: 9, 
       calendarmodel: 'http://www.wikidata.org/entity/Q1985727' }, 
      type: 'time' }, 
      datatype: 'time' } ], 
    P582: 
     [ { snaktype: 'value', 
      property: 'P582', 
      hash: 'a065bff95f5cb3026ebad306b3df7587c8daa2e9', 
      datavalue: 
      { value: 
       { time: '+1979-01-01T00:00:00Z', 
       timezone: 0, 
       before: 0, 
       after: 0, 
       precision: 9, 
       calendarmodel: 'http://www.wikidata.org/entity/Q1985727' }, 
      type: 'time' }, 
      datatype: 'time' } ] }, 
    'qualifiers-order': [ 'P580', 'P582' ], 
    id: 'q76$464382F6-E090-409E-B7B9-CB913F1C2166', 
    rank: 'normal' } 

那麼你可能會有興趣的方式extract readable results from those results

相關問題