как программно получить всю доступную информацию из объекта Викиданных?

Я новичок в викиданных. Я только что подумал, что викиданные очень сильно овеществляют.

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

Мне интересно, как сделать то же самое с Викиданными. Это страница Викиданных Обамы: https://www.wikidata.org/wiki/Q76. Допустим, мне нужны все утверждения на этой странице. Но почти все утверждения на этой странице овеществлены в том, что у них есть ранги, квалификаторы и т. Д. Например, для части «получил образование» здесь есть не только школа, но также «время начала» и «время окончания». и все школы считаются нормальными, поскольку Обамы больше нет в этих школах.

Я мог бы просто получить все школы, получив правдивые утверждения (используя 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||...


person al3xtouch    schedule 11.08.2016    source источник


Ответы (1)


вам, вероятно, следует использовать API данных Викиданных (в частности, wbgetentities module) вместо конечной точки 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' }

Тогда вас могут заинтересовать способы извлечь из этих результатов удобочитаемые результаты

person maxlath    schedule 12.08.2016