Praktické rozdíly
| Oblast | Draft 7 | 2019-09 | 2020-12 |
|---|---|---|---|
| Definice pro opakované použití | definitions | $defs | $defs |
| Pozice v n-tici | items jako pole schémat | items jako pole schémat | prefixItems |
| Položky za n-ticí | additionalItems | additionalItems | items |
| Pravidla vedle $ref | ignorovaná | vyhodnocovaná | vyhodnocovaná |
| unevaluatedProperties / Items | ne | ano | ano |
| Rekurzivní rozšíření | běžné $ref | $recursiveRef / $recursiveAnchor | $dynamicRef / $dynamicAnchor |
Pro nové schéma zvol 2020-12, pokud jej podporují všechny části tvého systému. Ve stávajícím API má přednost kompatibilita. K 1. 10. 2026 je 2020-12 aktuální publikovaná verze podle projektu JSON Schema; neznamená to automaticky podporu každé knihovny.
Migrace n-tice
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "array",
"items": [
{
"type": "string"
},
{
"type": "integer",
"minimum": 0
}
],
"additionalItems": false,
"minItems": 2
} {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array",
"prefixItems": [
{
"type": "string"
},
{
"type": "integer",
"minimum": 0
}
],
"items": false,
"minItems": 2
} Obě ukázky přijmou ["Jana",20] a odmítnou jednu i tři položky. minItems je potřebné v obou. U homogenního seznamu zůstává items jako jediné schéma i v 2020-12.
Další migrační rizika
V 2019-09 se rozděluje staré dependencies na dependentRequired a dependentSchemas. Změnil se také způsob práce s formáty a vznikly slovníky. V 2020-12 se přepracovalo dynamické odkazování a položky úspěšné přes contains ovlivňují unevaluatedItems.
Přejmenování definitions na $defs musí doprovodit úprava fragmentů v $ref. Starší jména mohou implementace přijímat kvůli kompatibilitě; při psaní nového schématu používej názvy z vybrané verze. Oficiální poznámky 2019-09 a poznámky 2020-12 rozepisují změny.
Kontrolní postup migrace
- Ověř podporu cílového dialektu a potřebných slovníků.
- Uprav strukturu schématu a všechny lokální i externí odkazy.
- Ověř schéma proti odpovídajícímu meta schématu.
- Spusť původní platné i neplatné příklady a porovnej výsledky.
- Zkontroluj formáty, rekurzi a uzavírání složených objektů.
Pouhé ignorování neznámého slova může způsobit, že neplatná data začnou procházet. V testech proto musí být i vstupy, které každé důležité pravidlo porušují.
Zkontroluj, zda se po změně verze změnila přijatá data
Schéma n-tice z této kapitoly musí přijmout dvě hodnoty ve správném pořadí. Zkus kromě platného vstupu také ["Jana"], [20,"Jana"] a ["Jana",20,true]: všechny tři musí být odmítnuté v původní i nové verzi.
Pokud po migraci některý z těchto vstupů projde, validátor možná ignoruje nové klíčové slovo nebo schéma neobsahuje potřebné omezení délky. Změna $schema bez úpravy items a prefixItems není převod schématu. Přehled změn uvádí poznámky k 2020-12.