JSON Schema
data/ içindeki her dosyanın schema/ içinde bir JSON Schema (draft-07) şeması vardır. Şemalar TypeScript tiplerinden üretilir; böylece tipler, şemalar ve veriler birbirinden kopamaz: üçünden biri diğerleriyle uyuşmadığında CI başarısız olur.
| Veri dosyası | Şema |
|---|---|
data/judicial-areas.json | judicial-areas.schema.json |
data/arrondissements.json | arrondissements.schema.json |
data/cantons.json | cantons.schema.json |
data/canton-boundaries.json | canton-boundaries.schema.json |
data/municipalities.json | municipalities.schema.json |
data/regions.json | regions.schema.json |
data/provinces.json | provinces.schema.json |
data/courts.json | courts.schema.json |
data/prisons.json | prisons.schema.json |
data/houses-of-justice.json | houses-of-justice.schema.json |
data/postal-codes.json | postal-codes.schema.json |
data/interest-rates.json | interest-rates.schema.json |
Her şemanın $id değeri, bu sitedeki URL'sidir; ör. https://pieterjanscheir.github.io/belgica/schema/courts.schema.json. Şemalar npm paketinde de belgica/schema/courts.schema.json olarak bulunur.
Verileri doğrulama
import json
from urllib.request import urlopen
from jsonschema import validate # pip install jsonschema
# schema/ içeren bir release tag'e sabitleyin; ilki çıkana kadar main kullanın
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)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) // trueBuna çoğunlukla verilerin bir kopyasını tuttuğunuzda (ek kayıtlar içeren bir fork, önbelleğe alınmış bir indirme) ve kopyanın hâlâ paketin beklediği yapıda olup olmadığını bilmek istediğinizde ihtiyaç duyarsınız.
Başka diller için tip üretme
Şemalar standart olduğu için modelleri elle yazmak yerine üretebilirsiniz: Python (Pydantic) için datamodel-code-generator; C#, Go, Java, Kotlin, Swift ve daha fazlası için quicktype.
datamodel-codegen --input courts.schema.json --input-file-type jsonschema --output courts.pydatapackage.json
Repository'nin kökünde bir datapackage.json bulunur: açık veri kümeleri için standart metadata dosyası olan bir Frictionless Data Package tanımlayıcısı. Her veri dosyasını başlığı, açıklaması, şeması, resmî kaynakları, lisansı ve bize ait iki alanla birlikte listeler:
lastReviewed: veri kümesinin kaynaklarıyla en son karşılaştırıldığı gün;reviewEveryMonths: ne sıklıkla yeniden kontrol edilmesi gerektiği. Bir veri kümesinin süresi geçtiğinde güncellik kontrolü bir issue açar.