Skip to content

JSON Schema ​

Cada archivo de data/ tiene un JSON Schema (draft-07) en schema/. Los esquemas se generan a partir de los tipos de TypeScript, de modo que los tipos, los esquemas y los datos no pueden divergir: la CI falla cuando cualquiera de los tres no coincide.

Archivo de datosEsquema
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

El $id de cada esquema es su URL en este sitio, p. ej. https://pieterjanscheir.github.io/belgica/schema/courts.schema.json. También están en el paquete npm como belgica/schema/courts.schema.json.

Validar los datos ​

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

# Fija un release tag que incluya schema/; hasta que salga el primero, usa 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

Normalmente lo querrás cuando guardas una copia de los datos (un fork con registros extra, una descarga en caché) y quieres saber que sigue teniendo la estructura que espera el paquete.

Generar tipos para otros lenguajes ​

Como los esquemas son estándar, puedes generar modelos en lugar de escribirlos a mano: datamodel-code-generator para Python (Pydantic), quicktype para C#, Go, Java, Kotlin, Swift y más.

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

datapackage.json ​

La raíz del repositorio tiene un datapackage.json, un descriptor Frictionless Data Package: el archivo de metadatos estándar para conjuntos de datos abiertos. Enumera cada archivo de datos con su título, descripción, esquema, fuentes oficiales y licencia, y dos campos propios:

  • lastReviewed: el día en que el conjunto de datos se comprobó por última vez frente a sus fuentes;
  • reviewEveryMonths: cada cuánto debe volver a comprobarse. La comprobación de actualidad abre un issue cuando un conjunto de datos está atrasado.

Código bajo MIT, datos bajo CC BY 4.0. Datos de referencia, no asesoramiento jurídico: consulta las fuentes oficiales.