Skip to content

JSON Schema ​

Cada ficheiro em data/ tem um JSON Schema (draft-07) em schema/. Os schemas são gerados a partir dos tipos TypeScript, para que os tipos, os schemas e os dados não possam divergir: a CI falha quando algum dos três discorda dos outros.

Ficheiro de dadosSchema
data/judicial-areas.jsonjudicial-areas.schema.json
data/arrondissements.jsonarrondissements.schema.json
data/cantons.jsoncantons.schema.json
data/canton-boundaries.jsoncanton-boundaries.schema.json
data/municipalities.jsonmunicipalities.schema.json
data/regions.jsonregions.schema.json
data/provinces.jsonprovinces.schema.json
data/courts.jsoncourts.schema.json
data/prisons.jsonprisons.schema.json
data/houses-of-justice.jsonhouses-of-justice.schema.json
data/postal-codes.jsonpostal-codes.schema.json
data/interest-rates.jsoninterest-rates.schema.json

O $id de cada schema é o seu URL neste site, p. ex. https://pieterjanscheir.github.io/belgica/schema/courts.schema.json. Também estão no pacote npm como belgica/schema/courts.schema.json.

Validar os dados ​

python
import json
from urllib.request import urlopen
from jsonschema import validate  # pip install jsonschema

# Fixe uma tag de release que inclua schema/; até sair a primeira, use main
TAG = "main"
BASE = f"https://raw.githubusercontent.com/pieterjanscheir/belgica/{TAG}"
courts = json.load(urlopen(f"{BASE}/data/courts.json"))
schema = json.load(urlopen(f"{BASE}/schema/courts.schema.json"))
validate(courts, schema)
ts
import { Ajv } from 'ajv'
import addFormats from 'ajv-formats'
import courts from 'belgica/data/courts.json' with { type: 'json' }
import schema from 'belgica/schema/courts.schema.json' with { type: 'json' }

const ajv = new Ajv()
addFormats(ajv)
ajv.validate(schema, courts) // true

Vai querer isto sobretudo quando guarda uma cópia dos dados (um fork com registos extra, um download em cache) e quer saber se ainda tem a estrutura que o pacote espera.

Gerar tipos para outras linguagens ​

Como os schemas são standard, pode gerar modelos em vez de os escrever à mão: datamodel-code-generator para Python (Pydantic), quicktype para C#, Go, Java, Kotlin, Swift e outras.

bash
datamodel-codegen --input courts.schema.json --input-file-type jsonschema --output courts.py

datapackage.json ​

A raiz do repositório tem um datapackage.json, um descritor Frictionless Data Package: o ficheiro de metadados standard para conjuntos de dados abertos. Lista cada ficheiro de dados com o seu título, descrição, schema, fontes oficiais, licença e dois campos próprios:

  • lastReviewed: o dia em que o conjunto de dados foi verificado pela última vez face às suas fontes;
  • reviewEveryMonths: com que frequência tem de voltar a ser verificado. A verificação de atualidade abre uma issue quando um conjunto de dados está em atraso.

Código sob MIT, dados sob CC BY 4.0. Dados de referência, não aconselhamento jurídico: consulte as fontes oficiais.