Skip to content

Wikidata oriented datasets

Peter edited this page Sep 15, 2020 · 5 revisions

[linha|classe_semantica]<>--1..*[coluna|tipo;valor;referencia]
[coluna]----1[fonte|principal;secundaria]

As fontes

São três tipos de fonte básicas:

  • A Wikidata, onde experts editam gerando correções e atualizações, eventualmente novas colunas.
  • A fonte principal, que determina a chave primária e dados sensíveis. Determinada por exemplo por coleta direta no diário oficial e/ou planilhas oficiais.
  • Fontes secundárias não utilizada na wikidata mas referentes ao mesmo dado obtido na Wikidata. Se prestam a fazer verificação cruzada.
  • Fontes-extra, de dados não-usados na Wikidata mas necessários ao dataset. Podem ser dados calculados.

O processo

Os tipos de atualização são determinados pelos tipos de fonte: atualização da fonte principal, tal como IBGE, que requer ser "puxada" para cá; atualização das fontes secundárias supostamente já abastecidas na Wikidata, portanto requer "puxar a Wikidata para cá"... e fontes-extra ou fontes secundárias, também puxadas para cá, e para fazer verificação cruzada.

  1. Trazer ou atualizar a fonte principal atualizada
  2. Atualizar dump Wikidata
  3. Auditar
  4. Trazer demais fontes e auditar
  5. Gerar sugestões de correção da Wikidata se necessário.

Resgatando uma propriedade

Ver Load to SQL and save back to CSV para obter tmpcsv_br_state_codes. Ver tb para scan city em Ingestão dump_wikidata no PostgreSQL.

Os dados Wikidata estão listados por UF, por exemplo /opt/gits/state-codes/data/dump_wikidata/GO.json.

CREATE or replace VIEW vw_state_codes_wikidata_json AS
  WITH t3 AS (
    SELECT replace(f,'.json','') as statename,
           f as fname,
           '/opt/gits/state-codes/data/dump_wikidata' AS fpath,
           '/opt/gits/state-codes/data/dump_wikidata' ||'/'|| f as f
    FROM pg_ls_dir('/opt/gits/state-codes/data/dump_wikidata') t(f)
    where f ~ '\.json$'
  )
  SELECT statename, fname,
         to_jsonb( pg_stat_file(f2) ) || jsonb_build_object('fpath',fpath) fmeta,
         pg_read_file(f2,true)::jsonb as jcontent
  FROM  ( SELECT *, fpath ||'/'|| fname as f2 FROM t3 ) t4a
;
CREATE VIEW vw_state_codes_wikidata_osmid  AS
  SELECT statename, jcontent->>'id' AS wikidata_id,
      (jcontent->'claims'->'P402'->0->>'value')::bigint AS osm_id,
      (jcontent->'claims'->'P1585'->0->>'value')::bigint AS local_id
  FROM vw_state_codes_wikidata_json
;

INSERT INTO optim.jurisdiction
WITH t AS (
   SELECT
    COALESCE(w.osm_id::bigint,-76*10000000 -ibge_id::bigint) AS osm_id,
    76         AS jurisd_base_id,
    ibge_id    AS jurisd_local_id,
    c.name,
    c.state    AS parent_abbrev,
    c.abbrev3  AS abbrev,
    c.wikidata_id, c.lexlabel, c.isolabel_ext, c.ddd, c.info
  FROM ingest.city c
       LEFT JOIN cache_wikidata_city w ON 'Q'||c.wikidata_id=w.wikidata_id AND w.local_id::int=ibge_id
  UNION
  SELECT w.osm_id,       76  AS jurisd_base_id,     s."idIBGE"::bigint    AS jurisd_local_id,
       s.name,         'BR' AS parent_abbrev,     s.subdivision AS abbrev,
       replace(w.wikidata_id,'Q','')::bigint,  s."lexLabel" AS lexlabel,  'BR-'||s.subdivision AS isolabel_ext,
       null as ddd,    json_build_object(
  'region',s.region, 'name_prefix',s.name_prefix, 'id',s.id, 'creation',s.creation, 'extinction',s.extinction,
  'timeZone',s.timeZone, 'category',s.category, 'utcOffset',s.utcOffset,  'utcOffset_DST',s.utcOffset_DST, 
   'postalCode_ranges',s.postalCode_ranges,  'km2',s.km2,  'utm_zones',s.utm_zones,  'borders',s.borders,  'notes',s.notes
) as info
  FROM tmpcsv_br_state_codes s INNER JOIN vw_state_codes_wikidata_osmid w
     ON w.wikidata_id=s."wdId"
  WHERE w.osm_id is not null
 ) SELECT * FROM t ORDER BY 2,3
;