Skip to content

JSON Schema ​

Jede Datei in data/ hat ein JSON Schema (draft-07) in schema/. Die Schemas werden aus den TypeScript-Typen generiert, sodass Typen, Schemas und Daten nicht auseinanderdriften können: CI schlägt fehl, wenn eines der drei nicht zu den anderen passt.

DatendateiSchema
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

Die $id jedes Schemas ist seine URL auf dieser Website, z. B. https://pieterjanscheir.github.io/belgica/schema/courts.schema.json. Sie sind auch im npm-Package enthalten, als belgica/schema/courts.schema.json.

Die Daten validieren ​

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

# Auf einen Release-Tag festlegen, der schema/ enthält; bis der erste erscheint, main verwenden
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

Das brauchen Sie vor allem, wenn Sie eine Kopie der Daten pflegen (einen Fork mit zusätzlichen Einträgen, einen zwischengespeicherten Download) und wissen wollen, ob sie noch die Struktur hat, die das Package erwartet.

Typen für andere Sprachen generieren ​

Da die Schemas standardkonform sind, können Sie Modelle generieren, statt sie von Hand zu schreiben: datamodel-code-generator für Python (Pydantic), quicktype für C#, Go, Java, Kotlin, Swift und mehr.

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

datapackage.json ​

Der Root des Repositorys enthält eine datapackage.json, einen Frictionless Data Package-Deskriptor: die Standard-Metadatendatei für offene Datensätze. Sie führt jede Datendatei mit Titel, Beschreibung, Schema, amtlichen Quellen, Lizenz und zwei eigenen Feldern auf:

  • lastReviewed: der Tag, an dem der Datensatz zuletzt mit seinen Quellen abgeglichen wurde;
  • reviewEveryMonths: wie oft er erneut geprüft werden muss. Die Aktualitätsprüfung öffnet ein Issue, wenn ein Datensatz überfällig ist.

Code unter MIT, Daten unter CC BY 4.0. Referenzdaten, keine Rechtsberatung: Prüfen Sie die amtlichen Quellen.