2016-08-11 6 views
0

Я действительно новичок в викидате. Я просто подумал, что викидата использует много овеществления.Как программно получить всю доступную информацию от объекта Wikidata?

Предположим, мы хотим получить всю информацию для Обамы. Если мы собираемся сделать это из DBpedia, мы бы просто использовали простой запрос: select * where {<http://dbpedia.org/resource/Barack_Obama> ?p ?o .} Это вернет все свойства и ценности, с которыми Обама является субъектом. По сути, результат такой же, как на этой странице: http://dbpedia.org/page/Barack_Obama, в то время как результат запроса в нужном формате.

Мне интересно, как сделать то же самое с Wikidata. Это страница 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

вы, вероятно, следует пойти на (более конкретно, wbgetentities модуль) Wikidata data API вместо конечной точки 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