Skip to content

JSON Schema ​

لكل ملف في data/ مخطط JSON Schema (draft-07) في schema/. تُولَّد المخططات من أنواع TypeScript، فلا يمكن أن تتباعد الأنواع والمخططات والبيانات: يفشل CI حين يختلف أي من الثلاثة.

ملف البياناتالمخطط
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

قيمة $id لكل مخطط هي رابطه على هذا الموقع، مثل https://pieterjanscheir.github.io/belgica/schema/courts.schema.json. وهي موجودة أيضًا في حزمة npm باسم belgica/schema/courts.schema.json.

التحقق من البيانات ​

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

# ثبّت release tag يتضمن schema/؛ وإلى أن يصدر أول واحد، استخدم 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

ستحتاج إلى هذا غالبًا حين تحتفظ بنسخة من البيانات (fork فيه سجلات إضافية، أو تنزيل مخزَّن مؤقتًا) وتريد أن تعرف أنها لا تزال بالبنية التي تتوقعها الحزمة.

توليد الأنواع للغات أخرى ​

لأن المخططات قياسية، يمكنك توليد النماذج بدلًا من كتابتها يدويًا: datamodel-code-generator لـPython (Pydantic)، وquicktype لـC# وGo وJava وKotlin وSwift وغيرها.

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

datapackage.json ​

في جذر المستودع ملف datapackage.json، وهو واصف Frictionless Data Package: ملف البيانات الوصفية القياسي لمجموعات البيانات المفتوحة. يسرد كل ملف بيانات بعنوانه ووصفه ومخططه ومصادره الرسمية وترخيصه، وحقلين خاصين بنا:

  • lastReviewed: آخر يوم رُوجعت فيه مجموعة البيانات مقابل مصادرها؛
  • reviewEveryMonths: كم مرة يجب مراجعتها من جديد. يفتح فحص الحداثة issue حين تتأخر مراجعة مجموعة بيانات.

الكود مرخّص بـMIT، والبيانات بـCC BY 4.0. بيانات مرجعية، لا استشارة قانونية: راجع المصادر الرسمية.