From 859a6f124c378379f4941416a25c84a9d3db4543 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe
Date: Thu, 24 Oct 2024 11:35:05 +0100
Subject: [PATCH 01/71] Added migration page overview
---
pages/specification/migration/_index.md | 75 ++++++++++++++++++++++++-
1 file changed, 74 insertions(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 734bd0b33..9190354a5 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -3,5 +3,78 @@ title: Migrating from older drafts
section: docs
---
-The release notes discuss the changes impacting users and implementers:
+### Introduction
+Migrations are like version control for your system, allowing your team to define and share the schema progressions. If you have ever had to figure out when a keyword was introduced and how it behaved, you've faced the problem that migration guides solve.
+
+If you're moving from one Draft to another, learn how to use our migration guides and tooling ([alterschema](https://alterschema.sourcemeta.com/)) to bring your work with you.
+
+### Keywords Overview
+
+Here is a comprehensive overview to get you going.
+
+| All Keywords | Specification | Draft introduction | Removed | Changed |
+| --------------------- | ---------------------- | ------------------ | ------- | ----------------------------- |
+| $anchor | Core | 2019-09 | No | No (updated in 2020) |
+| $comment | Core | 07 | Yes | - |
+| $id | Core | 06 | No | Updated from id |
+| $defs | Core | 2019-09 | No | Updated from definitions |
+| $dynamicAnchor | Core | 2020-12 | No | Updated from $recursiveAnchor |
+| $dynamicRef | Core | 2020-12 | No | Updated from $recursiveRef |
+| $recursiveAnchor | Core | 2019-09 | No | Updated to $dynamicAnchor |
+| $recursiveRef | Core | 2019-09 | No | Updated to $dynamicRef |
+| $ref | Core | 2019-09 | No | No |
+| $schema | Core | 02 | No | No |
+| $vocabualry | Core | 2019-09 | No | No |
+| additionalItems | Validation | 03 | No | No |
+| allOf | Validation | 04 | No | No |
+| anyOf | Validation | 04 | No | No |
+| const | Validation | 06 | No | No |
+| contains | Validation | 06 | No | No |
+| contentEncoding | Validation | 07 | No | No |
+| contentMediaType | Validation | 07 | No | No |
+| contentSchema | Content | 2019-09 | No | No |
+| definitions | Validation | 04 | No | Updated to $defs |
+| default | Annotation | 01 | No | No |
+| dependencies | Core | 03 | No | No |
+| dependentRequired | Validation | 2019-09 | No | No |
+| dependentSchemas | Applicator | 2019-09 | No | Updated from dependencies |
+| deprecated | Annotation | 2019-09 | No | No |
+| disallow | Validation | 03 | Yes | No |
+| divisibleBy | Validation | 02 | No | Updated to multipleOf |
+| else | Validation | 07 | No | No |
+| enum | Assertion | 01 | No | No |
+| examples | Validation | 06 | No | No |
+| exclusiveMaximum | Validation | 03 | No | Updated from maximumCanEqual |
+| exclusiveMinimum | Validation | 03 | No | Updated from minimumCanEqual |
+| extends | Validation | 03 | Yes | No |
+| format | Annotation | 02 | No | - |
+| id | Core | 04 | No | Updated to $id |
+| if | Validation | 07 | No | No |
+| items | Applicator | 2019-09 | No | Updated to prefixItems |
+| maxContains | Validation | 2019-09 | No | No |
+| maxProperties | Validation | 04 | No | No |
+| maximumCanEqual | Validation | 02 | No | Updated to exclusiveMaximum |
+| minimumCanEqual | Validation | 02 | No | Updated to exclusiveMinimum |
+| minContains | Validation | 2019-09 | No | No |
+| minProperties | Validation | 04 | No | No |
+| multipleOf | Validation | 04 | No | Updated from divisibleBy |
+| not | Validation | 04 | No | No |
+| oneOf | Validation | 04 | No | No |
+| optional | Validation | 02 | No | Updated to (required) |
+| pattern | Core | 03 | No | No |
+| patternProperties | Validation | 03 | No | No |
+| prefixItems | Applicator | 2020-12 | No | Updated from items |
+| propertyNames | Validation | 06 | No | No |
+| readOnly | Validation | 07 | No | No |
+| required | Validation | 03 | No | No |
+| requires | Validation | 02 | Yes | - |
+| title | Annotation | 01 | No | No |
+| then | Validation | 07 | No | No |
+| type | Validation | 02 | No | No |
+| unevaluatedItems | Applicator, Annotation | 2019-09 | No | No |
+| unevaluatedProperties | Applicator, Annotation | 2019-09 | No | No |
+| uniqueItems | Assertion | 02 | Yes | No |
+| writeOnly | Validation | 07 | No | No |
+
+For a detailed read-through about all the changes see each Draft migration guide.
From 93bcaba6865e4fbd0f3e18431546040362233a54 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Fri, 25 Oct 2024 11:56:25 +0100
Subject: [PATCH 02/71] Update pages/specification/migration/_index.md
Co-authored-by: Juan Cruz Viotti
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 9190354a5..6d642b401 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -7,7 +7,7 @@ section: docs
Migrations are like version control for your system, allowing your team to define and share the schema progressions. If you have ever had to figure out when a keyword was introduced and how it behaved, you've faced the problem that migration guides solve.
-If you're moving from one Draft to another, learn how to use our migration guides and tooling ([alterschema](https://alterschema.sourcemeta.com/)) to bring your work with you.
+If you're moving from one Draft to another, learn how to use our migration guides and tooling ([AlterSchema](https://alterschema.sourcemeta.com/)) to bring your work with you.
### Keywords Overview
From d4c8b244181e08f807a1481b9108c9a3e0f834e3 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Fri, 25 Oct 2024 11:56:46 +0100
Subject: [PATCH 03/71] Update pages/specification/migration/_index.md
Co-authored-by: Juan Cruz Viotti
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 6d642b401..c81c2bd0f 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -16,7 +16,7 @@ Here is a comprehensive overview to get you going.
| All Keywords | Specification | Draft introduction | Removed | Changed |
| --------------------- | ---------------------- | ------------------ | ------- | ----------------------------- |
| $anchor | Core | 2019-09 | No | No (updated in 2020) |
-| $comment | Core | 07 | Yes | - |
+| `$comment` | Core | 07 | Yes | - |
| $id | Core | 06 | No | Updated from id |
| $defs | Core | 2019-09 | No | Updated from definitions |
| $dynamicAnchor | Core | 2020-12 | No | Updated from $recursiveAnchor |
From 8eb9721fb25063403d9fa26d214bd28f4d843c78 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe
Date: Mon, 28 Oct 2024 21:25:11 +0100
Subject: [PATCH 04/71] Updated migration overview
---
pages/specification/migration/_index.md | 130 ++++++++++++------------
1 file changed, 65 insertions(+), 65 deletions(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index c81c2bd0f..547a03656 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -5,76 +5,76 @@ section: docs
### Introduction
-Migrations are like version control for your system, allowing your team to define and share the schema progressions. If you have ever had to figure out when a keyword was introduced and how it behaved, you've faced the problem that migration guides solve.
+Just as your schemas evolve over time, the JSON Schema specification does as well. This guide provides useful information to make upgrading your schemas across versions of the specification a breeze.
-If you're moving from one Draft to another, learn how to use our migration guides and tooling ([AlterSchema](https://alterschema.sourcemeta.com/)) to bring your work with you.
+Learn how to use our migration guides and tooling ([AlterSchema](https://alterschema.sourcemeta.com/)) to bring your work with you.
### Keywords Overview
Here is a comprehensive overview to get you going.
-| All Keywords | Specification | Draft introduction | Removed | Changed |
-| --------------------- | ---------------------- | ------------------ | ------- | ----------------------------- |
-| $anchor | Core | 2019-09 | No | No (updated in 2020) |
-| `$comment` | Core | 07 | Yes | - |
-| $id | Core | 06 | No | Updated from id |
-| $defs | Core | 2019-09 | No | Updated from definitions |
-| $dynamicAnchor | Core | 2020-12 | No | Updated from $recursiveAnchor |
-| $dynamicRef | Core | 2020-12 | No | Updated from $recursiveRef |
-| $recursiveAnchor | Core | 2019-09 | No | Updated to $dynamicAnchor |
-| $recursiveRef | Core | 2019-09 | No | Updated to $dynamicRef |
-| $ref | Core | 2019-09 | No | No |
-| $schema | Core | 02 | No | No |
-| $vocabualry | Core | 2019-09 | No | No |
-| additionalItems | Validation | 03 | No | No |
-| allOf | Validation | 04 | No | No |
-| anyOf | Validation | 04 | No | No |
-| const | Validation | 06 | No | No |
-| contains | Validation | 06 | No | No |
-| contentEncoding | Validation | 07 | No | No |
-| contentMediaType | Validation | 07 | No | No |
-| contentSchema | Content | 2019-09 | No | No |
-| definitions | Validation | 04 | No | Updated to $defs |
-| default | Annotation | 01 | No | No |
-| dependencies | Core | 03 | No | No |
-| dependentRequired | Validation | 2019-09 | No | No |
-| dependentSchemas | Applicator | 2019-09 | No | Updated from dependencies |
-| deprecated | Annotation | 2019-09 | No | No |
-| disallow | Validation | 03 | Yes | No |
-| divisibleBy | Validation | 02 | No | Updated to multipleOf |
-| else | Validation | 07 | No | No |
-| enum | Assertion | 01 | No | No |
-| examples | Validation | 06 | No | No |
-| exclusiveMaximum | Validation | 03 | No | Updated from maximumCanEqual |
-| exclusiveMinimum | Validation | 03 | No | Updated from minimumCanEqual |
-| extends | Validation | 03 | Yes | No |
-| format | Annotation | 02 | No | - |
-| id | Core | 04 | No | Updated to $id |
-| if | Validation | 07 | No | No |
-| items | Applicator | 2019-09 | No | Updated to prefixItems |
-| maxContains | Validation | 2019-09 | No | No |
-| maxProperties | Validation | 04 | No | No |
-| maximumCanEqual | Validation | 02 | No | Updated to exclusiveMaximum |
-| minimumCanEqual | Validation | 02 | No | Updated to exclusiveMinimum |
-| minContains | Validation | 2019-09 | No | No |
-| minProperties | Validation | 04 | No | No |
-| multipleOf | Validation | 04 | No | Updated from divisibleBy |
-| not | Validation | 04 | No | No |
-| oneOf | Validation | 04 | No | No |
-| optional | Validation | 02 | No | Updated to (required) |
-| pattern | Core | 03 | No | No |
-| patternProperties | Validation | 03 | No | No |
-| prefixItems | Applicator | 2020-12 | No | Updated from items |
-| propertyNames | Validation | 06 | No | No |
-| readOnly | Validation | 07 | No | No |
-| required | Validation | 03 | No | No |
-| requires | Validation | 02 | Yes | - |
-| title | Annotation | 01 | No | No |
-| then | Validation | 07 | No | No |
-| type | Validation | 02 | No | No |
-| unevaluatedItems | Applicator, Annotation | 2019-09 | No | No |
-| unevaluatedProperties | Applicator, Annotation | 2019-09 | No | No |
-| uniqueItems | Assertion | 02 | Yes | No |
-| writeOnly | Validation | 07 | No | No |
+| All Keywords | Specification | Draft introduction | Removed | Changed |
+| ----------------------- | ------------- | ------------------ | ------- | ------------------------------ |
+| `$anchor` | Core | 2019-09 | No | No (updated in 2020) |
+| `$comment` | Core | 07 | Yes | - |
+| `$id` | Core | 06 | No | Replaced `id` |
+| `$defs` | Core | 2019-09 | No | Replaced `definitions` |
+| `$dynamicAnchor` | Core | 2020-12 | No | Replaced `$recursiveAnchor` |
+| `$dynamicRef` | Core | 2020-12 | No | Replaced `$recursiveRef` |
+| `$recursiveAnchor` | Core | 2019-09 | No | Replaced by `$dynamicAnchor` |
+| `$recursiveRef` | Core | 2019-09 | No | Replaced by `$dynamicRef` |
+| `$ref` | Core | 2019-09 | No | No |
+| `$schema` | Core | 02 | No | No |
+| `$vocabualry` | Core | 2019-09 | No | No |
+| `additionalItems` | Core | 03 | No | No |
+| `allOf` | Core | 04 | No | No |
+| `anyOf` | Core | 04 | No | No |
+| `const` | Validation | 06 | No | No |
+| `contains` | Core | 06 | No | No |
+| `contentEncoding` | Validation | 07 | No | No |
+| `contentMediaType` | Validation | 07 | No | No |
+| `contentSchema` | Validation | 2019-09 | No | No |
+| `definitions` | Validation | 04 | No | Replaced by` $defs` |
+| `default` | Validation | 01 | No | No |
+| `dependencies` | Core | 03 | No | No |
+| `dependentRequired` | Validation | 2019-09 | No | No |
+| `dependentSchemas` | Core | 2019-09 | No | Replaced `dependencies` |
+| `deprecated` | Validation | 2019-09 | No | No |
+| `disallow` | Validation | 03 | Yes | No |
+| `divisibleBy` | Validation | 02 | No | Replaced by `multipleOf` |
+| `else` | Core | 07 | No | No |
+| `enum` | Validation | 01 | No | No |
+| `examples` | Validation | 06 | No | No |
+| `exclusiveMaximum` | Validation | 03 | No | Replaced `maximumCanEqual` |
+| `exclusiveMinimum` | Validation | 03 | No | Replaced `minimumCanEqual` |
+| `extends` | Validation | 03 | Yes | No |
+| `format` | Validation | 02 | No | - |
+| `id` | Core | 04 | No | Replaced by `$id` |
+| `if` | Core | 07 | No | No |
+| `items` | Core | 2019-09 | No | Replaced by `prefixItems` |
+| `maxContains` | Validation | 2019-09 | No | No |
+| `maxProperties` | Validation | 04 | No | No |
+| `maximumCanEqual` | Validation | 02 | No | Replaced by `exclusiveMaximum` |
+| `minimumCanEqual` | Validation | 02 | No | Replaced by `exclusiveMinimum` |
+| `minContains` | Validation | 2019-09 | No | No |
+| `minProperties` | Validation | 04 | No | No |
+| `multipleOf` | Validation | 04 | No | Replaced `divisibleBy` |
+| `not` | Core | 04 | No | No |
+| `oneOf` | Core | 04 | No | No |
+| `optional` | Validation | 02 | No | Replaced by `required` |
+| `pattern` | Core | 03 | No | No |
+| `patternProperties` | Core | 03 | No | No |
+| `prefixItems` | Core | 2020-12 | No | Replaced `items` |
+| `propertyNames` | Core | 06 | No | No |
+| `readOnly` | Validation | 07 | No | No |
+| `required` | Validation | 03 | No | No |
+| `requires` | Validation | 02 | Yes | - |
+| `title` | Validation | 01 | No | No |
+| `then` | Core | 07 | No | No |
+| `type` | Validation | 02 | No | No |
+| `unevaluatedItems` | Core | 2019-09 | No | No |
+| `unevaluatedProperties` | Core | 2019-09 | No | No |
+| `uniqueItems` | Assertion | 02 | Yes | No |
+| `writeOnly` | Validation | 07 | No | No |
For a detailed read-through about all the changes see each Draft migration guide.
From 75ee2a1d5d995aaaebea4be3d94113a89d6cd996 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 09:03:13 +0100
Subject: [PATCH 05/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 547a03656..bdf8ef9ba 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -16,7 +16,7 @@ Here is a comprehensive overview to get you going.
| All Keywords | Specification | Draft introduction | Removed | Changed |
| ----------------------- | ------------- | ------------------ | ------- | ------------------------------ |
| `$anchor` | Core | 2019-09 | No | No (updated in 2020) |
-| `$comment` | Core | 07 | Yes | - |
+| `$comment` | Core | 07 | No | |
| `$id` | Core | 06 | No | Replaced `id` |
| `$defs` | Core | 2019-09 | No | Replaced `definitions` |
| `$dynamicAnchor` | Core | 2020-12 | No | Replaced `$recursiveAnchor` |
From a967f66fc49f520fb230e75bb6eb15356ed326e3 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 09:05:44 +0100
Subject: [PATCH 06/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index bdf8ef9ba..ec0046e7f 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -23,7 +23,8 @@ Here is a comprehensive overview to get you going.
| `$dynamicRef` | Core | 2020-12 | No | Replaced `$recursiveRef` |
| `$recursiveAnchor` | Core | 2019-09 | No | Replaced by `$dynamicAnchor` |
| `$recursiveRef` | Core | 2019-09 | No | Replaced by `$dynamicRef` |
-| `$ref` | Core | 2019-09 | No | No |
+| `$ref` (legacy) | Core | 03 | 2019-09 | Replaced by `$ref` |
+| `$ref` | Core | 2019-09 | No | Replaced `$ref` (legacy) |
| `$schema` | Core | 02 | No | No |
| `$vocabualry` | Core | 2019-09 | No | No |
| `additionalItems` | Core | 03 | No | No |
From b22b2ffefb4ef1126a5de57c8d35569dfb34edb8 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 09:06:24 +0100
Subject: [PATCH 07/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index ec0046e7f..c94be49d4 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -25,7 +25,7 @@ Here is a comprehensive overview to get you going.
| `$recursiveRef` | Core | 2019-09 | No | Replaced by `$dynamicRef` |
| `$ref` (legacy) | Core | 03 | 2019-09 | Replaced by `$ref` |
| `$ref` | Core | 2019-09 | No | Replaced `$ref` (legacy) |
-| `$schema` | Core | 02 | No | No |
+| `$schema` | Core | 03 | No | No |
| `$vocabualry` | Core | 2019-09 | No | No |
| `additionalItems` | Core | 03 | No | No |
| `allOf` | Core | 04 | No | No |
From c5d352ee76d8142cb14a0c11c612f7dee49913cb Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 09:41:01 +0100
Subject: [PATCH 08/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index c94be49d4..7db6ae053 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -21,8 +21,8 @@ Here is a comprehensive overview to get you going.
| `$defs` | Core | 2019-09 | No | Replaced `definitions` |
| `$dynamicAnchor` | Core | 2020-12 | No | Replaced `$recursiveAnchor` |
| `$dynamicRef` | Core | 2020-12 | No | Replaced `$recursiveRef` |
-| `$recursiveAnchor` | Core | 2019-09 | No | Replaced by `$dynamicAnchor` |
-| `$recursiveRef` | Core | 2019-09 | No | Replaced by `$dynamicRef` |
+| `$recursiveAnchor` | Core | 2019-09 | 2020-12 | Replaced by `$dynamicAnchor` |
+| `$recursiveRef` | Core | 2019-09 | 2020-12 | Replaced by `$dynamicRef` |
| `$ref` (legacy) | Core | 03 | 2019-09 | Replaced by `$ref` |
| `$ref` | Core | 2019-09 | No | Replaced `$ref` (legacy) |
| `$schema` | Core | 03 | No | No |
From 136ee2e62d2aa5dac7acfca76bc481bdb539fd74 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 09:42:23 +0100
Subject: [PATCH 09/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 7db6ae053..a7a7a9740 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -26,7 +26,7 @@ Here is a comprehensive overview to get you going.
| `$ref` (legacy) | Core | 03 | 2019-09 | Replaced by `$ref` |
| `$ref` | Core | 2019-09 | No | Replaced `$ref` (legacy) |
| `$schema` | Core | 03 | No | No |
-| `$vocabualry` | Core | 2019-09 | No | No |
+| `$vocabulary` | Core | 2019-09 | No | No |
| `additionalItems` | Core | 03 | No | No |
| `allOf` | Core | 04 | No | No |
| `anyOf` | Core | 04 | No | No |
From fa6391b8c0c9a10f6d0a8be19a699b31b65a3028 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 09:42:49 +0100
Subject: [PATCH 10/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index a7a7a9740..88c599dc8 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -27,7 +27,7 @@ Here is a comprehensive overview to get you going.
| `$ref` | Core | 2019-09 | No | Replaced `$ref` (legacy) |
| `$schema` | Core | 03 | No | No |
| `$vocabulary` | Core | 2019-09 | No | No |
-| `additionalItems` | Core | 03 | No | No |
+| `additionalItems` | Core | 03 | 2020-12 | Replaced by `items` |
| `allOf` | Core | 04 | No | No |
| `anyOf` | Core | 04 | No | No |
| `const` | Validation | 06 | No | No |
From 83536f160abfe0c21d53cc21b0e93e9ef566c77d Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 09:43:14 +0100
Subject: [PATCH 11/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 88c599dc8..52fc10f73 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -67,7 +67,7 @@ Here is a comprehensive overview to get you going.
| `patternProperties` | Core | 03 | No | No |
| `prefixItems` | Core | 2020-12 | No | Replaced `items` |
| `propertyNames` | Core | 06 | No | No |
-| `readOnly` | Validation | 07 | No | No |
+| `readOnly` | Validation | 01 | No | No |
| `required` | Validation | 03 | No | No |
| `requires` | Validation | 02 | Yes | - |
| `title` | Validation | 01 | No | No |
From dd364ba639c024e8b4b5d9b8b5f8186ed434b459 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 09:43:35 +0100
Subject: [PATCH 12/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 52fc10f73..99c1f415b 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -69,7 +69,7 @@ Here is a comprehensive overview to get you going.
| `propertyNames` | Core | 06 | No | No |
| `readOnly` | Validation | 01 | No | No |
| `required` | Validation | 03 | No | No |
-| `requires` | Validation | 02 | Yes | - |
+| `requires` | Core | 01 | 03 | Replaced by `dependencies` |
| `title` | Validation | 01 | No | No |
| `then` | Core | 07 | No | No |
| `type` | Validation | 02 | No | No |
From dd1d4e739a80740a2229f8bc0adee4c18ceecc63 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 10:05:17 +0100
Subject: [PATCH 13/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 99c1f415b..f18720e94 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -75,7 +75,7 @@ Here is a comprehensive overview to get you going.
| `type` | Validation | 02 | No | No |
| `unevaluatedItems` | Core | 2019-09 | No | No |
| `unevaluatedProperties` | Core | 2019-09 | No | No |
-| `uniqueItems` | Assertion | 02 | Yes | No |
+| `uniqueItems` | Core | 02 | Yes | No |
| `writeOnly` | Validation | 07 | No | No |
For a detailed read-through about all the changes see each Draft migration guide.
From 33b69ab3b9a415a1ba084418f30f6e88e2413a4d Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 10:08:32 +0100
Subject: [PATCH 14/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index f18720e94..c3b3c25cd 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -72,7 +72,8 @@ Here is a comprehensive overview to get you going.
| `requires` | Core | 01 | 03 | Replaced by `dependencies` |
| `title` | Validation | 01 | No | No |
| `then` | Core | 07 | No | No |
-| `type` | Validation | 02 | No | No |
+| `type` (legacy) | Core | 01 | 04 | Replaced by `type` |
+| `type` | Validation | 04 | No | Replaced `type` (legacy) |
| `unevaluatedItems` | Core | 2019-09 | No | No |
| `unevaluatedProperties` | Core | 2019-09 | No | No |
| `uniqueItems` | Core | 02 | Yes | No |
From 9c583ce4c58bfd46f2eaf36c7942058290146f45 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 10:24:15 +0100
Subject: [PATCH 15/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index c3b3c25cd..96d8e9efa 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -52,7 +52,8 @@ Here is a comprehensive overview to get you going.
| `format` | Validation | 02 | No | - |
| `id` | Core | 04 | No | Replaced by `$id` |
| `if` | Core | 07 | No | No |
-| `items` | Core | 2019-09 | No | Replaced by `prefixItems` |
+| `items` (legacy) | Core | 01 | 2020-12 | Replaced by `prefixItems` |
+| `items` | Core | 2020-12 | No | Replaced `additionalItems` and `items` (legacy) |
| `maxContains` | Validation | 2019-09 | No | No |
| `maxProperties` | Validation | 04 | No | No |
| `maximumCanEqual` | Validation | 02 | No | Replaced by `exclusiveMaximum` |
From 5a4b8b31dcef7ce38c024e32b6a8753e0cf87a72 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 10:31:32 +0100
Subject: [PATCH 16/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 96d8e9efa..cf0e3384f 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -32,8 +32,10 @@ Here is a comprehensive overview to get you going.
| `anyOf` | Core | 04 | No | No |
| `const` | Validation | 06 | No | No |
| `contains` | Core | 06 | No | No |
-| `contentEncoding` | Validation | 07 | No | No |
-| `contentMediaType` | Validation | 07 | No | No |
+| `contentEncoding` (legacy) | Core | 01 | 04 | Replaced by `media`.`binaryEncoding` |
+| `media` | Validation | 04 | 07 | Replaced `conentEncoding` (legacy) and replaced by `contentEncoding` and `contentMediaType` |
+| `contentEncoding` | Validation | 07 | No | Replaced `media`.`binaryEncoding` |
+| `contentMediaType` | Validation | 07 | No | Replaced `media`.`type` |
| `contentSchema` | Validation | 2019-09 | No | No |
| `definitions` | Validation | 04 | No | Replaced by` $defs` |
| `default` | Validation | 01 | No | No |
From 24488f9e155efb5ad6474b7c8aa7a9a280a3061a Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 10:32:16 +0100
Subject: [PATCH 17/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index cf0e3384f..ecb4b8b46 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -39,9 +39,9 @@ Here is a comprehensive overview to get you going.
| `contentSchema` | Validation | 2019-09 | No | No |
| `definitions` | Validation | 04 | No | Replaced by` $defs` |
| `default` | Validation | 01 | No | No |
-| `dependencies` | Core | 03 | No | No |
-| `dependentRequired` | Validation | 2019-09 | No | No |
-| `dependentSchemas` | Core | 2019-09 | No | Replaced `dependencies` |
+| `dependencies` | Validation | 03 | 2019-09 | Replaced `requires` and replaced by `dependentSchemas` and `dependentRequired` |
+| `dependentRequired` | Validation | 2019-09 | No | Partially replaced `dependencies` |
+| `dependentSchemas` | Core | 2019-09 | No | Partially replaced `dependencies` |
| `deprecated` | Validation | 2019-09 | No | No |
| `disallow` | Validation | 03 | Yes | No |
| `divisibleBy` | Validation | 02 | No | Replaced by `multipleOf` |
From 4e5a08d4e0b7f890a4f673be4b9b6d08427f15af Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 10:32:47 +0100
Subject: [PATCH 18/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index ecb4b8b46..ebeca4ccd 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -37,7 +37,7 @@ Here is a comprehensive overview to get you going.
| `contentEncoding` | Validation | 07 | No | Replaced `media`.`binaryEncoding` |
| `contentMediaType` | Validation | 07 | No | Replaced `media`.`type` |
| `contentSchema` | Validation | 2019-09 | No | No |
-| `definitions` | Validation | 04 | No | Replaced by` $defs` |
+| `definitions` | Validation | 04 | 2019-09 | Replaced by` $defs` |
| `default` | Validation | 01 | No | No |
| `dependencies` | Validation | 03 | 2019-09 | Replaced `requires` and replaced by `dependentSchemas` and `dependentRequired` |
| `dependentRequired` | Validation | 2019-09 | No | Partially replaced `dependencies` |
From d17e30801e43250de7feb52eff83511f6bd3dd16 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 10:33:13 +0100
Subject: [PATCH 19/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index ebeca4ccd..76dede4a7 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -43,7 +43,7 @@ Here is a comprehensive overview to get you going.
| `dependentRequired` | Validation | 2019-09 | No | Partially replaced `dependencies` |
| `dependentSchemas` | Core | 2019-09 | No | Partially replaced `dependencies` |
| `deprecated` | Validation | 2019-09 | No | No |
-| `disallow` | Validation | 03 | Yes | No |
+| `disallow` | Core | 01 | 04 | Replaced by `not` |
| `divisibleBy` | Validation | 02 | No | Replaced by `multipleOf` |
| `else` | Core | 07 | No | No |
| `enum` | Validation | 01 | No | No |
From c5b1f87470c7b9912a33341d2ed97b1852215e70 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 10:33:40 +0100
Subject: [PATCH 20/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 76dede4a7..21f7e0e3b 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -58,8 +58,8 @@ Here is a comprehensive overview to get you going.
| `items` | Core | 2020-12 | No | Replaced `additionalItems` and `items` (legacy) |
| `maxContains` | Validation | 2019-09 | No | No |
| `maxProperties` | Validation | 04 | No | No |
-| `maximumCanEqual` | Validation | 02 | No | Replaced by `exclusiveMaximum` |
-| `minimumCanEqual` | Validation | 02 | No | Replaced by `exclusiveMinimum` |
+| `maximumCanEqual` | Validation | 01 | 03 | Replaced by `exclusiveMaximum` |
+| `minimumCanEqual` | Validation | 01 | 03 | Replaced by `exclusiveMinimum` |
| `minContains` | Validation | 2019-09 | No | No |
| `minProperties` | Validation | 04 | No | No |
| `multipleOf` | Validation | 04 | No | Replaced `divisibleBy` |
From 95276a099acaffd6211dfbbd0ea70b05e1a23e3c Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Tue, 29 Oct 2024 10:34:48 +0100
Subject: [PATCH 21/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 21f7e0e3b..5c39321f6 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -48,8 +48,10 @@ Here is a comprehensive overview to get you going.
| `else` | Core | 07 | No | No |
| `enum` | Validation | 01 | No | No |
| `examples` | Validation | 06 | No | No |
-| `exclusiveMaximum` | Validation | 03 | No | Replaced `maximumCanEqual` |
-| `exclusiveMinimum` | Validation | 03 | No | Replaced `minimumCanEqual` |
+| `exclusiveMaximum` (legacy) | Validation | 03 | 06 | Replaced `maximumCanEqual` |
+| `exclusiveMaximum` | Validation | 06 | No | Replaced `exclusiveMaximum` (legacy) |
+| `exclusiveMinimum` (legacy) | Validation | 03 | 06 | Replaced `minimumCanEqual` |
+| `exclusiveMinimum` | Validation | 06 | No | Replaced `exclusiveMinimum` (legacy) |
| `extends` | Validation | 03 | Yes | No |
| `format` | Validation | 02 | No | - |
| `id` | Core | 04 | No | Replaced by `$id` |
From 288e5d93ffa799d86496930018289ab7c4d4262d Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Wed, 30 Oct 2024 11:33:05 +0100
Subject: [PATCH 22/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 5c39321f6..3632f2499 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -52,7 +52,7 @@ Here is a comprehensive overview to get you going.
| `exclusiveMaximum` | Validation | 06 | No | Replaced `exclusiveMaximum` (legacy) |
| `exclusiveMinimum` (legacy) | Validation | 03 | 06 | Replaced `minimumCanEqual` |
| `exclusiveMinimum` | Validation | 06 | No | Replaced `exclusiveMinimum` (legacy) |
-| `extends` | Validation | 03 | Yes | No |
+| `extends` | Core | 01 | 04 | Replaced by `allOf` |
| `format` | Validation | 02 | No | - |
| `id` | Core | 04 | No | Replaced by `$id` |
| `if` | Core | 07 | No | No |
From 7199292d1b9ef47836425871e65ebf2fab21e017 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Wed, 30 Oct 2024 11:33:30 +0100
Subject: [PATCH 23/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 3632f2499..e9d6618ac 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -53,7 +53,7 @@ Here is a comprehensive overview to get you going.
| `exclusiveMinimum` (legacy) | Validation | 03 | 06 | Replaced `minimumCanEqual` |
| `exclusiveMinimum` | Validation | 06 | No | Replaced `exclusiveMinimum` (legacy) |
| `extends` | Core | 01 | 04 | Replaced by `allOf` |
-| `format` | Validation | 02 | No | - |
+| `format` | Validation | 01 | No | - |
| `id` | Core | 04 | No | Replaced by `$id` |
| `if` | Core | 07 | No | No |
| `items` (legacy) | Core | 01 | 2020-12 | Replaced by `prefixItems` |
From 8cc36f051f0ea138b27ccfb1bcab4d02f1d3a6ba Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Wed, 30 Oct 2024 11:33:51 +0100
Subject: [PATCH 24/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index e9d6618ac..eea8c5cc4 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -54,7 +54,7 @@ Here is a comprehensive overview to get you going.
| `exclusiveMinimum` | Validation | 06 | No | Replaced `exclusiveMinimum` (legacy) |
| `extends` | Core | 01 | 04 | Replaced by `allOf` |
| `format` | Validation | 01 | No | - |
-| `id` | Core | 04 | No | Replaced by `$id` |
+| `id` | Core | 03 | 06 | Replaced by `$id` |
| `if` | Core | 07 | No | No |
| `items` (legacy) | Core | 01 | 2020-12 | Replaced by `prefixItems` |
| `items` | Core | 2020-12 | No | Replaced `additionalItems` and `items` (legacy) |
From 45aecbc9951fd118cfb387d97fb9550362e7e1c0 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Wed, 30 Oct 2024 11:34:13 +0100
Subject: [PATCH 25/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index eea8c5cc4..8fe5bfb57 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -67,7 +67,7 @@ Here is a comprehensive overview to get you going.
| `multipleOf` | Validation | 04 | No | Replaced `divisibleBy` |
| `not` | Core | 04 | No | No |
| `oneOf` | Core | 04 | No | No |
-| `optional` | Validation | 02 | No | Replaced by `required` |
+| `optional` | Core | 02 | No | Replaced by `required` |
| `pattern` | Core | 03 | No | No |
| `patternProperties` | Core | 03 | No | No |
| `prefixItems` | Core | 2020-12 | No | Replaced `items` |
From 65ba89868ba24662195a79e47ade4625bfc7053a Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Wed, 30 Oct 2024 11:34:40 +0100
Subject: [PATCH 26/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 8fe5bfb57..6a694c35f 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -68,7 +68,7 @@ Here is a comprehensive overview to get you going.
| `not` | Core | 04 | No | No |
| `oneOf` | Core | 04 | No | No |
| `optional` | Core | 02 | No | Replaced by `required` |
-| `pattern` | Core | 03 | No | No |
+| `pattern` | Core | 01 | No | No |
| `patternProperties` | Core | 03 | No | No |
| `prefixItems` | Core | 2020-12 | No | Replaced `items` |
| `propertyNames` | Core | 06 | No | No |
From 9891c6edae17150e822ac360fed96aeb7371620c Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Wed, 30 Oct 2024 11:35:08 +0100
Subject: [PATCH 27/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 6a694c35f..9a116e2f8 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -33,7 +33,7 @@ Here is a comprehensive overview to get you going.
| `const` | Validation | 06 | No | No |
| `contains` | Core | 06 | No | No |
| `contentEncoding` (legacy) | Core | 01 | 04 | Replaced by `media`.`binaryEncoding` |
-| `media` | Validation | 04 | 07 | Replaced `conentEncoding` (legacy) and replaced by `contentEncoding` and `contentMediaType` |
+| `media` | Hyper-Schema | 04 | 07 | Replaced `conentEncoding` (legacy) and replaced by `contentEncoding` and `contentMediaType` |
| `contentEncoding` | Validation | 07 | No | Replaced `media`.`binaryEncoding` |
| `contentMediaType` | Validation | 07 | No | Replaced `media`.`type` |
| `contentSchema` | Validation | 2019-09 | No | No |
From 5bdfc65f06ceedf329deeb987a4ca8c3d9428a8f Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe
Date: Wed, 30 Oct 2024 14:17:37 +0100
Subject: [PATCH 28/71] added updates to migration overview
---
pages/specification/migration/_index.md | 142 ++++++++++++------------
1 file changed, 71 insertions(+), 71 deletions(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 9a116e2f8..296ffb908 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -11,77 +11,77 @@ Learn how to use our migration guides and tooling ([AlterSchema](https://altersc
### Keywords Overview
-Here is a comprehensive overview to get you going.
+Here is a comprehensive overview to get you started.
-| All Keywords | Specification | Draft introduction | Removed | Changed |
-| ----------------------- | ------------- | ------------------ | ------- | ------------------------------ |
-| `$anchor` | Core | 2019-09 | No | No (updated in 2020) |
-| `$comment` | Core | 07 | No | |
-| `$id` | Core | 06 | No | Replaced `id` |
-| `$defs` | Core | 2019-09 | No | Replaced `definitions` |
-| `$dynamicAnchor` | Core | 2020-12 | No | Replaced `$recursiveAnchor` |
-| `$dynamicRef` | Core | 2020-12 | No | Replaced `$recursiveRef` |
-| `$recursiveAnchor` | Core | 2019-09 | 2020-12 | Replaced by `$dynamicAnchor` |
-| `$recursiveRef` | Core | 2019-09 | 2020-12 | Replaced by `$dynamicRef` |
-| `$ref` (legacy) | Core | 03 | 2019-09 | Replaced by `$ref` |
-| `$ref` | Core | 2019-09 | No | Replaced `$ref` (legacy) |
-| `$schema` | Core | 03 | No | No |
-| `$vocabulary` | Core | 2019-09 | No | No |
-| `additionalItems` | Core | 03 | 2020-12 | Replaced by `items` |
-| `allOf` | Core | 04 | No | No |
-| `anyOf` | Core | 04 | No | No |
-| `const` | Validation | 06 | No | No |
-| `contains` | Core | 06 | No | No |
-| `contentEncoding` (legacy) | Core | 01 | 04 | Replaced by `media`.`binaryEncoding` |
-| `media` | Hyper-Schema | 04 | 07 | Replaced `conentEncoding` (legacy) and replaced by `contentEncoding` and `contentMediaType` |
-| `contentEncoding` | Validation | 07 | No | Replaced `media`.`binaryEncoding` |
-| `contentMediaType` | Validation | 07 | No | Replaced `media`.`type` |
-| `contentSchema` | Validation | 2019-09 | No | No |
-| `definitions` | Validation | 04 | 2019-09 | Replaced by` $defs` |
-| `default` | Validation | 01 | No | No |
-| `dependencies` | Validation | 03 | 2019-09 | Replaced `requires` and replaced by `dependentSchemas` and `dependentRequired` |
-| `dependentRequired` | Validation | 2019-09 | No | Partially replaced `dependencies` |
-| `dependentSchemas` | Core | 2019-09 | No | Partially replaced `dependencies` |
-| `deprecated` | Validation | 2019-09 | No | No |
-| `disallow` | Core | 01 | 04 | Replaced by `not` |
-| `divisibleBy` | Validation | 02 | No | Replaced by `multipleOf` |
-| `else` | Core | 07 | No | No |
-| `enum` | Validation | 01 | No | No |
-| `examples` | Validation | 06 | No | No |
-| `exclusiveMaximum` (legacy) | Validation | 03 | 06 | Replaced `maximumCanEqual` |
-| `exclusiveMaximum` | Validation | 06 | No | Replaced `exclusiveMaximum` (legacy) |
-| `exclusiveMinimum` (legacy) | Validation | 03 | 06 | Replaced `minimumCanEqual` |
-| `exclusiveMinimum` | Validation | 06 | No | Replaced `exclusiveMinimum` (legacy) |
-| `extends` | Core | 01 | 04 | Replaced by `allOf` |
-| `format` | Validation | 01 | No | - |
-| `id` | Core | 03 | 06 | Replaced by `$id` |
-| `if` | Core | 07 | No | No |
-| `items` (legacy) | Core | 01 | 2020-12 | Replaced by `prefixItems` |
-| `items` | Core | 2020-12 | No | Replaced `additionalItems` and `items` (legacy) |
-| `maxContains` | Validation | 2019-09 | No | No |
-| `maxProperties` | Validation | 04 | No | No |
-| `maximumCanEqual` | Validation | 01 | 03 | Replaced by `exclusiveMaximum` |
-| `minimumCanEqual` | Validation | 01 | 03 | Replaced by `exclusiveMinimum` |
-| `minContains` | Validation | 2019-09 | No | No |
-| `minProperties` | Validation | 04 | No | No |
-| `multipleOf` | Validation | 04 | No | Replaced `divisibleBy` |
-| `not` | Core | 04 | No | No |
-| `oneOf` | Core | 04 | No | No |
-| `optional` | Core | 02 | No | Replaced by `required` |
-| `pattern` | Core | 01 | No | No |
-| `patternProperties` | Core | 03 | No | No |
-| `prefixItems` | Core | 2020-12 | No | Replaced `items` |
-| `propertyNames` | Core | 06 | No | No |
-| `readOnly` | Validation | 01 | No | No |
-| `required` | Validation | 03 | No | No |
-| `requires` | Core | 01 | 03 | Replaced by `dependencies` |
-| `title` | Validation | 01 | No | No |
-| `then` | Core | 07 | No | No |
-| `type` (legacy) | Core | 01 | 04 | Replaced by `type` |
-| `type` | Validation | 04 | No | Replaced `type` (legacy) |
-| `unevaluatedItems` | Core | 2019-09 | No | No |
-| `unevaluatedProperties` | Core | 2019-09 | No | No |
-| `uniqueItems` | Core | 02 | Yes | No |
-| `writeOnly` | Validation | 07 | No | No |
+| All Keywords | Specification | Draft introduction | Removed | Changed |
+| --------------------------- | ------------- | ------------------ | ------- | -------------------------------------------------------------------------------------------- |
+| `$anchor` | Core | 2019-09 | No | Partially replaced `$id` |
+| `$comment` | Core | 07 | No | |
+| `$id` | Core | 06 | No | Replaced `id` |
+| `$defs` | Core | 2019-09 | No | Replaced `definitions` |
+| `$dynamicAnchor` | Core | 2020-12 | No | Replaced `$recursiveAnchor` |
+| `$dynamicRef` | Core | 2020-12 | No | Replaced `$recursiveRef` |
+| `$recursiveAnchor` | Core | 2019-09 | 2020-12 | Replaced by `$dynamicAnchor` |
+| `$recursiveRef` | Core | 2019-09 | 2020-12 | Replaced by `$dynamicRef` |
+| `$ref` (legacy) | Core | 03 | 2019-09 | Replaced by `$ref` |
+| `$ref` | Core | 2019-09 | No | Replaced `$ref` (legacy) |
+| `$schema` | Core | 03 | No | No |
+| `$vocabulary` | Core | 2019-09 | No | No |
+| `additionalItems` | Core | 03 | 2020-12 | Replaced by `items` |
+| `allOf` | Core | 04 | No | No |
+| `anyOf` | Core | 04 | No | No |
+| `const` | Validation | 06 | No | No |
+| `contains` | Core | 06 | No | No |
+| `contentEncoding` (legacy) | Core | 01 | 04 | Replaced by `media`.`binaryEncoding` |
+| `media` | Hyper-Schema | 04 | 07 | Replaced `contentEncoding` (legacy) and replaced by `contentEncoding` and `contentMediaType` |
+| `contentEncoding` | Validation | 07 | No | Replaced `media`.`binaryEncoding` |
+| `contentMediaType` | Validation | 07 | No | Replaced `media`.`type` |
+| `contentSchema` | Validation | 2019-09 | No | No |
+| `definitions` | Validation | 04 | 2019-09 | Replaced by` $defs` |
+| `default` | Validation | 01 | No | No |
+| `dependencies` | Validation | 03 | 2019-09 | Replaced `requires` and replaced by `dependentSchemas` and `dependentRequired` |
+| `dependentRequired` | Validation | 2019-09 | No | Partially replaced `dependencies` |
+| `dependentSchemas` | Core | 2019-09 | No | Partially replaced `dependencies` |
+| `deprecated` | Validation | 2019-09 | No | No |
+| `disallow` | Core | 01 | 04 | Replaced by `not` |
+| `divisibleBy` | Validation | 02 | No | Replaced by `multipleOf` |
+| `else` | Core | 07 | No | No |
+| `enum` | Validation | 01 | No | No |
+| `examples` | Validation | 06 | No | No |
+| `exclusiveMaximum` (legacy) | Validation | 03 | 06 | Replaced `maximumCanEqual` |
+| `exclusiveMaximum` | Validation | 06 | No | Replaced `exclusiveMaximum` (legacy) |
+| `exclusiveMinimum` (legacy) | Validation | 03 | 06 | Replaced `minimumCanEqual` |
+| `exclusiveMinimum` | Validation | 06 | No | Replaced `exclusiveMinimum` (legacy) |
+| `extends` | Core | 01 | 04 | Replaced by `allOf` |
+| `format` | Validation | 01 | No | - |
+| `id` | Core | 03 | 06 | Replaced by `$id` |
+| `if` | Core | 07 | No | No |
+| `items` (legacy) | Core | 01 | 2020-12 | Replaced by `prefixItems` |
+| `items` | Core | 2020-12 | No | Replaced `additionalItems` and `items` (legacy) |
+| `maxContains` | Validation | 2019-09 | No | No |
+| `maxProperties` | Validation | 04 | No | No |
+| `maximumCanEqual` | Validation | 01 | 03 | Replaced by `exclusiveMaximum` |
+| `minimumCanEqual` | Validation | 01 | 03 | Replaced by `exclusiveMinimum` |
+| `minContains` | Validation | 2019-09 | No | No |
+| `minProperties` | Validation | 04 | No | No |
+| `multipleOf` | Validation | 04 | No | Replaced `divisibleBy` |
+| `not` | Core | 04 | No | No |
+| `oneOf` | Core | 04 | No | No |
+| `optional` | Core | 02 | No | Replaced by `required` |
+| `pattern` | Core | 01 | No | No |
+| `patternProperties` | Core | 03 | No | No |
+| `prefixItems` | Core | 2020-12 | No | Replaced `items` |
+| `propertyNames` | Core | 06 | No | No |
+| `readOnly` | Validation | 01 | No | No |
+| `required` | Validation | 03 | No | No |
+| `requires` | Core | 01 | 03 | Replaced by `dependencies` |
+| `title` | Validation | 01 | No | No |
+| `then` | Core | 07 | No | No |
+| `type` (legacy) | Core | 01 | 04 | Replaced by `type` |
+| `type` | Validation | 04 | No | Replaced `type` (legacy) |
+| `unevaluatedItems` | Core | 2019-09 | No | No |
+| `unevaluatedProperties` | Core | 2019-09 | No | No |
+| `uniqueItems` | Validation | 02 | Yes | No |
+| `writeOnly` | Validation | 07 | No | No |
For a detailed read-through about all the changes see each Draft migration guide.
From 3ef35ded2fb576113aca72a3fa796ede4ab9f44b Mon Sep 17 00:00:00 2001
From: Benjamin Granados <40007659+benjagm@users.noreply.github.com>
Date: Sat, 2 Nov 2024 09:32:58 +0100
Subject: [PATCH 29/71] Adding migration folders and cards
---
pages/draft-02/[slug].page.tsx | 39 ++++++++++++++++++++
pages/draft-03/[slug].page.tsx | 39 ++++++++++++++++++++
pages/draft-04/[slug].page.tsx | 39 ++++++++++++++++++++
pages/specification/migration/index.page.tsx | 23 +++++++++++-
4 files changed, 139 insertions(+), 1 deletion(-)
create mode 100644 pages/draft-02/[slug].page.tsx
create mode 100644 pages/draft-03/[slug].page.tsx
create mode 100644 pages/draft-04/[slug].page.tsx
diff --git a/pages/draft-02/[slug].page.tsx b/pages/draft-02/[slug].page.tsx
new file mode 100644
index 000000000..9ed6c8896
--- /dev/null
+++ b/pages/draft-02/[slug].page.tsx
@@ -0,0 +1,39 @@
+import React from 'react';
+import Head from 'next/head';
+import { getLayout } from '~/components/Sidebar';
+import StyledMarkdown from '~/components/StyledMarkdown';
+import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths';
+import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps';
+import { Headline1 } from '~/components/Headlines';
+import { SectionContext } from '~/context';
+import { DocsHelp } from '~/components/DocsHelp';
+
+export async function getStaticPaths() {
+ return getStaticMarkdownPaths('pages/draft-02');
+}
+export async function getStaticProps(args: any) {
+ return getStaticMarkdownProps(args, 'pages/draft-02');
+}
+
+export default function StaticMarkdownPage({
+ frontmatter,
+ content,
+}: {
+ frontmatter: any;
+ content: any;
+}) {
+ const markdownFile = '_index';
+ const newTitle = 'JSON Schema - ' + frontmatter.title;
+
+ return (
+
+
+ {newTitle}
+
+ {frontmatter.title}
+
+
+
+ );
+}
+StaticMarkdownPage.getLayout = getLayout;
diff --git a/pages/draft-03/[slug].page.tsx b/pages/draft-03/[slug].page.tsx
new file mode 100644
index 000000000..2247ab809
--- /dev/null
+++ b/pages/draft-03/[slug].page.tsx
@@ -0,0 +1,39 @@
+import React from 'react';
+import Head from 'next/head';
+import { getLayout } from '~/components/Sidebar';
+import StyledMarkdown from '~/components/StyledMarkdown';
+import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths';
+import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps';
+import { Headline1 } from '~/components/Headlines';
+import { SectionContext } from '~/context';
+import { DocsHelp } from '~/components/DocsHelp';
+
+export async function getStaticPaths() {
+ return getStaticMarkdownPaths('pages/draft-03');
+}
+export async function getStaticProps(args: any) {
+ return getStaticMarkdownProps(args, 'pages/draft-03');
+}
+
+export default function StaticMarkdownPage({
+ frontmatter,
+ content,
+}: {
+ frontmatter: any;
+ content: any;
+}) {
+ const markdownFile = '_index';
+ const newTitle = 'JSON Schema - ' + frontmatter.title;
+
+ return (
+
+
+ {newTitle}
+
+ {frontmatter.title}
+
+
+
+ );
+}
+StaticMarkdownPage.getLayout = getLayout;
diff --git a/pages/draft-04/[slug].page.tsx b/pages/draft-04/[slug].page.tsx
new file mode 100644
index 000000000..53aba46d9
--- /dev/null
+++ b/pages/draft-04/[slug].page.tsx
@@ -0,0 +1,39 @@
+import React from 'react';
+import Head from 'next/head';
+import { getLayout } from '~/components/Sidebar';
+import StyledMarkdown from '~/components/StyledMarkdown';
+import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths';
+import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps';
+import { Headline1 } from '~/components/Headlines';
+import { SectionContext } from '~/context';
+import { DocsHelp } from '~/components/DocsHelp';
+
+export async function getStaticPaths() {
+ return getStaticMarkdownPaths('pages/draft-04');
+}
+export async function getStaticProps(args: any) {
+ return getStaticMarkdownProps(args, 'pages/draft-04');
+}
+
+export default function StaticMarkdownPage({
+ frontmatter,
+ content,
+}: {
+ frontmatter: any;
+ content: any;
+}) {
+ const markdownFile = '_index';
+ const newTitle = 'JSON Schema - ' + frontmatter.title;
+
+ return (
+
+
+ {newTitle}
+
+ {frontmatter.title}
+
+
+
+ );
+}
+StaticMarkdownPage.getLayout = getLayout;
diff --git a/pages/specification/migration/index.page.tsx b/pages/specification/migration/index.page.tsx
index fbba9bd33..188da86c7 100644
--- a/pages/specification/migration/index.page.tsx
+++ b/pages/specification/migration/index.page.tsx
@@ -59,7 +59,7 @@ export default function ImplementationsPages({
/>
+
+
+
From a68d4f3f19343e6b01f86db6b071ebab59acc28c Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe
Date: Thu, 7 Nov 2024 14:01:26 +0100
Subject: [PATCH 30/71] updated overview
---
pages/draft/2019-09/migration-2019-09.md | 0
pages/specification/migration/_index.md | 142 +++++++++++------------
2 files changed, 70 insertions(+), 72 deletions(-)
create mode 100644 pages/draft/2019-09/migration-2019-09.md
diff --git a/pages/draft/2019-09/migration-2019-09.md b/pages/draft/2019-09/migration-2019-09.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 296ffb908..21cfd8586 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -5,83 +5,81 @@ section: docs
### Introduction
-Just as your schemas evolve over time, the JSON Schema specification does as well. This guide provides useful information to make upgrading your schemas across versions of the specification a breeze.
+As your schemas evolve over time, so does JSON Schema specification. This guide provides useful information help you smoothly upgrade your schemas across different specification versions
Learn how to use our migration guides and tooling ([AlterSchema](https://alterschema.sourcemeta.com/)) to bring your work with you.
### Keywords Overview
-Here is a comprehensive overview to get you started.
+This table provides an overview of keyword changes and removals in JSON Schema specifications from Draft 01 to the latest draft.
-| All Keywords | Specification | Draft introduction | Removed | Changed |
-| --------------------------- | ------------- | ------------------ | ------- | -------------------------------------------------------------------------------------------- |
-| `$anchor` | Core | 2019-09 | No | Partially replaced `$id` |
-| `$comment` | Core | 07 | No | |
-| `$id` | Core | 06 | No | Replaced `id` |
-| `$defs` | Core | 2019-09 | No | Replaced `definitions` |
-| `$dynamicAnchor` | Core | 2020-12 | No | Replaced `$recursiveAnchor` |
-| `$dynamicRef` | Core | 2020-12 | No | Replaced `$recursiveRef` |
-| `$recursiveAnchor` | Core | 2019-09 | 2020-12 | Replaced by `$dynamicAnchor` |
-| `$recursiveRef` | Core | 2019-09 | 2020-12 | Replaced by `$dynamicRef` |
-| `$ref` (legacy) | Core | 03 | 2019-09 | Replaced by `$ref` |
-| `$ref` | Core | 2019-09 | No | Replaced `$ref` (legacy) |
-| `$schema` | Core | 03 | No | No |
-| `$vocabulary` | Core | 2019-09 | No | No |
-| `additionalItems` | Core | 03 | 2020-12 | Replaced by `items` |
-| `allOf` | Core | 04 | No | No |
-| `anyOf` | Core | 04 | No | No |
-| `const` | Validation | 06 | No | No |
-| `contains` | Core | 06 | No | No |
-| `contentEncoding` (legacy) | Core | 01 | 04 | Replaced by `media`.`binaryEncoding` |
-| `media` | Hyper-Schema | 04 | 07 | Replaced `contentEncoding` (legacy) and replaced by `contentEncoding` and `contentMediaType` |
-| `contentEncoding` | Validation | 07 | No | Replaced `media`.`binaryEncoding` |
-| `contentMediaType` | Validation | 07 | No | Replaced `media`.`type` |
-| `contentSchema` | Validation | 2019-09 | No | No |
-| `definitions` | Validation | 04 | 2019-09 | Replaced by` $defs` |
-| `default` | Validation | 01 | No | No |
-| `dependencies` | Validation | 03 | 2019-09 | Replaced `requires` and replaced by `dependentSchemas` and `dependentRequired` |
-| `dependentRequired` | Validation | 2019-09 | No | Partially replaced `dependencies` |
-| `dependentSchemas` | Core | 2019-09 | No | Partially replaced `dependencies` |
-| `deprecated` | Validation | 2019-09 | No | No |
-| `disallow` | Core | 01 | 04 | Replaced by `not` |
-| `divisibleBy` | Validation | 02 | No | Replaced by `multipleOf` |
-| `else` | Core | 07 | No | No |
-| `enum` | Validation | 01 | No | No |
-| `examples` | Validation | 06 | No | No |
-| `exclusiveMaximum` (legacy) | Validation | 03 | 06 | Replaced `maximumCanEqual` |
-| `exclusiveMaximum` | Validation | 06 | No | Replaced `exclusiveMaximum` (legacy) |
-| `exclusiveMinimum` (legacy) | Validation | 03 | 06 | Replaced `minimumCanEqual` |
-| `exclusiveMinimum` | Validation | 06 | No | Replaced `exclusiveMinimum` (legacy) |
-| `extends` | Core | 01 | 04 | Replaced by `allOf` |
-| `format` | Validation | 01 | No | - |
-| `id` | Core | 03 | 06 | Replaced by `$id` |
-| `if` | Core | 07 | No | No |
-| `items` (legacy) | Core | 01 | 2020-12 | Replaced by `prefixItems` |
-| `items` | Core | 2020-12 | No | Replaced `additionalItems` and `items` (legacy) |
-| `maxContains` | Validation | 2019-09 | No | No |
-| `maxProperties` | Validation | 04 | No | No |
-| `maximumCanEqual` | Validation | 01 | 03 | Replaced by `exclusiveMaximum` |
-| `minimumCanEqual` | Validation | 01 | 03 | Replaced by `exclusiveMinimum` |
-| `minContains` | Validation | 2019-09 | No | No |
-| `minProperties` | Validation | 04 | No | No |
-| `multipleOf` | Validation | 04 | No | Replaced `divisibleBy` |
-| `not` | Core | 04 | No | No |
-| `oneOf` | Core | 04 | No | No |
-| `optional` | Core | 02 | No | Replaced by `required` |
-| `pattern` | Core | 01 | No | No |
-| `patternProperties` | Core | 03 | No | No |
-| `prefixItems` | Core | 2020-12 | No | Replaced `items` |
-| `propertyNames` | Core | 06 | No | No |
-| `readOnly` | Validation | 01 | No | No |
-| `required` | Validation | 03 | No | No |
-| `requires` | Core | 01 | 03 | Replaced by `dependencies` |
-| `title` | Validation | 01 | No | No |
-| `then` | Core | 07 | No | No |
-| `type` (legacy) | Core | 01 | 04 | Replaced by `type` |
-| `type` | Validation | 04 | No | Replaced `type` (legacy) |
-| `unevaluatedItems` | Core | 2019-09 | No | No |
-| `unevaluatedProperties` | Core | 2019-09 | No | No |
-| `uniqueItems` | Validation | 02 | Yes | No |
-| `writeOnly` | Validation | 07 | No | No |
+| All Keywords | Specification | Draft introduction | Removed | Changed |
+| ----------------------- | ------------- | ------------------ | ------- | -------------------------------------------------------------------------------------------- |
+| `$anchor` | Core | 2019-09 | No | Partially replaced `$id` |
+| `$comment` | Core | 07 | No | |
+| `$id` | Core | 06 | No | Replaced `id` |
+| `$defs` | Core | 2019-09 | No | Replaced `definitions` |
+| `$dynamicAnchor` | Core | 2020-12 | No | Replaced `$recursiveAnchor` |
+| `$dynamicRef` | Core | 2020-12 | No | Replaced `$recursiveRef` |
+| `$recursiveAnchor` | Core | 2019-09 | 2020-12 | Replaced by `$dynamicAnchor` |
+| `$recursiveRef` | Core | 2019-09 | 2020-12 | Replaced by `$dynamicRef` |
+| `$ref` | Core | 2019-09 | No | Replaced `$ref` (legacy) |
+| `$schema` | Core | 03 | No | No |
+| `$vocabulary` | Core | 2019-09 | No | No |
+| `additionalItems` | Core | 03 | 2020-12 | Replaced by `items` |
+| `additionalProperties` | Core | 01 | No | No |
+| `allOf` | Core | 04 | No | No |
+| `anyOf` | Core | 04 | No | No |
+| `const` | Validation | 06 | No | No |
+| `contains` | Core | 06 | No | No |
+| `contentEncoding` | Validation | 07 | No | Replaced `media`.`binaryEncoding` |
+| `contentMediaType` | Validation | 07 | No | Replaced `media`.`type` |
+| `contentSchema` | Validation | 2019-09 | No | No |
+| `definitions` | Validation | 04 | 2019-09 | Replaced by` $defs` |
+| `default` | Validation | 01 | No | No |
+| `dependencies` | Validation | 03 | 2019-09 | Replaced `requires` and replaced by `dependentSchemas` and `dependentRequired` |
+| `dependentRequired` | Validation | 2019-09 | No | Partially replaced `dependencies` |
+| `dependentSchemas` | Core | 2019-09 | No | Partially replaced `dependencies` |
+| `deprecated` | Validation | 2019-09 | No | No |
+| `description` | Validation | 01 | No | No |
+| `disallow` | Core | 01 | 04 | Replaced by `not` |
+| `divisibleBy` | Validation | 02 | Yes | Replaced by `multipleOf` |
+| `else` | Core | 07 | No | No |
+| `enum` | Validation | 01 | No | No |
+| `examples` | Validation | 06 | No | No |
+| `exclusiveMaximum` | Validation | 06 | No | Replaced `exclusiveMaximum` (legacy) |
+| `exclusiveMinimum` | Validation | 06 | No | Replaced `exclusiveMinimum` (legacy) |
+| `extends` | Core | 01 | 04 | Replaced by `allOf` |
+| `format` | Validation | 01 | No | - |
+| `id` | Core | 03 | 06 | Replaced by `$id` |
+| `if` | Core | 07 | No | No |
+| `items` | Core | 2020-12 | No | Replaced `additionalItems` and `items` (legacy) |
+| `maxContains` | Validation | 2019-09 | No | No |
+| `maxDecimals` | Validation | 01 | Yes | Replaced by `divisibleBy` |
+| `maxProperties` | Validation | 04 | No | No |
+| `maximumCanEqual` | Validation | 01 | 03 | Replaced by `exclusiveMaximum` |
+| `media` | Hyper-Schema | 04 | 07 | Replaced `contentEncoding` (legacy) and replaced by `contentEncoding` and `contentMediaType` |
+| `minimumCanEqual` | Validation | 01 | 03 | Replaced by `exclusiveMinimum` |
+| `minContains` | Validation | 2019-09 | No | No |
+| `minProperties` | Validation | 04 | No | No |
+| `multipleOf` | Validation | 04 | No | Replaced `divisibleBy` |
+| `not` | Core | 04 | No | No |
+| `oneOf` | Core | 04 | No | No |
+| `optional` | Core | 02 | Yes | Replaced by `required` |
+| `pattern` | Core | 01 | No | No |
+| `patternProperties` | Core | 03 | No | No |
+| `prefixItems` | Core | 2020-12 | No | Replaced `items` |
+| `properties` | Core | 01 | No | No |
+| `propertyNames` | Core | 06 | No | No |
+| `readOnly` | Validation | 01 | No | No |
+| `required` | Validation | 03 | No | No |
+| `requires` | Core | 01 | 03 | Replaced by `dependencies` |
+| `title` | Validation | 01 | No | No |
+| `then` | Core | 07 | No | No |
+| `type` | Validation | 04 | No | Replaced `type` (legacy) |
+| `unevaluatedItems` | Core | 2019-09 | No | No |
+| `unevaluatedProperties` | Core | 2019-09 | No | No |
+| `uniqueItems` | Validation | 02 | No | No |
+| `writeOnly` | Validation | 07 | No | No |
For a detailed read-through about all the changes see each Draft migration guide.
From 65325b80fe08eedb10c514f0e44696df401ea2d4 Mon Sep 17 00:00:00 2001
From: Benjamin Granados <40007659+benjagm@users.noreply.github.com>
Date: Fri, 8 Nov 2024 04:57:00 +0100
Subject: [PATCH 31/71] renamed page and added metadata
---
pages/draft/2019-09/migration-2019-09.md | 0
pages/draft/2019-09/migration-notes.md | 4 ++++
2 files changed, 4 insertions(+)
delete mode 100644 pages/draft/2019-09/migration-2019-09.md
create mode 100644 pages/draft/2019-09/migration-notes.md
diff --git a/pages/draft/2019-09/migration-2019-09.md b/pages/draft/2019-09/migration-2019-09.md
deleted file mode 100644
index e69de29bb..000000000
diff --git a/pages/draft/2019-09/migration-notes.md b/pages/draft/2019-09/migration-notes.md
new file mode 100644
index 000000000..c1d7cdcba
--- /dev/null
+++ b/pages/draft/2019-09/migration-notes.md
@@ -0,0 +1,4 @@
+---
+title: 2019-09 Migration Notes
+section: docs
+---
\ No newline at end of file
From 419ea36ea259e1d1a9ce323d118d5c0b3527dc81 Mon Sep 17 00:00:00 2001
From: Benjamin Granados <40007659+benjagm@users.noreply.github.com>
Date: Fri, 8 Nov 2024 09:25:21 +0100
Subject: [PATCH 32/71] updated links to the rights migration docs
---
pages/specification/migration/index.page.tsx | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/pages/specification/migration/index.page.tsx b/pages/specification/migration/index.page.tsx
index 188da86c7..6024308e4 100644
--- a/pages/specification/migration/index.page.tsx
+++ b/pages/specification/migration/index.page.tsx
@@ -48,49 +48,49 @@ export default function ImplementationsPages({
body='Details for migrations from Draft 2019-09 to 2020-12.'
headerSize='small'
bodyTextSize='small'
- link='/draft/2020-12/release-notes'
+ link='/draft/2020-12/migration-notes'
/>
From 43f9816e71834f0a542666cd0be39fe1442577c6 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe
Date: Fri, 8 Nov 2024 13:59:40 +0100
Subject: [PATCH 33/71] Added Alterschema details and individual draft pages
---
pages/draft-03/migration-notes.md | 4 ++++
pages/draft-04/migration-notes.md | 6 ++++++
pages/draft-05/migration-notes.md | 6 ++++++
pages/draft-06/migration-notes.md | 4 ++++
pages/draft-07/migration-notes.md | 4 ++++
pages/draft/2019-09/migration-notes.md | 6 ++++--
pages/draft/2020-12/migration-notes.md | 6 ++++++
pages/specification/migration/_index.md | 2 ++
8 files changed, 36 insertions(+), 2 deletions(-)
create mode 100644 pages/draft-03/migration-notes.md
create mode 100644 pages/draft-04/migration-notes.md
create mode 100644 pages/draft-05/migration-notes.md
create mode 100644 pages/draft-06/migration-notes.md
create mode 100644 pages/draft-07/migration-notes.md
create mode 100644 pages/draft/2020-12/migration-notes.md
diff --git a/pages/draft-03/migration-notes.md b/pages/draft-03/migration-notes.md
new file mode 100644
index 000000000..05fc95fd1
--- /dev/null
+++ b/pages/draft-03/migration-notes.md
@@ -0,0 +1,4 @@
+---
+title: Draft 02 to Draft 03
+section: docs
+---
diff --git a/pages/draft-04/migration-notes.md b/pages/draft-04/migration-notes.md
new file mode 100644
index 000000000..3e625c9f1
--- /dev/null
+++ b/pages/draft-04/migration-notes.md
@@ -0,0 +1,6 @@
+---
+title: Draft 03 to Draft 04
+section: docs
+---
+
+3-4
diff --git a/pages/draft-05/migration-notes.md b/pages/draft-05/migration-notes.md
new file mode 100644
index 000000000..bd0f4be61
--- /dev/null
+++ b/pages/draft-05/migration-notes.md
@@ -0,0 +1,6 @@
+---
+title: Draft 04 to Draft 05
+section: docs
+---
+
+4-5
diff --git a/pages/draft-06/migration-notes.md b/pages/draft-06/migration-notes.md
new file mode 100644
index 000000000..771bb8527
--- /dev/null
+++ b/pages/draft-06/migration-notes.md
@@ -0,0 +1,4 @@
+---
+title: Draft 05 to Draft 06
+section: docs
+---
diff --git a/pages/draft-07/migration-notes.md b/pages/draft-07/migration-notes.md
new file mode 100644
index 000000000..2477e0fe1
--- /dev/null
+++ b/pages/draft-07/migration-notes.md
@@ -0,0 +1,4 @@
+---
+title: Draft 07 to Draft 2010-09
+section: docs
+---
diff --git a/pages/draft/2019-09/migration-notes.md b/pages/draft/2019-09/migration-notes.md
index c1d7cdcba..24180305d 100644
--- a/pages/draft/2019-09/migration-notes.md
+++ b/pages/draft/2019-09/migration-notes.md
@@ -1,4 +1,6 @@
---
-title: 2019-09 Migration Notes
+title: Draft 2019-09 to Draft 2020-12
section: docs
----
\ No newline at end of file
+---
+
+Testing to see if this page is visible.
diff --git a/pages/draft/2020-12/migration-notes.md b/pages/draft/2020-12/migration-notes.md
new file mode 100644
index 000000000..4c5606efa
--- /dev/null
+++ b/pages/draft/2020-12/migration-notes.md
@@ -0,0 +1,6 @@
+---
+title: Draft 2019-09 to Draft 2020-12
+section: docs
+---
+
+2019-09 to 2020-12
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 21cfd8586..8ed33a7be 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -9,6 +9,8 @@ As your schemas evolve over time, so does JSON Schema specification. This guide
Learn how to use our migration guides and tooling ([AlterSchema](https://alterschema.sourcemeta.com/)) to bring your work with you.
+Alterschema is a tool designed to facilitate the automatic migration and transformation of JSON schemas as specifications evolve. It helps simplify schema maintenance, supports backward compatibility, and streamlines schema adjustment across versions. [Read more about using AlterSchema](https://github.com/sourcemeta/alterschema?tab=readme-ov-file).
+
### Keywords Overview
This table provides an overview of keyword changes and removals in JSON Schema specifications from Draft 01 to the latest draft.
From bb62eaa51221be4f75024ad2a54bea3b9482b8af Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe
Date: Tue, 12 Nov 2024 11:11:18 +0100
Subject: [PATCH 34/71] Added migration data to single page-Draft 3-4.
---
pages/draft-04/migration-notes.md | 60 +++++++++++++++++++++++++++++--
1 file changed, 58 insertions(+), 2 deletions(-)
diff --git a/pages/draft-04/migration-notes.md b/pages/draft-04/migration-notes.md
index 3e625c9f1..26d592adc 100644
--- a/pages/draft-04/migration-notes.md
+++ b/pages/draft-04/migration-notes.md
@@ -1,6 +1,62 @@
---
-title: Draft 03 to Draft 04
+title: Migrating from Draft 03 to Draft 04
section: docs
---
-3-4
+### Introduction
+
+The migration from Draft 3 to Draft 4 of JSON Schema introduces changes in how schemas are defined and validated. Draft 4, published on January 31, 2013, introduced new keywords and revised the behaviours of existing ones, making schemas more flexible and powerful. This guide will help you adapt your JSON Schemas to align with Draft 4 requirements, covering keyword changes, vocabulary updates, and behavioural modifications.
+
+### Keyword changelog
+
+Below is a summary table highlighting keyword changes between Draft 3 and Draft 4.
+
+| Keyword (Draft 3) | Keyword (Draft 4) | Specification | Vocabulary Kind | Behavior Details |
+| ----------------- | ----------------- | ------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `$schema` | `$schema` | Core | Identifier | Change in the dialect (Uses the latest Draft4 dialect) |
+| `type` | `type` | Validation | Assertion | This change no longer accepts the `any` type, restricting instances to the seven core primitive types only. |
+| `disallow` | removed | Validation | - | The `disallow` keyword was removed, eliminating the ability to specify types or schemas that an instance must not match. |
+| `required` | `required` | Validation | Assertion | The `required` keyword shifted from being a boolean within each property to a standalone keyword that takes an array of required property names outside of properties. |
+| `divisibleBy` | `multipleOf` | Validation | Assertion | `divisibleBy` was renamed to `multipleOf`, with a stricter requirement that its value must be greater than 0. |
+| `extends` | removed | Validation | - | The `extends` keyword was removed; allOf was added as a new keyword to achieve similar functionality. |
+| `format` | `format` | Validation | Annotation | The `format` section was reworked to make support optional, removed phone, style, and color, renamed ip-address to ipv4, and added references for all attributes. |
+| `dependencies` | `dependencies` | Core | - | The `dependencies` member values were changed to require an array, eliminating the use of single strings. |
+| `ref` (legacy) | `ref` (legacy) | Core | Applicator | - |
+| Not present | `allOf` | Core | Applicator | - |
+| Not present | `anyOff` | Core | Applicator | - |
+| Not present | `definitions` | Validation | - | - |
+| Not present | `maxProperties` | Validation | Assertion | - |
+| Not present | `minProperties` | Validation | Assertion | - |
+| Not present | `not` | Core | - | - |
+| Not present | `oneOf` | Core | Applicator | - |
+
+> DISCLAIMER: We do not cover migration from Draft 01. But the `type` (legacy) was first introduced in Draft 01 and was later replaced by an upgraded `type` in Draft 4.
+
+> `ref` (legacy) was introduced in Draft 03 and updated with few functionalities in Draft 4. It also got changed in Draft 06 and was fully replaced in 2019-09.
+
+### Tutorial
+
+This tutorial walks you through key steps and considerations to help you successfully migrate your JSON schemas from Draft 3 to Draft 4.
+
+#### Step 1: Review Core Changes
+
+Start by familiarizing yourself with the updates in the [Draft 4 Core schema specification](https://json-schema.org/draft-04/draft-zyp-json-schema-04.html). Note the revised `type`, `properties`, and `$ref` keywords, which might affect your schemas if you rely on polymorphic types or cross-schema references.
+
+#### Step 2: Update Validation Keywords
+
+Draft 4 has introduced new keywords such as `required`, `dependencies`, `anyOf`, `allOf`, and `patternProperties`. Review each of these additions, and update your schemas to use these keywords if relevant. For instance:
+
+- If you have properties that must always be present, use `required` to define these properties explicitly.
+- For schemas that contain nested dependencies, consider restructuring them using `dependencies` to improve schema maintainability.
+
+#### Step 3: Refactor $ref Usage
+
+References in Draft 4 (`$ref`) are more standardized, which enhances schema modularity and reusability. If your schema relies on definitions within or across schemas, make sure the `$ref` keyword is used consistently as per Draft 4’s enhanced JSON Reference guidelines.
+
+#### Step 4: Validate Your Updated Schemas
+
+Test your updated schemas using a JSON Schema validator compatible with Draft 4 ([Another JSON Validator](https://ajv.js.org/) (AJV)). Pay particular attention to behaviours of `type`, `properties`, and new combinatory keywords (`allOf`, `anyOf`), as validation behaviour may differ from Draft 3.
+
+#### Step 5: Test in Your Application Context
+
+After the schema updates, integrate them into your application and test the end-to-end functionality. Ensure that the new schema definitions meet your data requirements and interact appropriately with application code, especially in cases involving complex validation rules and nested references.
From 757f1f9cb1ca097d02ca54a0f1b61c50bddb5807 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe
Date: Thu, 14 Nov 2024 18:02:19 +0100
Subject: [PATCH 35/71] Updated the Draft 3-4
---
pages/draft-04/migration-notes.md | 56 ++++++++++++++++++-------------
1 file changed, 33 insertions(+), 23 deletions(-)
diff --git a/pages/draft-04/migration-notes.md b/pages/draft-04/migration-notes.md
index 26d592adc..1f89834e3 100644
--- a/pages/draft-04/migration-notes.md
+++ b/pages/draft-04/migration-notes.md
@@ -5,34 +5,44 @@ section: docs
### Introduction
-The migration from Draft 3 to Draft 4 of JSON Schema introduces changes in how schemas are defined and validated. Draft 4, published on January 31, 2013, introduced new keywords and revised the behaviours of existing ones, making schemas more flexible and powerful. This guide will help you adapt your JSON Schemas to align with Draft 4 requirements, covering keyword changes, vocabulary updates, and behavioural modifications.
+The migration from Draft 3 to Draft 4 of JSON Schema introduces changes in how schemas are defined and validated. Draft 4, published on January 31, 2013, introduced new keywords and revised the behaviours of existing ones.
+
+This guide will help you adapt your JSON Schemas to align with Draft 4 requirements, covering keyword changes, updates, and behavioural modifications.
### Keyword changelog
Below is a summary table highlighting keyword changes between Draft 3 and Draft 4.
-| Keyword (Draft 3) | Keyword (Draft 4) | Specification | Vocabulary Kind | Behavior Details |
-| ----------------- | ----------------- | ------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `$schema` | `$schema` | Core | Identifier | Change in the dialect (Uses the latest Draft4 dialect) |
-| `type` | `type` | Validation | Assertion | This change no longer accepts the `any` type, restricting instances to the seven core primitive types only. |
-| `disallow` | removed | Validation | - | The `disallow` keyword was removed, eliminating the ability to specify types or schemas that an instance must not match. |
-| `required` | `required` | Validation | Assertion | The `required` keyword shifted from being a boolean within each property to a standalone keyword that takes an array of required property names outside of properties. |
-| `divisibleBy` | `multipleOf` | Validation | Assertion | `divisibleBy` was renamed to `multipleOf`, with a stricter requirement that its value must be greater than 0. |
-| `extends` | removed | Validation | - | The `extends` keyword was removed; allOf was added as a new keyword to achieve similar functionality. |
-| `format` | `format` | Validation | Annotation | The `format` section was reworked to make support optional, removed phone, style, and color, renamed ip-address to ipv4, and added references for all attributes. |
-| `dependencies` | `dependencies` | Core | - | The `dependencies` member values were changed to require an array, eliminating the use of single strings. |
-| `ref` (legacy) | `ref` (legacy) | Core | Applicator | - |
-| Not present | `allOf` | Core | Applicator | - |
-| Not present | `anyOff` | Core | Applicator | - |
-| Not present | `definitions` | Validation | - | - |
-| Not present | `maxProperties` | Validation | Assertion | - |
-| Not present | `minProperties` | Validation | Assertion | - |
-| Not present | `not` | Core | - | - |
-| Not present | `oneOf` | Core | Applicator | - |
-
-> DISCLAIMER: We do not cover migration from Draft 01. But the `type` (legacy) was first introduced in Draft 01 and was later replaced by an upgraded `type` in Draft 4.
-
-> `ref` (legacy) was introduced in Draft 03 and updated with few functionalities in Draft 4. It also got changed in Draft 06 and was fully replaced in 2019-09.
+| Keyword (Draft 3) | Keyword (Draft 4) | Specification | Keyword type | Behavior Details |
+| ----------------- | ----------------- | ------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `$schema` | `$schema` | Core | Identifier | Change in the dialect (Uses the latest Draft4 dialect) |
+| `type` | `type` | Validation | Assertion | This change no longer accepts the `any` type, restricting instances to the seven core primitive types only. |
+| `disallow` | removed | Validation | Applicator | The `disallow` keyword was removed, eliminating the ability to specify types or schemas that an instance must not match. |
+| `required` | `required` | Validation | Assertion | The `required` keyword shifted from being a boolean within each property to a standalone keyword that takes an array of required property names outside of properties. |
+| `divisibleBy` | `multipleOf` | Validation | Assertion | `divisibleBy` was renamed to `multipleOf`, with a stricter requirement that its value must be greater than 0. |
+| `extends` | removed | Validation | Applicator | The `extends` keyword was removed; allOf was added as a new keyword to achieve similar functionality. |
+| `format` | `format` | Validation | Annotation | - |
+| `dependencies` | `dependencies` | Core | Assertion | The `dependencies` member values were changed to require an array, eliminating the use of single strings. |
+| `ref` (legacy) | `ref` (legacy) | Core | Applicator | - |
+| Not present | `allOf` | Core | Applicator | - |
+| Not present | `anyOff` | Core | Applicator | - |
+| Not present | `definitions` | Validation | Reserved Location | - |
+| Not present | `maxProperties` | Validation | Assertion | - |
+| Not present | `minProperties` | Validation | Assertion | - |
+| Not present | `not` | Core | Applicator | - |
+| Not present | `oneOf` | Core | Applicator | - |
+
+ Starting with Draft 4, schema identifiers that use an empty URI "" or a fragment-only URI "#" are no longer allowed.
+
+In Draft 3, these identifiers were considered valid:
+
+```
+id: ""
+id: "#"
+```
+
+However, this format is now prohibited from Draft 4 onwards.
+
### Tutorial
From 5eae10034eb97d64de64609b9e9313d94315aa05 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe
Date: Fri, 15 Nov 2024 07:25:38 +0100
Subject: [PATCH 36/71] Updated Draft 3-4
---
pages/draft-04/migration-notes.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/pages/draft-04/migration-notes.md b/pages/draft-04/migration-notes.md
index 1f89834e3..bc933ce9b 100644
--- a/pages/draft-04/migration-notes.md
+++ b/pages/draft-04/migration-notes.md
@@ -44,6 +44,10 @@ id: "#"
However, this format is now prohibited from Draft 4 onwards.
+
+Before Draft 3, the JSON Schema only included the Core specification, which outlined the foundational elements for schema structure. With Draft 4, the specification expanded to incorporate Validation, establishing rules for data format, structure, and type requirements. This addition enabled schema authors to define and enforce validation constraints directly within their schemas, making it easier for implementers to ensure data integrity and compatibility as schemas evolved.
+
+
### Tutorial
This tutorial walks you through key steps and considerations to help you successfully migrate your JSON schemas from Draft 3 to Draft 4.
From 93da171060675fb89a11087d923cb559df044297 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Wed, 20 Nov 2024 12:40:17 +0100
Subject: [PATCH 37/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 8ed33a7be..f8632fb61 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -67,7 +67,7 @@ This table provides an overview of keyword changes and removals in JSON Schema s
| `multipleOf` | Validation | 04 | No | Replaced `divisibleBy` |
| `not` | Core | 04 | No | No |
| `oneOf` | Core | 04 | No | No |
-| `optional` | Core | 02 | Yes | Replaced by `required` |
+| `optional` | Core | 02 | 03 | Replaced by `required` |
| `pattern` | Core | 01 | No | No |
| `patternProperties` | Core | 03 | No | No |
| `prefixItems` | Core | 2020-12 | No | Replaced `items` |
From 994f7310c4025a579bc1502db2140ff91d7ec09d Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Wed, 20 Nov 2024 18:23:52 +0100
Subject: [PATCH 38/71] Update pages/draft-04/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft-04/migration-notes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/draft-04/migration-notes.md b/pages/draft-04/migration-notes.md
index bc933ce9b..3f2933a99 100644
--- a/pages/draft-04/migration-notes.md
+++ b/pages/draft-04/migration-notes.md
@@ -25,7 +25,7 @@ Below is a summary table highlighting keyword changes between Draft 3 and Draft
| `dependencies` | `dependencies` | Core | Assertion | The `dependencies` member values were changed to require an array, eliminating the use of single strings. |
| `ref` (legacy) | `ref` (legacy) | Core | Applicator | - |
| Not present | `allOf` | Core | Applicator | - |
-| Not present | `anyOff` | Core | Applicator | - |
+| Not present | `anyOf` | Core | Applicator | - |
| Not present | `definitions` | Validation | Reserved Location | - |
| Not present | `maxProperties` | Validation | Assertion | - |
| Not present | `minProperties` | Validation | Assertion | - |
From ffcf6396a400bfd434208c3508d6acaab3a0b002 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Wed, 20 Nov 2024 18:53:21 +0100
Subject: [PATCH 39/71] Update pages/draft-04/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft-04/migration-notes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/draft-04/migration-notes.md b/pages/draft-04/migration-notes.md
index 3f2933a99..e083c7895 100644
--- a/pages/draft-04/migration-notes.md
+++ b/pages/draft-04/migration-notes.md
@@ -19,7 +19,7 @@ Below is a summary table highlighting keyword changes between Draft 3 and Draft
| `type` | `type` | Validation | Assertion | This change no longer accepts the `any` type, restricting instances to the seven core primitive types only. |
| `disallow` | removed | Validation | Applicator | The `disallow` keyword was removed, eliminating the ability to specify types or schemas that an instance must not match. |
| `required` | `required` | Validation | Assertion | The `required` keyword shifted from being a boolean within each property to a standalone keyword that takes an array of required property names outside of properties. |
-| `divisibleBy` | `multipleOf` | Validation | Assertion | `divisibleBy` was renamed to `multipleOf`, with a stricter requirement that its value must be greater than 0. |
+| `divisibleBy` | `multipleOf` | Validation | Assertion | `divisibleBy` was renamed to `multipleOf` with a stricter requirement that its value must be greater than 0. |
| `extends` | removed | Validation | Applicator | The `extends` keyword was removed; allOf was added as a new keyword to achieve similar functionality. |
| `format` | `format` | Validation | Annotation | - |
| `dependencies` | `dependencies` | Core | Assertion | The `dependencies` member values were changed to require an array, eliminating the use of single strings. |
From b43946894352d4bb4221be03494b8bda25869282 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Wed, 20 Nov 2024 18:54:21 +0100
Subject: [PATCH 40/71] Update pages/draft-04/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft-04/migration-notes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/draft-04/migration-notes.md b/pages/draft-04/migration-notes.md
index e083c7895..8b6ee2c45 100644
--- a/pages/draft-04/migration-notes.md
+++ b/pages/draft-04/migration-notes.md
@@ -22,7 +22,7 @@ Below is a summary table highlighting keyword changes between Draft 3 and Draft
| `divisibleBy` | `multipleOf` | Validation | Assertion | `divisibleBy` was renamed to `multipleOf` with a stricter requirement that its value must be greater than 0. |
| `extends` | removed | Validation | Applicator | The `extends` keyword was removed; allOf was added as a new keyword to achieve similar functionality. |
| `format` | `format` | Validation | Annotation | - |
-| `dependencies` | `dependencies` | Core | Assertion | The `dependencies` member values were changed to require an array, eliminating the use of single strings. |
+| `dependencies` | `dependencies` | Core | Assertion | The `dependencies` member values were changed to require an array of strings or a schema, eliminating the use of single strings. |
| `ref` (legacy) | `ref` (legacy) | Core | Applicator | - |
| Not present | `allOf` | Core | Applicator | - |
| Not present | `anyOf` | Core | Applicator | - |
From 85b9ceb88480d7d454aa38ba068a79a1091a8f3c Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Wed, 20 Nov 2024 18:55:34 +0100
Subject: [PATCH 41/71] Update pages/draft-04/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft-04/migration-notes.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/pages/draft-04/migration-notes.md b/pages/draft-04/migration-notes.md
index 8b6ee2c45..1dd894283 100644
--- a/pages/draft-04/migration-notes.md
+++ b/pages/draft-04/migration-notes.md
@@ -23,7 +23,6 @@ Below is a summary table highlighting keyword changes between Draft 3 and Draft
| `extends` | removed | Validation | Applicator | The `extends` keyword was removed; allOf was added as a new keyword to achieve similar functionality. |
| `format` | `format` | Validation | Annotation | - |
| `dependencies` | `dependencies` | Core | Assertion | The `dependencies` member values were changed to require an array of strings or a schema, eliminating the use of single strings. |
-| `ref` (legacy) | `ref` (legacy) | Core | Applicator | - |
| Not present | `allOf` | Core | Applicator | - |
| Not present | `anyOf` | Core | Applicator | - |
| Not present | `definitions` | Validation | Reserved Location | - |
From 81ebeea3e0eb84060c30fd151a6475578c5e1ad1 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe
Date: Sun, 24 Nov 2024 14:29:51 +0100
Subject: [PATCH 42/71] Updated Draft 3-4 & Overview
---
pages/draft-04/migration-notes.md | 46 +++++---
pages/specification/migration/_index.md | 136 ++++++++++++------------
2 files changed, 97 insertions(+), 85 deletions(-)
diff --git a/pages/draft-04/migration-notes.md b/pages/draft-04/migration-notes.md
index 1dd894283..b1d7198eb 100644
--- a/pages/draft-04/migration-notes.md
+++ b/pages/draft-04/migration-notes.md
@@ -17,20 +17,42 @@ Below is a summary table highlighting keyword changes between Draft 3 and Draft
| ----------------- | ----------------- | ------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `$schema` | `$schema` | Core | Identifier | Change in the dialect (Uses the latest Draft4 dialect) |
| `type` | `type` | Validation | Assertion | This change no longer accepts the `any` type, restricting instances to the seven core primitive types only. |
-| `disallow` | removed | Validation | Applicator | The `disallow` keyword was removed, eliminating the ability to specify types or schemas that an instance must not match. |
+| `disallow` | removed | Validation | Applicator | The `disallow` keyword specifies types or schemas that an instance must not match, although removed; this functionality has been replaced by the `not` keyword. |
| `required` | `required` | Validation | Assertion | The `required` keyword shifted from being a boolean within each property to a standalone keyword that takes an array of required property names outside of properties. |
-| `divisibleBy` | `multipleOf` | Validation | Assertion | `divisibleBy` was renamed to `multipleOf` with a stricter requirement that its value must be greater than 0. |
+| `divisibleBy` | `multipleOf` | Validation | Assertion | `divisibleBy` was renamed to `multipleOf` with a stricter requirement that its value must be greater than 0. |
| `extends` | removed | Validation | Applicator | The `extends` keyword was removed; allOf was added as a new keyword to achieve similar functionality. |
| `format` | `format` | Validation | Annotation | - |
-| `dependencies` | `dependencies` | Core | Assertion | The `dependencies` member values were changed to require an array of strings or a schema, eliminating the use of single strings. |
+| `dependencies` | `dependencies` | Core | Assertion | The `dependencies` member values were changed to require an array of strings or a schema, eliminating the use of single strings. |
+| `id` | `id` | Core | Identifier | - |
| Not present | `allOf` | Core | Applicator | - |
-| Not present | `anyOf` | Core | Applicator | - |
+| Not present | `anyOf` | Core | Applicator | - |
| Not present | `definitions` | Validation | Reserved Location | - |
| Not present | `maxProperties` | Validation | Assertion | - |
| Not present | `minProperties` | Validation | Assertion | - |
| Not present | `not` | Core | Applicator | - |
| Not present | `oneOf` | Core | Applicator | - |
+#### Helpful notes for Keyword changelog
+
+1. `type`
+
+In Draft-03, the `type` keyword could hold a simple value like "string" or "number" and an entire schema as its value.
+
+For example:
+
+```json
+{
+ "type": {
+ "type": "array",
+ "items": { "type": "string" }
+ }
+}
+```
+
+This feature was in Draft-03 but changed in later versions of JSON Schema, where `type` is limited to simpler values like strings or arrays of strings.
+
+The `allof` keyword has now replaced the previous type schema functionality.
+
Starting with Draft 4, schema identifiers that use an empty URI "" or a fragment-only URI "#" are no longer allowed.
In Draft 3, these identifiers were considered valid:
@@ -53,23 +75,13 @@ This tutorial walks you through key steps and considerations to help you success
#### Step 1: Review Core Changes
-Start by familiarizing yourself with the updates in the [Draft 4 Core schema specification](https://json-schema.org/draft-04/draft-zyp-json-schema-04.html). Note the revised `type`, `properties`, and `$ref` keywords, which might affect your schemas if you rely on polymorphic types or cross-schema references.
+Start by familiarizing yourself with the updates in the [Draft 4 Core schema specification](https://json-schema.org/draft-04/draft-zyp-json-schema-04.html). Note the revised `type`, `required`, and `dependencies` keywords, which might affect your schemas if you rely on polymorphic types or cross-schema references.
#### Step 2: Update Validation Keywords
-Draft 4 has introduced new keywords such as `required`, `dependencies`, `anyOf`, `allOf`, and `patternProperties`. Review each of these additions, and update your schemas to use these keywords if relevant. For instance:
+Draft 4 has introduced new keywords such as `oneOf`, `not`, `anyOf`, and `allOf`. Review each of these additions, and update your schemas to use these keywords if relevant. For instance:
- If you have properties that must always be present, use `required` to define these properties explicitly.
- For schemas that contain nested dependencies, consider restructuring them using `dependencies` to improve schema maintainability.
-#### Step 3: Refactor $ref Usage
-
-References in Draft 4 (`$ref`) are more standardized, which enhances schema modularity and reusability. If your schema relies on definitions within or across schemas, make sure the `$ref` keyword is used consistently as per Draft 4’s enhanced JSON Reference guidelines.
-
-#### Step 4: Validate Your Updated Schemas
-
-Test your updated schemas using a JSON Schema validator compatible with Draft 4 ([Another JSON Validator](https://ajv.js.org/) (AJV)). Pay particular attention to behaviours of `type`, `properties`, and new combinatory keywords (`allOf`, `anyOf`), as validation behaviour may differ from Draft 3.
-
-#### Step 5: Test in Your Application Context
-
-After the schema updates, integrate them into your application and test the end-to-end functionality. Ensure that the new schema definitions meet your data requirements and interact appropriately with application code, especially in cases involving complex validation rules and nested references.
+Validate and test your updated schemas manually, or with your preferred tool.
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index f8632fb61..b4e585bd3 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -15,73 +15,73 @@ Alterschema is a tool designed to facilitate the automatic migration and transfo
This table provides an overview of keyword changes and removals in JSON Schema specifications from Draft 01 to the latest draft.
-| All Keywords | Specification | Draft introduction | Removed | Changed |
-| ----------------------- | ------------- | ------------------ | ------- | -------------------------------------------------------------------------------------------- |
-| `$anchor` | Core | 2019-09 | No | Partially replaced `$id` |
-| `$comment` | Core | 07 | No | |
-| `$id` | Core | 06 | No | Replaced `id` |
-| `$defs` | Core | 2019-09 | No | Replaced `definitions` |
-| `$dynamicAnchor` | Core | 2020-12 | No | Replaced `$recursiveAnchor` |
-| `$dynamicRef` | Core | 2020-12 | No | Replaced `$recursiveRef` |
-| `$recursiveAnchor` | Core | 2019-09 | 2020-12 | Replaced by `$dynamicAnchor` |
-| `$recursiveRef` | Core | 2019-09 | 2020-12 | Replaced by `$dynamicRef` |
-| `$ref` | Core | 2019-09 | No | Replaced `$ref` (legacy) |
-| `$schema` | Core | 03 | No | No |
-| `$vocabulary` | Core | 2019-09 | No | No |
-| `additionalItems` | Core | 03 | 2020-12 | Replaced by `items` |
-| `additionalProperties` | Core | 01 | No | No |
-| `allOf` | Core | 04 | No | No |
-| `anyOf` | Core | 04 | No | No |
-| `const` | Validation | 06 | No | No |
-| `contains` | Core | 06 | No | No |
-| `contentEncoding` | Validation | 07 | No | Replaced `media`.`binaryEncoding` |
-| `contentMediaType` | Validation | 07 | No | Replaced `media`.`type` |
-| `contentSchema` | Validation | 2019-09 | No | No |
-| `definitions` | Validation | 04 | 2019-09 | Replaced by` $defs` |
-| `default` | Validation | 01 | No | No |
-| `dependencies` | Validation | 03 | 2019-09 | Replaced `requires` and replaced by `dependentSchemas` and `dependentRequired` |
-| `dependentRequired` | Validation | 2019-09 | No | Partially replaced `dependencies` |
-| `dependentSchemas` | Core | 2019-09 | No | Partially replaced `dependencies` |
-| `deprecated` | Validation | 2019-09 | No | No |
-| `description` | Validation | 01 | No | No |
-| `disallow` | Core | 01 | 04 | Replaced by `not` |
-| `divisibleBy` | Validation | 02 | Yes | Replaced by `multipleOf` |
-| `else` | Core | 07 | No | No |
-| `enum` | Validation | 01 | No | No |
-| `examples` | Validation | 06 | No | No |
-| `exclusiveMaximum` | Validation | 06 | No | Replaced `exclusiveMaximum` (legacy) |
-| `exclusiveMinimum` | Validation | 06 | No | Replaced `exclusiveMinimum` (legacy) |
-| `extends` | Core | 01 | 04 | Replaced by `allOf` |
-| `format` | Validation | 01 | No | - |
-| `id` | Core | 03 | 06 | Replaced by `$id` |
-| `if` | Core | 07 | No | No |
-| `items` | Core | 2020-12 | No | Replaced `additionalItems` and `items` (legacy) |
-| `maxContains` | Validation | 2019-09 | No | No |
-| `maxDecimals` | Validation | 01 | Yes | Replaced by `divisibleBy` |
-| `maxProperties` | Validation | 04 | No | No |
-| `maximumCanEqual` | Validation | 01 | 03 | Replaced by `exclusiveMaximum` |
-| `media` | Hyper-Schema | 04 | 07 | Replaced `contentEncoding` (legacy) and replaced by `contentEncoding` and `contentMediaType` |
-| `minimumCanEqual` | Validation | 01 | 03 | Replaced by `exclusiveMinimum` |
-| `minContains` | Validation | 2019-09 | No | No |
-| `minProperties` | Validation | 04 | No | No |
-| `multipleOf` | Validation | 04 | No | Replaced `divisibleBy` |
-| `not` | Core | 04 | No | No |
-| `oneOf` | Core | 04 | No | No |
-| `optional` | Core | 02 | 03 | Replaced by `required` |
-| `pattern` | Core | 01 | No | No |
-| `patternProperties` | Core | 03 | No | No |
-| `prefixItems` | Core | 2020-12 | No | Replaced `items` |
-| `properties` | Core | 01 | No | No |
-| `propertyNames` | Core | 06 | No | No |
-| `readOnly` | Validation | 01 | No | No |
-| `required` | Validation | 03 | No | No |
-| `requires` | Core | 01 | 03 | Replaced by `dependencies` |
-| `title` | Validation | 01 | No | No |
-| `then` | Core | 07 | No | No |
-| `type` | Validation | 04 | No | Replaced `type` (legacy) |
-| `unevaluatedItems` | Core | 2019-09 | No | No |
-| `unevaluatedProperties` | Core | 2019-09 | No | No |
-| `uniqueItems` | Validation | 02 | No | No |
-| `writeOnly` | Validation | 07 | No | No |
+| All Keywords | Specification | Draft introduction | Removed | Changed |
+| ----------------------- | ------------- | ------------------ | ------- | ------------------------------------------------------------------------------ |
+| `$anchor` | Core | 2019-09 | No | Partially replaced `$id` |
+| `$comment` | Core | 07 | No | |
+| `$id` | Core | 06 | No | Replaced `id` |
+| `$defs` | Core | 2019-09 | No | Replaced `definitions` |
+| `$dynamicAnchor` | Core | 2020-12 | No | Replaced `$recursiveAnchor` |
+| `$dynamicRef` | Core | 2020-12 | No | Replaced `$recursiveRef` |
+| `$recursiveAnchor` | Core | 2019-09 | 2020-12 | Replaced by `$dynamicAnchor` |
+| `$recursiveRef` | Core | 2019-09 | 2020-12 | Replaced by `$dynamicRef` |
+| `$ref` | Core | 2019-09 | No | Modified in 2019-09 |
+| `$schema` | Core | 03 | No | No |
+| `$vocabulary` | Core | 2019-09 | No | No |
+| `additionalItems` | Core | 03 | 2020-12 | Replaced by `items` |
+| `additionalProperties` | Core | 01 | No | No |
+| `allOf` | Core | 04 | No | No |
+| `anyOf` | Core | 04 | No | No |
+| `const` | Validation | 06 | No | No |
+| `contains` | Core | 06 | No | No |
+| `contentEncoding` | Validation | 07 | No | Replaced `media`.`binaryEncoding` |
+| `contentMediaType` | Validation | 07 | No | Replaced `media`.`type` |
+| `contentSchema` | Validation | 2019-09 | No | No |
+| `definitions` | Validation | 04 | 2019-09 | Replaced by` $defs` |
+| `default` | Validation | 01 | No | No |
+| `dependencies` | Validation | 03 | 2019-09 | Replaced `requires` and replaced by `dependentSchemas` and `dependentRequired` |
+| `dependentRequired` | Validation | 2019-09 | No | Partially replaced `dependencies` |
+| `dependentSchemas` | Core | 2019-09 | No | Partially replaced `dependencies` |
+| `deprecated` | Validation | 2019-09 | No | No |
+| `description` | Validation | 01 | No | No |
+| `disallow` | Core | 01 | 04 | Replaced by `not` |
+| `divisibleBy` | Validation | 02 | Yes | Replaced by `multipleOf` |
+| `else` | Core | 07 | No | No |
+| `enum` | Validation | 01 | No | No |
+| `examples` | Validation | 06 | No | No |
+| `exclusiveMaximum` | Validation | 06 | No | Modified |
+| `exclusiveMinimum` | Validation | 06 | No | Modified |
+| `extends` | Core | 01 | 04 | Replaced by `allOf` |
+| `format` | Validation | 01 | No | Modified in 04, 06, 07, 2019-09, and 2020-12 |
+| `id` | Core | 03 | 06 | Replaced by `$id` |
+| `if` | Core | 07 | No | No |
+| `items` | Core | 2020-12 | No | No |
+| `maxContains` | Validation | 2019-09 | No | No |
+| `maxDecimals` | Validation | 01 | Yes | Replaced by `divisibleBy` |
+| `maxProperties` | Validation | 04 | No | No |
+| `maximumCanEqual` | Validation | 01 | 03 | Replaced by `exclusiveMaximum` |
+| `media` | Hyper-Schema | 04 | 07 | Replaced by `contentEncoding` and `contentMediaType` |
+| `minimumCanEqual` | Validation | 01 | 03 | Replaced by `exclusiveMinimum` |
+| `minContains` | Validation | 2019-09 | No | No |
+| `minProperties` | Validation | 04 | No | No |
+| `multipleOf` | Validation | 04 | No | Replaced `divisibleBy` |
+| `not` | Core | 04 | No | No |
+| `oneOf` | Core | 04 | No | No |
+| `optional` | Core | 02 | 03 | Replaced by `required` |
+| `pattern` | Core | 01 | No | No |
+| `patternProperties` | Core | 03 | No | No |
+| `prefixItems` | Core | 2020-12 | No | Replaced `items` |
+| `properties` | Core | 01 | No | No |
+| `propertyNames` | Core | 06 | No | No |
+| `readOnly` | Validation | 01 | No | No |
+| `required` | Validation | 03 | No | No |
+| `requires` | Core | 01 | 03 | Replaced by `dependencies` |
+| `title` | Validation | 01 | No | No |
+| `then` | Core | 07 | No | No |
+| `type` | Validation | 01 | No | Modified in 01 |
+| `unevaluatedItems` | Core | 2019-09 | No | No |
+| `unevaluatedProperties` | Core | 2019-09 | No | No |
+| `uniqueItems` | Validation | 02 | No | No |
+| `writeOnly` | Validation | 07 | No | No |
For a detailed read-through about all the changes see each Draft migration guide.
From d718e51088d535221db96c24b605676b490f2585 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe
Date: Sun, 24 Nov 2024 15:22:11 +0100
Subject: [PATCH 43/71] added draft 2-3
---
pages/draft-03/migration-notes.md | 44 +++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/pages/draft-03/migration-notes.md b/pages/draft-03/migration-notes.md
index 05fc95fd1..63dd7fe89 100644
--- a/pages/draft-03/migration-notes.md
+++ b/pages/draft-03/migration-notes.md
@@ -2,3 +2,47 @@
title: Draft 02 to Draft 03
section: docs
---
+
+### Introduction
+
+The migration from Draft 2 to Draft 3 of JSON Schema introduced significant updates in schema definition and validation behaviors. Draft 3 refined existing keywords, added new ones, and adjusted validation rules to improve schema precision and consistency. This guide will assist you in updating your JSON Schemas to meet Draft 3 requirements, detailing keyword replacements, vocabulary changes, and modifications in validation behaviors.
+
+### Keyword changelog
+
+| Keyword(Draft 2) | Keyword(Draft 3) | Specification | Keyword type | Behavior Details |
+| ----------------- | ------------------- | ------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `$schema` | `$schema` | `core` | Identifier | Change in the dialect |
+| not present | `$ref` | `core` | Applicator | `$ref` key references an external schema URI for validation, allowing re-validation against the referenced schema. |
+| not present | `id` | `core` | Identifier | This attribute defines the schema's current URI (a "self" link). The URI can be relative or absolute and is resolved against the parent schema's URI. If id is missing, the parent's URI is used. |
+| `optional` | `required` | `core` | Assertion | This change ensures that properties must have defined values for validation. |
+| `minimumCanEqual` | `exclusiveMinimum` | `core` | Assertion | Specifies that instance values must be strictly greater than the minimum when `exclusiveMinimum` is `true`. |
+| `maximumCanEqual` | `exclusiveMaximum` | `core` | Assertion | This ensures that instance values fall below the maximum when `exclusiveMaximum` is `true`. |
+| `format` | `format` | `core` | Annotation | This update refined format handling by adding and removing specific types, offering clearer guidance for expected data formats. |
+| not present | `patternProperties` | `core` | Applicator | Enforces schema validation on properties with names matching specified regex patterns. Each property matching a pattern must conform to the schema defined for that pattern in `patternProperties`. |
+| `requires` | `dependencies` | `core` | Assertion | Defines property dependencies - if an instance includes a property named in this attribute, that property must meet additional validation requirements defined by its dependency value. |
+| not present | `additionalItems` | `core` | Applicator | Defines rules for extra items in an array - can be set to false to disallow extra items beyond specified tuples, or to a schema that additional items must follow. |
+| `alternate` | removed | `core` | | - |
+
+### Tutorial
+
+#### Step 1: Review Core Changes:
+
+Start by understanding the key differences between Draft 2 and Draft 3, especially regarding core changes in $schema, $ref, and validation keywords.
+
+- `$schema`: In Draft 3, this remains the same but is now more standardized to handle the schema dialect and the version of the specification being used.
+- `$ref`: Draft 3 introduces the `$ref` keyword, which allows referencing external schemas for validation. This will enable more modular and reusable schema definitions.
+
+#### Step 2: Update Validation Keywords:
+
+Draft 3 introduces new validation keywords that improve flexibility in schema definitions. Notable changes include:
+
+- `optional` to `required`: Draft 3 removes the `optional` keyword and introduces `required`, which specifies the required properties for an object.
+- `minimumCanEqual` to `exclusiveMinimum`: For numerical validation, `exclusiveMinimum` enforces that the value must be strictly greater than the given minimum value.
+- `maximumCanEqual` to `exclusiveMaximum`: Similarly, `exclusiveMaximum` ensures the value is strictly less than the maximum allowed value.
+- `patternProperties`: Draft 3 introduces `patternProperties`, which allows you to define schema rules for properties whose names match a regular expression.
+
+#### Step 3: Refactor $ref Usage
+
+Draft 3 introduces a more standardized usage of `$ref`, which allows you to reference external schemas using **URIs**. This improves schema modularity and enables better reuse of schema definitions.
+
+Validate and test your updated schemas manually, or with your preferred tool.
From 3a5a632702fac03b588b6078ae0821796a301d80 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Mon, 2 Dec 2024 12:13:45 +0100
Subject: [PATCH 44/71] Update pages/draft-04/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft-04/migration-notes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/draft-04/migration-notes.md b/pages/draft-04/migration-notes.md
index b1d7198eb..988555d5a 100644
--- a/pages/draft-04/migration-notes.md
+++ b/pages/draft-04/migration-notes.md
@@ -51,7 +51,7 @@ For example:
This feature was in Draft-03 but changed in later versions of JSON Schema, where `type` is limited to simpler values like strings or arrays of strings.
-The `allof` keyword has now replaced the previous type schema functionality.
+The `allOf` keyword has now replaced the previous type schema functionality.
Starting with Draft 4, schema identifiers that use an empty URI "" or a fragment-only URI "#" are no longer allowed.
From 33e536bcfd1ac8ab59b02b06ea83b4907e163768 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Mon, 2 Dec 2024 12:14:39 +0100
Subject: [PATCH 45/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index b4e585bd3..e9256d3b9 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -25,7 +25,7 @@ This table provides an overview of keyword changes and removals in JSON Schema s
| `$dynamicRef` | Core | 2020-12 | No | Replaced `$recursiveRef` |
| `$recursiveAnchor` | Core | 2019-09 | 2020-12 | Replaced by `$dynamicAnchor` |
| `$recursiveRef` | Core | 2019-09 | 2020-12 | Replaced by `$dynamicRef` |
-| `$ref` | Core | 2019-09 | No | Modified in 2019-09 |
+| `$ref` | Core | 03 | No | Modified in 2019-09 |
| `$schema` | Core | 03 | No | No |
| `$vocabulary` | Core | 2019-09 | No | No |
| `additionalItems` | Core | 03 | 2020-12 | Replaced by `items` |
From 266963b542f39f275e80a0133b9ed93379f886cd Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Mon, 2 Dec 2024 12:15:34 +0100
Subject: [PATCH 46/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index e9256d3b9..68c808f3c 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -49,8 +49,8 @@ This table provides an overview of keyword changes and removals in JSON Schema s
| `else` | Core | 07 | No | No |
| `enum` | Validation | 01 | No | No |
| `examples` | Validation | 06 | No | No |
-| `exclusiveMaximum` | Validation | 06 | No | Modified |
-| `exclusiveMinimum` | Validation | 06 | No | Modified |
+| `exclusiveMaximum` | Validation | 03 | No | Modified in 04 |
+| `exclusiveMinimum` | Validation | 03 | No | Modified in 04 |
| `extends` | Core | 01 | 04 | Replaced by `allOf` |
| `format` | Validation | 01 | No | Modified in 04, 06, 07, 2019-09, and 2020-12 |
| `id` | Core | 03 | 06 | Replaced by `$id` |
From e75e0da6f7b69e5866207c5c1a70b2520d67fb27 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Mon, 2 Dec 2024 12:17:26 +0100
Subject: [PATCH 47/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 68c808f3c..93216ffa8 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -55,7 +55,7 @@ This table provides an overview of keyword changes and removals in JSON Schema s
| `format` | Validation | 01 | No | Modified in 04, 06, 07, 2019-09, and 2020-12 |
| `id` | Core | 03 | 06 | Replaced by `$id` |
| `if` | Core | 07 | No | No |
-| `items` | Core | 2020-12 | No | No |
+| `items` | Core | 01 | No | Changed in 2020-12 |
| `maxContains` | Validation | 2019-09 | No | No |
| `maxDecimals` | Validation | 01 | Yes | Replaced by `divisibleBy` |
| `maxProperties` | Validation | 04 | No | No |
From 78d912a98c4e63e7cbd5c04fddbb47b8d8778878 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Mon, 2 Dec 2024 12:17:49 +0100
Subject: [PATCH 48/71] Update pages/specification/migration/_index.md
Co-authored-by: Jason Desrosiers
---
pages/specification/migration/_index.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/specification/migration/_index.md b/pages/specification/migration/_index.md
index 93216ffa8..c27e56180 100644
--- a/pages/specification/migration/_index.md
+++ b/pages/specification/migration/_index.md
@@ -78,7 +78,7 @@ This table provides an overview of keyword changes and removals in JSON Schema s
| `requires` | Core | 01 | 03 | Replaced by `dependencies` |
| `title` | Validation | 01 | No | No |
| `then` | Core | 07 | No | No |
-| `type` | Validation | 01 | No | Modified in 01 |
+| `type` | Validation | 01 | No | Modified in 04 |
| `unevaluatedItems` | Core | 2019-09 | No | No |
| `unevaluatedProperties` | Core | 2019-09 | No | No |
| `uniqueItems` | Validation | 02 | No | No |
From 5a46c9d50670a74c4192a50f2f5fdf2bd93ab541 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Mon, 2 Dec 2024 12:19:02 +0100
Subject: [PATCH 49/71] Update pages/draft-03/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft-03/migration-notes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/draft-03/migration-notes.md b/pages/draft-03/migration-notes.md
index 63dd7fe89..5aa4ee59a 100644
--- a/pages/draft-03/migration-notes.md
+++ b/pages/draft-03/migration-notes.md
@@ -12,7 +12,7 @@ The migration from Draft 2 to Draft 3 of JSON Schema introduced significant upda
| Keyword(Draft 2) | Keyword(Draft 3) | Specification | Keyword type | Behavior Details |
| ----------------- | ------------------- | ------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `$schema` | `$schema` | `core` | Identifier | Change in the dialect |
-| not present | `$ref` | `core` | Applicator | `$ref` key references an external schema URI for validation, allowing re-validation against the referenced schema. |
+| not present | `$ref` | `core` | Applicator | `$ref` key references an external schema URI for validation. |
| not present | `id` | `core` | Identifier | This attribute defines the schema's current URI (a "self" link). The URI can be relative or absolute and is resolved against the parent schema's URI. If id is missing, the parent's URI is used. |
| `optional` | `required` | `core` | Assertion | This change ensures that properties must have defined values for validation. |
| `minimumCanEqual` | `exclusiveMinimum` | `core` | Assertion | Specifies that instance values must be strictly greater than the minimum when `exclusiveMinimum` is `true`. |
From 91c3b631b19344282bd0edcb9516bbcabdcd4da8 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Mon, 2 Dec 2024 12:20:06 +0100
Subject: [PATCH 50/71] Update pages/draft-03/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft-03/migration-notes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/draft-03/migration-notes.md b/pages/draft-03/migration-notes.md
index 5aa4ee59a..5d4dee6ed 100644
--- a/pages/draft-03/migration-notes.md
+++ b/pages/draft-03/migration-notes.md
@@ -13,7 +13,7 @@ The migration from Draft 2 to Draft 3 of JSON Schema introduced significant upda
| ----------------- | ------------------- | ------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `$schema` | `$schema` | `core` | Identifier | Change in the dialect |
| not present | `$ref` | `core` | Applicator | `$ref` key references an external schema URI for validation. |
-| not present | `id` | `core` | Identifier | This attribute defines the schema's current URI (a "self" link). The URI can be relative or absolute and is resolved against the parent schema's URI. If id is missing, the parent's URI is used. |
+| not present | `id` | `core` | Identifier | This keyword defines the schema's current URI (a "self" link). The URI can be relative or absolute and is resolved against the parent schema's URI. If there is no parent schema, it is resolved against the URI used to retrieve the schema. |
| `optional` | `required` | `core` | Assertion | This change ensures that properties must have defined values for validation. |
| `minimumCanEqual` | `exclusiveMinimum` | `core` | Assertion | Specifies that instance values must be strictly greater than the minimum when `exclusiveMinimum` is `true`. |
| `maximumCanEqual` | `exclusiveMaximum` | `core` | Assertion | This ensures that instance values fall below the maximum when `exclusiveMaximum` is `true`. |
From ddec102192af277b4aa66aae18460d55940ca56d Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Mon, 2 Dec 2024 12:21:01 +0100
Subject: [PATCH 51/71] Update pages/draft-03/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft-03/migration-notes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/draft-03/migration-notes.md b/pages/draft-03/migration-notes.md
index 5d4dee6ed..5dc79fefd 100644
--- a/pages/draft-03/migration-notes.md
+++ b/pages/draft-03/migration-notes.md
@@ -43,6 +43,6 @@ Draft 3 introduces new validation keywords that improve flexibility in schema de
#### Step 3: Refactor $ref Usage
-Draft 3 introduces a more standardized usage of `$ref`, which allows you to reference external schemas using **URIs**. This improves schema modularity and enables better reuse of schema definitions.
+Draft 3 introduces `$ref`, which allows you to reference external schemas using **URIs**. This improves schema modularity and enables better reuse of schema definitions.
Validate and test your updated schemas manually, or with your preferred tool.
From f0fd4c2ae9c9767829a77e5c520df1d3f095346f Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe
Date: Mon, 2 Dec 2024 13:27:41 +0100
Subject: [PATCH 52/71] Updated draft 2-3
---
pages/draft-03/migration-notes.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pages/draft-03/migration-notes.md b/pages/draft-03/migration-notes.md
index 5dc79fefd..1c2dcc6b1 100644
--- a/pages/draft-03/migration-notes.md
+++ b/pages/draft-03/migration-notes.md
@@ -11,10 +11,10 @@ The migration from Draft 2 to Draft 3 of JSON Schema introduced significant upda
| Keyword(Draft 2) | Keyword(Draft 3) | Specification | Keyword type | Behavior Details |
| ----------------- | ------------------- | ------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `$schema` | `$schema` | `core` | Identifier | Change in the dialect |
+| `$schema` | `$schema` | `core` | Identifier | The `$schema` keyword specifies the URI of the JSON Schema that defines the schema of the current document. Validators use this URI to resolve links and determine the JSON Schema version, enabling appropriate validation features. Including the `$schema` keyword is recommended to ensure compatibility with future JSON Schema changes. |
| not present | `$ref` | `core` | Applicator | `$ref` key references an external schema URI for validation. |
| not present | `id` | `core` | Identifier | This keyword defines the schema's current URI (a "self" link). The URI can be relative or absolute and is resolved against the parent schema's URI. If there is no parent schema, it is resolved against the URI used to retrieve the schema. |
-| `optional` | `required` | `core` | Assertion | This change ensures that properties must have defined values for validation. |
+| `optional` | `required` | `core` | Assertion | In **draft-02**, object properties defined within the `properties` keyword were required by default, and the `optional` keyword was used to explicitly make a property optional. In **draft-03**, this behavior changed: properties defined under `properties` are now optional by default. As a result, the `optional` keyword became redundant and was replaced by the `required` keyword to reflect the new default behavior, where properties are optional unless explicitly marked as required. |
| `minimumCanEqual` | `exclusiveMinimum` | `core` | Assertion | Specifies that instance values must be strictly greater than the minimum when `exclusiveMinimum` is `true`. |
| `maximumCanEqual` | `exclusiveMaximum` | `core` | Assertion | This ensures that instance values fall below the maximum when `exclusiveMaximum` is `true`. |
| `format` | `format` | `core` | Annotation | This update refined format handling by adding and removing specific types, offering clearer guidance for expected data formats. |
From f2aa4090577f7d3c2b50d29a5c455ad240158613 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe
Date: Thu, 6 Feb 2025 20:42:56 +0100
Subject: [PATCH 53/71] Added Draft 6-7
---
pages/draft-03/migration-notes.md | 6 +-
pages/draft-04/migration-notes.md | 4 +-
pages/draft-06/migration-notes.md | 2 +-
pages/draft-07/migration-notes.md | 130 ++++++++++++++++++++++++-
pages/draft/2019-09/migration-notes.md | 2 +-
5 files changed, 136 insertions(+), 8 deletions(-)
diff --git a/pages/draft-03/migration-notes.md b/pages/draft-03/migration-notes.md
index 1c2dcc6b1..c89e62cd6 100644
--- a/pages/draft-03/migration-notes.md
+++ b/pages/draft-03/migration-notes.md
@@ -25,14 +25,14 @@ The migration from Draft 2 to Draft 3 of JSON Schema introduced significant upda
### Tutorial
-#### Step 1: Review Core Changes:
+#### Step 1: Review Core Changes
Start by understanding the key differences between Draft 2 and Draft 3, especially regarding core changes in $schema, $ref, and validation keywords.
- `$schema`: In Draft 3, this remains the same but is now more standardized to handle the schema dialect and the version of the specification being used.
- `$ref`: Draft 3 introduces the `$ref` keyword, which allows referencing external schemas for validation. This will enable more modular and reusable schema definitions.
-#### Step 2: Update Validation Keywords:
+#### Step 2: Update Validation Keywords
Draft 3 introduces new validation keywords that improve flexibility in schema definitions. Notable changes include:
@@ -45,4 +45,4 @@ Draft 3 introduces new validation keywords that improve flexibility in schema de
Draft 3 introduces `$ref`, which allows you to reference external schemas using **URIs**. This improves schema modularity and enables better reuse of schema definitions.
-Validate and test your updated schemas manually, or with your preferred tool.
+Validate and test your updated schemas manually, or with your preferred [tool.](https://json-schema.org/tools)
diff --git a/pages/draft-04/migration-notes.md b/pages/draft-04/migration-notes.md
index 988555d5a..504d667aa 100644
--- a/pages/draft-04/migration-notes.md
+++ b/pages/draft-04/migration-notes.md
@@ -57,7 +57,7 @@ The `allOf` keyword has now replaced the previous type schema functionality.
In Draft 3, these identifiers were considered valid:
-```
+```json
id: ""
id: "#"
```
@@ -84,4 +84,4 @@ Draft 4 has introduced new keywords such as `oneOf`, `not`, `anyOf`, and `allOf`
- If you have properties that must always be present, use `required` to define these properties explicitly.
- For schemas that contain nested dependencies, consider restructuring them using `dependencies` to improve schema maintainability.
-Validate and test your updated schemas manually, or with your preferred tool.
+Validate and test your updated schemas manually, or with your preferred [tool.](https://json-schema.org/tools)
diff --git a/pages/draft-06/migration-notes.md b/pages/draft-06/migration-notes.md
index 771bb8527..c9a498eac 100644
--- a/pages/draft-06/migration-notes.md
+++ b/pages/draft-06/migration-notes.md
@@ -1,4 +1,4 @@
---
-title: Draft 05 to Draft 06
+title: Draft 04 to Draft 06
section: docs
---
diff --git a/pages/draft-07/migration-notes.md b/pages/draft-07/migration-notes.md
index 2477e0fe1..a54423f43 100644
--- a/pages/draft-07/migration-notes.md
+++ b/pages/draft-07/migration-notes.md
@@ -1,4 +1,132 @@
---
-title: Draft 07 to Draft 2010-09
+title: Draft 06 to Draft 07
section: docs
---
+
+
+### Introduction
+
+JSON Schema Draft 7 builds upon Draft 6 by introducing new validation and annotation keywords, refining conditional validation capabilities, and clarifying core behaviors. These changes improve schema expressiveness and usability while maintaining backward compatibility with Draft 6.
+
+This guide will help you understand the new keywords and behaviors introduced in Draft 7 for better transition.
+
+### Keyword changelog
+
+| Keyword(Draft 6) | Keyword(Draft 7) | Specification | Keyword type | Behavior Details |
+| ---------------- | ---------------- | ----------------| --------------- | --------------- |
+|`$schema` |`$schema` | Core | Identifier | Change in the dialect (Uses the latest Draft7 dialect). |
+|not present | `$comment`| Core | Reserved location | The `$comment` keyword was introduced for internal comments, requiring a string that must not be shown to end users and has no impact on validation. |
+| not present | `if`| `validation` | Applicator | The `if` keyword was introduced, requiring a valid JSON Schema; instances must validate against then if `if` succeeds, and against else if `if` fails, with `if` validation always succeeding on its own. |
+| not present | `then`| `validation`| Applicator | The `then` keyword was introduced, requiring a valid JSON Schema; it succeeds if the instance validates against both `if` and `then`, and always succeeds if `if` is absent or fails. |
+| not present | `else` | `validation` | Applicator | The `else` keyword was introduced, requiring a valid JSON Schema; it succeeds if the instance fails `if` and validates against `else`, and always succeeds if `if` is absent or succeeds |
+| not present | `contentEncoding` | `validation` | Annotation | The `contentEncoding` keyword was introduced to specify that a string instance should be treated as binary data, requiring a valid string value for encoding. |
+| not present | `contentMediaType`| `validation` | Annotation | The `contentMediaType` keyword specifies the media type of instances defined by the schema and must be a string; it is ignored if the instance is not a string. |
+| not present | `readOnly` | `validation`| Annotation | The `readOnly` keyword, set to true, indicates that the instance value is managed by the owning authority, and modifications by applications will be ignored. |
+| not present | `writeOnly`| `validation` | Annotation | The `writeOnly` keyword, set to true, means the value is not retrieved from the authority but can be sent for updates or creation. |
+
+### Tutorial
+
+#### Migration Steps
+
+##### 1. Update the `$schema` Declaration
+
+Replace your Draft 6 schema declaration with the Draft 7 identifier:
+
+ **Before (Draft 6):**
+
+```
+{
+ "$schema": "http://json-schema.org/draft-06/schema#"
+}
+```
+
+**After (Draft 7):**
+
+```
+{
+ "$schema": "http://json-schema.org/draft-07/schema#"
+}
+```
+
+##### 2. Incorporate the `$comment` Keyword (Optional)
+
+If you want to include inline comments for documentation purposes, use the `$comment` keyword:
+
+```
+{
+ "$comment": "This field is deprecated and will be removed in the next version."
+}
+```
+
+##### 3. Implement Conditional Validation with `if`, `then`, and `else`
+
+Draft 7 introduces conditional validation, which allows schemas to specify different validation rules depending on whether a condition is met.
+
+ **Example:**
+
+```
+{
+ "type": "object",
+ "properties": {
+ "age": { "type": "integer" }
+ },
+ "if": { "properties": { "age": { "minimum": 18 } } },
+ "then": { "properties": { "canVote": { "const": true } } },
+ "else": { "properties": { "canVote": { "const": false } } }
+}
+```
+
+*Explanation:* If `age` is 18 or higher, `canVote` must be `true`; otherwise, it must be `false`.
+
+##### 4. Utilize `contentEncoding` and `contentMediaType` for String Data Interpretation
+
+These keywords help define how string instances should be treated:
+
+ **Example:**
+
+```
+{
+ "type": "string",
+ "contentEncoding": "base64",
+ "contentMediaType": "image/png"
+}
+```
+
+*Explanation:* The string must be base64-encoded and represent a PNG image.
+
+##### 5. Define `readOnly` and `writeOnly` Fields
+
+These annotations help define whether a field should be modifiable or retrievable.
+
+ **Example:**
+
+```
+{
+ "type": "object",
+ "properties": {
+ "username": {
+ "type": "string",
+ "readOnly": true
+ },
+ "password": {
+ "type": "string",
+ "writeOnly": true
+ }
+ }
+}
+```
+
+*Explanation:* `username` is read-only (cannot be changed by clients), while `password` is write-only (cannot be retrieved once set).
+
+### Conclusion
+
+Migrating from JSON Schema Draft 6 to Draft 7 is mostly seamless. The key updates include:
+
+- The introduction of `$comment` for internal documentation.
+- New conditional validation keywords (`if`, `then`, `else`).
+- Enhanced support for string-based data with `contentEncoding` and `contentMediaType`.
+- Read/write permissions via `readOnly` and `writeOnly`.
+
+These adjustments helps you take full advantage of the improvements introduced in Draft 7 while ensuring compatibility with existing schemas.
+
+
diff --git a/pages/draft/2019-09/migration-notes.md b/pages/draft/2019-09/migration-notes.md
index 24180305d..2abf23558 100644
--- a/pages/draft/2019-09/migration-notes.md
+++ b/pages/draft/2019-09/migration-notes.md
@@ -1,5 +1,5 @@
---
-title: Draft 2019-09 to Draft 2020-12
+title: Draft 07 to Draft 2019-09
section: docs
---
From 6e7aa3ec529d3bc1c2f24758a4c3d4230cd09922 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe
Date: Thu, 6 Feb 2025 20:49:20 +0100
Subject: [PATCH 54/71] CI/CD fix
---
data/tooling-data.schema.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/tooling-data.schema.json b/data/tooling-data.schema.json
index b91ae2365..c8185ba78 100644
--- a/data/tooling-data.schema.json
+++ b/data/tooling-data.schema.json
@@ -121,7 +121,7 @@
"C#",
"Go",
"C++",
- "JavaScript",
+ "JavaScript",
"Julia"
]
]
From 7badaeacb4c447e76466b291b3c232052075c05c Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe
Date: Fri, 14 Mar 2025 22:14:04 +0100
Subject: [PATCH 55/71] Added migration guide for draft 2019-09 to 2020-12
---
pages/draft-07/migration-notes.md | 2 +-
pages/draft/2020-12/migration-notes.md | 139 ++++++++++++++++++++++++-
2 files changed, 139 insertions(+), 2 deletions(-)
diff --git a/pages/draft-07/migration-notes.md b/pages/draft-07/migration-notes.md
index a54423f43..20b7eec55 100644
--- a/pages/draft-07/migration-notes.md
+++ b/pages/draft-07/migration-notes.md
@@ -15,7 +15,7 @@ This guide will help you understand the new keywords and behaviors introduced in
| Keyword(Draft 6) | Keyword(Draft 7) | Specification | Keyword type | Behavior Details |
| ---------------- | ---------------- | ----------------| --------------- | --------------- |
|`$schema` |`$schema` | Core | Identifier | Change in the dialect (Uses the latest Draft7 dialect). |
-|not present | `$comment`| Core | Reserved location | The `$comment` keyword was introduced for internal comments, requiring a string that must not be shown to end users and has no impact on validation. |
+|not present | `$comment`| Core | Reserved location | The `$comment` keyword was introduced for internal comments, requiring a string that must not be shown to end users and has no impact on validation. Worked as annotation in Draft 6 but now works as a keyword in Draft 7. |
| not present | `if`| `validation` | Applicator | The `if` keyword was introduced, requiring a valid JSON Schema; instances must validate against then if `if` succeeds, and against else if `if` fails, with `if` validation always succeeding on its own. |
| not present | `then`| `validation`| Applicator | The `then` keyword was introduced, requiring a valid JSON Schema; it succeeds if the instance validates against both `if` and `then`, and always succeeds if `if` is absent or fails. |
| not present | `else` | `validation` | Applicator | The `else` keyword was introduced, requiring a valid JSON Schema; it succeeds if the instance fails `if` and validates against `else`, and always succeeds if `if` is absent or succeeds |
diff --git a/pages/draft/2020-12/migration-notes.md b/pages/draft/2020-12/migration-notes.md
index 4c5606efa..14fcddf63 100644
--- a/pages/draft/2020-12/migration-notes.md
+++ b/pages/draft/2020-12/migration-notes.md
@@ -3,4 +3,141 @@ title: Draft 2019-09 to Draft 2020-12
section: docs
---
-2019-09 to 2020-12
+### Introduction
+
+JSON Schema Draft 2020-12 introduces key improvements over Draft 2019-09, focusing on improved modularity and cross-referencing capabilities. This means improvements for schema resuse, being able to define features a schema supports, etc. This guide covers all major changes and how to migrate from Draft 2019-09 to Draft 2020-12.
+
+### Keyword changelog
+
+| Keyword (Draft 2019-09) | Keyword (Draft 2020-12) | Specification | Keyword Type | Behavior Details |
+| --- | --- | --- | --- | --- |
+| $anchor | remained $anchor | Core | | In 2019-09, $anchor could use a colon and not start with an underscore, but in 2020-12, the upgrade in syntax rule can't use a colon. |
+| $schema | remained $schema | Core | | The behavior was updated to use dialect 2020-12 |
+| $recursiveAnchor | `$dynamicAnchor` | Core | Identifier | Similar to `$anchor`, but supports `$dynamicRef` for flexible schema resolution and $dynamicAnchor now has its own syntax. |
+| $recursiveRef | `$dynamicRef` | Core | Identifier | Works with `$dynamicAnchor` to allow referencing dynamically resolved schemas at runtime. |
+| $vocabulary | `$vocabulary` | Core | Identifier | Specifies which vocabularies a schema uses in 2019-09, but the update now uses format-annotation aiding compatibility and extensibility. |
+| `items` (used for both lists and tuples) | `prefixItems` | Core | Applicator/Annotation | Separates tuple validation (`prefixItems`) from list validation (`items`). Now, `items` applies only to additional elements beyond `prefixItems`. |
+| $vocabulary | | Core | | |
+
+### Tutorial
+
+
+#### Migration Steps
+
+##### 1. Updating `$schema` Declaration
+
+Reference the correct Draft 2020-12 meta-schema to ensure compatibility:
+
+**Before (Draft 2019-09):**
+
+```
+{
+ "$schema": "https://json-schema.org/draft/2019-09/schema"
+}
+```
+
+**After (Draft 2020-12):**
+
+```
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
+}
+```
+
+##### 2. Using `$dynamicAnchor` and `$dynamicRef`
+
+Switch to `$dynamicAnchor` when defining flexible anchors:
+
+**Before (Draft 2019-09):**
+
+```
+{
+ "$anchor": "mySchema"
+}
+```
+
+**After (Draft 2020-12):**
+
+```
+{
+ "$dynamicAnchor": "mySchema"
+}
+```
+
+Use `$dynamicRef` instead of `$recursiveRef` for dynamic references:
+
+**Example:**
+
+```
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$dynamicAnchor": "baseSchema"
+}
+```
+
+To reference dynamically:
+
+```
+{
+ "$dynamicRef": "#baseSchema"
+}
+```
+
+##### 3. Declaring Supported Vocabularies with `$vocabulary`
+
+Explicitly declare the vocabularies your schema uses:
+
+**Example:**
+
+```
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$vocabulary": {
+ "https://json-schema.org/draft/2020-12/vocab/core": true,
+ "https://json-schema.org/draft/2020-12/vocab/applicator": true
+ }
+}
+```
+
+##### 4. Replacing `items` with `prefixItems` for Tuple Validation
+
+For fixed-length arrays (tuples), replace `items` with `prefixItems`:
+
+**Before (Draft 2019-09):**
+
+```
+{
+ "type": "array",
+ "items": [
+ { "type": "string" },
+ { "type": "number" }
+ ]
+}
+```
+
+**After (Draft 2020-12):**
+
+```
+{
+ "type": "array",
+ "prefixItems": [
+ { "type": "string" },
+ { "type": "number" }
+ ]
+}
+```
+
+To validate additional items beyond `prefixItems`, `items` can still be used:
+
+```
+{
+ "type": "array",
+ "prefixItems": [
+ { "type": "string" },
+ { "type": "number" }
+ ],
+ "items": { "type": "boolean" }
+}
+```
+
+These improvements ensure compliance with the latest JSON Schema standards while improving maintainability and extensibility of your schemas.
\ No newline at end of file
From 625b9f83a2ef92efcfddefae7381ca1c644945e0 Mon Sep 17 00:00:00 2001
From: Benjamin Granados <40007659+benjagm@users.noreply.github.com>
Date: Sun, 16 Mar 2025 19:12:47 +0100
Subject: [PATCH 56/71] Added migration notes page
---
pages/draft-02/migration-notes.md | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 pages/draft-02/migration-notes.md
diff --git a/pages/draft-02/migration-notes.md b/pages/draft-02/migration-notes.md
new file mode 100644
index 000000000..e69de29bb
From 6649ac8f966664e30fb390d4299c3d2fa348bcf4 Mon Sep 17 00:00:00 2001
From: Benjamin Granados <40007659+benjagm@users.noreply.github.com>
Date: Sun, 16 Mar 2025 19:16:23 +0100
Subject: [PATCH 57/71] Update migration-notes.md
---
pages/draft-02/migration-notes.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/pages/draft-02/migration-notes.md b/pages/draft-02/migration-notes.md
index e69de29bb..3086b975c 100644
--- a/pages/draft-02/migration-notes.md
+++ b/pages/draft-02/migration-notes.md
@@ -0,0 +1,4 @@
+---
+title: Draft 01 to Draft 02
+section: docs
+---
\ No newline at end of file
From a215d1325c0b519ea9f4afc9b3d9bfe6a1b15ac2 Mon Sep 17 00:00:00 2001
From: Benjamin Granados <40007659+benjagm@users.noreply.github.com>
Date: Sun, 16 Mar 2025 19:28:59 +0100
Subject: [PATCH 58/71] Fix problem with slug
---
components/DocsHelp.tsx | 72 +++++++++++++++++++++-------------
pages/draft-02/[slug].page.tsx | 6 +--
pages/draft-03/[slug].page.tsx | 6 +--
pages/draft-04/[slug].page.tsx | 6 +--
pages/draft-06/[slug].page.tsx | 6 +--
pages/draft-07/[slug].page.tsx | 4 +-
6 files changed, 59 insertions(+), 41 deletions(-)
diff --git a/components/DocsHelp.tsx b/components/DocsHelp.tsx
index 544189b77..e379825fd 100644
--- a/components/DocsHelp.tsx
+++ b/components/DocsHelp.tsx
@@ -3,18 +3,34 @@ import React, { FormEvent, useRef, useState } from 'react';
import extractPathWithoutFragment from '~/lib/extractPathWithoutFragment';
interface DocsHelpProps {
- markdownFile?: string;
+ fileRenderType?: '_indexmd' | 'indexmd' | 'tsx' | '_md' | string;
+ showEditOption?: boolean;
}
-
-export function DocsHelp({ markdownFile }: DocsHelpProps) {
+export function DocsHelp({
+ fileRenderType,
+ showEditOption = true,
+}: DocsHelpProps) {
const router = useRouter();
- const path = encodeURIComponent(router.pathname);
const [isFormOpen, setIsFormOpen] = useState(false);
const [feedbackStatus, setFeedbackStatus] = useState('');
const [isSubmitting, setIsSubmitting] = useState(false);
const [error, setError] = useState('');
const feedbackFormRef = useRef(null);
-
+ let gitredirect = '';
+ if (
+ typeof fileRenderType === 'string' &&
+ fileRenderType.startsWith('https://')
+ ) {
+ gitredirect = fileRenderType;
+ } else if (fileRenderType === 'tsx') {
+ gitredirect = `https://github.com/json-schema-org/website/blob/main/pages${extractPathWithoutFragment(router.asPath) + '/index.page.tsx'}`;
+ } else if (fileRenderType === '_indexmd') {
+ gitredirect = `https://github.com/json-schema-org/website/blob/main/pages${extractPathWithoutFragment(router.asPath) + '/_index.md'}`;
+ } else if (fileRenderType === 'indexmd') {
+ gitredirect = `https://github.com/json-schema-org/website/blob/main/pages${extractPathWithoutFragment(router.asPath) + '/index.md'}`;
+ } else {
+ gitredirect = `https://github.com/json-schema-org/website/blob/main/pages${extractPathWithoutFragment(router.asPath) + '.md'}`;
+ }
async function createFeedbackHandler(event: FormEvent) {
event.preventDefault();
const formData = new FormData(feedbackFormRef.current!);
@@ -296,28 +312,30 @@ export function DocsHelp({ markdownFile }: DocsHelpProps) {
type of contribution!
-
+
+
+
+ Edit this page on Github
+
+
+ )}
);
-}
+}
\ No newline at end of file
diff --git a/pages/draft-02/[slug].page.tsx b/pages/draft-02/[slug].page.tsx
index 9ed6c8896..9a2117cce 100644
--- a/pages/draft-02/[slug].page.tsx
+++ b/pages/draft-02/[slug].page.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import Head from 'next/head';
-import { getLayout } from '~/components/Sidebar';
import StyledMarkdown from '~/components/StyledMarkdown';
+import { getLayout } from '~/components/Sidebar';
import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths';
import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps';
import { Headline1 } from '~/components/Headlines';
@@ -22,7 +22,7 @@ export default function StaticMarkdownPage({
frontmatter: any;
content: any;
}) {
- const markdownFile = '_index';
+ const fileRenderType = '_md';
const newTitle = 'JSON Schema - ' + frontmatter.title;
return (
@@ -32,7 +32,7 @@ export default function StaticMarkdownPage({
{frontmatter.title}
-
+
);
}
diff --git a/pages/draft-03/[slug].page.tsx b/pages/draft-03/[slug].page.tsx
index 2247ab809..9dfd19eac 100644
--- a/pages/draft-03/[slug].page.tsx
+++ b/pages/draft-03/[slug].page.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import Head from 'next/head';
-import { getLayout } from '~/components/Sidebar';
import StyledMarkdown from '~/components/StyledMarkdown';
+import { getLayout } from '~/components/Sidebar';
import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths';
import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps';
import { Headline1 } from '~/components/Headlines';
@@ -22,7 +22,7 @@ export default function StaticMarkdownPage({
frontmatter: any;
content: any;
}) {
- const markdownFile = '_index';
+ const fileRenderType = '_md';
const newTitle = 'JSON Schema - ' + frontmatter.title;
return (
@@ -32,7 +32,7 @@ export default function StaticMarkdownPage({
{frontmatter.title}
-
+
);
}
diff --git a/pages/draft-04/[slug].page.tsx b/pages/draft-04/[slug].page.tsx
index 53aba46d9..1f2c4f1ee 100644
--- a/pages/draft-04/[slug].page.tsx
+++ b/pages/draft-04/[slug].page.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import Head from 'next/head';
-import { getLayout } from '~/components/Sidebar';
import StyledMarkdown from '~/components/StyledMarkdown';
+import { getLayout } from '~/components/Sidebar';
import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths';
import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps';
import { Headline1 } from '~/components/Headlines';
@@ -22,7 +22,7 @@ export default function StaticMarkdownPage({
frontmatter: any;
content: any;
}) {
- const markdownFile = '_index';
+ const fileRenderType = '_md';
const newTitle = 'JSON Schema - ' + frontmatter.title;
return (
@@ -32,7 +32,7 @@ export default function StaticMarkdownPage({
{frontmatter.title}
-
+
);
}
diff --git a/pages/draft-06/[slug].page.tsx b/pages/draft-06/[slug].page.tsx
index fc447db63..9c9a7b991 100644
--- a/pages/draft-06/[slug].page.tsx
+++ b/pages/draft-06/[slug].page.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import Head from 'next/head';
-import { getLayout } from '~/components/Sidebar';
import StyledMarkdown from '~/components/StyledMarkdown';
+import { getLayout } from '~/components/Sidebar';
import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths';
import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps';
import { Headline1 } from '~/components/Headlines';
@@ -22,7 +22,7 @@ export default function StaticMarkdownPage({
frontmatter: any;
content: any;
}) {
- const markdownFile = '_index';
+ const fileRenderType = '_md';
const newTitle = 'JSON Schema - ' + frontmatter.title;
return (
@@ -32,7 +32,7 @@ export default function StaticMarkdownPage({
{frontmatter.title}
-
+
);
}
diff --git a/pages/draft-07/[slug].page.tsx b/pages/draft-07/[slug].page.tsx
index be10dfdba..f4ef2b082 100644
--- a/pages/draft-07/[slug].page.tsx
+++ b/pages/draft-07/[slug].page.tsx
@@ -22,7 +22,7 @@ export default function StaticMarkdownPage({
frontmatter: any;
content: any;
}) {
- const markdownFile = '_index';
+ const fileRenderType = '_md';
const newTitle = 'JSON Schema - ' + frontmatter.title;
return (
@@ -32,7 +32,7 @@ export default function StaticMarkdownPage({
{frontmatter.title}
-
+
);
}
From 2d34ff182e2d613df959683680a0583c9590daa3 Mon Sep 17 00:00:00 2001
From: Benjamin Granados <40007659+benjagm@users.noreply.github.com>
Date: Sun, 16 Mar 2025 19:31:17 +0100
Subject: [PATCH 59/71] Update DocsHelp.tsx
---
components/DocsHelp.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/components/DocsHelp.tsx b/components/DocsHelp.tsx
index e379825fd..8fa21d48b 100644
--- a/components/DocsHelp.tsx
+++ b/components/DocsHelp.tsx
@@ -425,4 +425,4 @@ export function DocsHelp({
);
-}
\ No newline at end of file
+}
From 6009e19ddc3e93a3e41f1e9df3c0ebed6fe7d906 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Thu, 20 Mar 2025 23:00:11 +0100
Subject: [PATCH 60/71] Update pages/draft-03/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft-03/migration-notes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/draft-03/migration-notes.md b/pages/draft-03/migration-notes.md
index c89e62cd6..61a119721 100644
--- a/pages/draft-03/migration-notes.md
+++ b/pages/draft-03/migration-notes.md
@@ -11,7 +11,7 @@ The migration from Draft 2 to Draft 3 of JSON Schema introduced significant upda
| Keyword(Draft 2) | Keyword(Draft 3) | Specification | Keyword type | Behavior Details |
| ----------------- | ------------------- | ------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `$schema` | `$schema` | `core` | Identifier | The `$schema` keyword specifies the URI of the JSON Schema that defines the schema of the current document. Validators use this URI to resolve links and determine the JSON Schema version, enabling appropriate validation features. Including the `$schema` keyword is recommended to ensure compatibility with future JSON Schema changes. |
+| not present | `$schema` | `core` | Identifier | The `$schema` keyword specifies the URI of the JSON Schema that defines the schema of the current document. Validators use this URI to resolve links and determine the JSON Schema version, enabling appropriate validation features. Including the `$schema` keyword is recommended to ensure compatibility with future JSON Schema changes. |
| not present | `$ref` | `core` | Applicator | `$ref` key references an external schema URI for validation. |
| not present | `id` | `core` | Identifier | This keyword defines the schema's current URI (a "self" link). The URI can be relative or absolute and is resolved against the parent schema's URI. If there is no parent schema, it is resolved against the URI used to retrieve the schema. |
| `optional` | `required` | `core` | Assertion | In **draft-02**, object properties defined within the `properties` keyword were required by default, and the `optional` keyword was used to explicitly make a property optional. In **draft-03**, this behavior changed: properties defined under `properties` are now optional by default. As a result, the `optional` keyword became redundant and was replaced by the `required` keyword to reflect the new default behavior, where properties are optional unless explicitly marked as required. |
From 54a0e49c3d3909790f226536aedf7c6c39abe76e Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Thu, 20 Mar 2025 23:00:50 +0100
Subject: [PATCH 61/71] Update pages/draft-07/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft-07/migration-notes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/draft-07/migration-notes.md b/pages/draft-07/migration-notes.md
index 20b7eec55..97e771356 100644
--- a/pages/draft-07/migration-notes.md
+++ b/pages/draft-07/migration-notes.md
@@ -16,7 +16,7 @@ This guide will help you understand the new keywords and behaviors introduced in
| ---------------- | ---------------- | ----------------| --------------- | --------------- |
|`$schema` |`$schema` | Core | Identifier | Change in the dialect (Uses the latest Draft7 dialect). |
|not present | `$comment`| Core | Reserved location | The `$comment` keyword was introduced for internal comments, requiring a string that must not be shown to end users and has no impact on validation. Worked as annotation in Draft 6 but now works as a keyword in Draft 7. |
-| not present | `if`| `validation` | Applicator | The `if` keyword was introduced, requiring a valid JSON Schema; instances must validate against then if `if` succeeds, and against else if `if` fails, with `if` validation always succeeding on its own. |
+| not present | `if`| `validation` | Applicator | The `if` keyword was introduced, requiring a valid JSON Schema; instances must validate against `then` if `if` succeeds, and against `else` if `if` fails, with `if` validation always succeeding on its own. |
| not present | `then`| `validation`| Applicator | The `then` keyword was introduced, requiring a valid JSON Schema; it succeeds if the instance validates against both `if` and `then`, and always succeeds if `if` is absent or fails. |
| not present | `else` | `validation` | Applicator | The `else` keyword was introduced, requiring a valid JSON Schema; it succeeds if the instance fails `if` and validates against `else`, and always succeeds if `if` is absent or succeeds |
| not present | `contentEncoding` | `validation` | Annotation | The `contentEncoding` keyword was introduced to specify that a string instance should be treated as binary data, requiring a valid string value for encoding. |
From aa0ca88c4429dc5f2d4340850e1e09c06f6073cc Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Thu, 20 Mar 2025 23:01:59 +0100
Subject: [PATCH 62/71] Update pages/draft/2020-12/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft/2020-12/migration-notes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/draft/2020-12/migration-notes.md b/pages/draft/2020-12/migration-notes.md
index 14fcddf63..f6ad46611 100644
--- a/pages/draft/2020-12/migration-notes.md
+++ b/pages/draft/2020-12/migration-notes.md
@@ -16,7 +16,7 @@ JSON Schema Draft 2020-12 introduces key improvements over Draft 2019-09, focusi
| $recursiveAnchor | `$dynamicAnchor` | Core | Identifier | Similar to `$anchor`, but supports `$dynamicRef` for flexible schema resolution and $dynamicAnchor now has its own syntax. |
| $recursiveRef | `$dynamicRef` | Core | Identifier | Works with `$dynamicAnchor` to allow referencing dynamically resolved schemas at runtime. |
| $vocabulary | `$vocabulary` | Core | Identifier | Specifies which vocabularies a schema uses in 2019-09, but the update now uses format-annotation aiding compatibility and extensibility. |
-| `items` (used for both lists and tuples) | `prefixItems` | Core | Applicator/Annotation | Separates tuple validation (`prefixItems`) from list validation (`items`). Now, `items` applies only to additional elements beyond `prefixItems`. |
+| `items` (used for both lists and tuples) | `prefixItems` | Core | Applicator | Separates tuple validation (`prefixItems`) from list validation (`items`). Now, `items` applies only to additional elements beyond `prefixItems`. |
| $vocabulary | | Core | | |
### Tutorial
From 586e3d0bad0977678027651fd4ee41cd26ca7117 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Thu, 20 Mar 2025 23:05:17 +0100
Subject: [PATCH 63/71] Update pages/draft-07/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft-07/migration-notes.md | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/pages/draft-07/migration-notes.md b/pages/draft-07/migration-notes.md
index 97e771356..97dec98eb 100644
--- a/pages/draft-07/migration-notes.md
+++ b/pages/draft-07/migration-notes.md
@@ -70,7 +70,10 @@ Draft 7 introduces conditional validation, which allows schemas to specify diffe
"properties": {
"age": { "type": "integer" }
},
- "if": { "properties": { "age": { "minimum": 18 } } },
+ "if": {
+ "properties": { "age": { "minimum": 18 } },
+ "required": ["age"]
+ },
"then": { "properties": { "canVote": { "const": true } } },
"else": { "properties": { "canVote": { "const": false } } }
}
From f568aee06fc0af0dc76f0de7c832ea200ddeac01 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Thu, 20 Mar 2025 23:05:49 +0100
Subject: [PATCH 64/71] Update pages/draft/2020-12/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft/2020-12/migration-notes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/draft/2020-12/migration-notes.md b/pages/draft/2020-12/migration-notes.md
index f6ad46611..212d5a444 100644
--- a/pages/draft/2020-12/migration-notes.md
+++ b/pages/draft/2020-12/migration-notes.md
@@ -14,7 +14,7 @@ JSON Schema Draft 2020-12 introduces key improvements over Draft 2019-09, focusi
| $anchor | remained $anchor | Core | | In 2019-09, $anchor could use a colon and not start with an underscore, but in 2020-12, the upgrade in syntax rule can't use a colon. |
| $schema | remained $schema | Core | | The behavior was updated to use dialect 2020-12 |
| $recursiveAnchor | `$dynamicAnchor` | Core | Identifier | Similar to `$anchor`, but supports `$dynamicRef` for flexible schema resolution and $dynamicAnchor now has its own syntax. |
-| $recursiveRef | `$dynamicRef` | Core | Identifier | Works with `$dynamicAnchor` to allow referencing dynamically resolved schemas at runtime. |
+| $recursiveRef | `$dynamicRef` | Core | Applicator | Works with `$dynamicAnchor` to allow referencing dynamically resolved schemas at runtime. |
| $vocabulary | `$vocabulary` | Core | Identifier | Specifies which vocabularies a schema uses in 2019-09, but the update now uses format-annotation aiding compatibility and extensibility. |
| `items` (used for both lists and tuples) | `prefixItems` | Core | Applicator | Separates tuple validation (`prefixItems`) from list validation (`items`). Now, `items` applies only to additional elements beyond `prefixItems`. |
| $vocabulary | | Core | | |
From 06de9faa1fad882066ff76fb7b8f487460c3e949 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Thu, 20 Mar 2025 23:06:46 +0100
Subject: [PATCH 65/71] Update pages/draft/2020-12/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft/2020-12/migration-notes.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/pages/draft/2020-12/migration-notes.md b/pages/draft/2020-12/migration-notes.md
index 212d5a444..97ef9662f 100644
--- a/pages/draft/2020-12/migration-notes.md
+++ b/pages/draft/2020-12/migration-notes.md
@@ -17,7 +17,6 @@ JSON Schema Draft 2020-12 introduces key improvements over Draft 2019-09, focusi
| $recursiveRef | `$dynamicRef` | Core | Applicator | Works with `$dynamicAnchor` to allow referencing dynamically resolved schemas at runtime. |
| $vocabulary | `$vocabulary` | Core | Identifier | Specifies which vocabularies a schema uses in 2019-09, but the update now uses format-annotation aiding compatibility and extensibility. |
| `items` (used for both lists and tuples) | `prefixItems` | Core | Applicator | Separates tuple validation (`prefixItems`) from list validation (`items`). Now, `items` applies only to additional elements beyond `prefixItems`. |
-| $vocabulary | | Core | | |
### Tutorial
From bec87f186c7fa9def7ae9048321390b947ce9b53 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Thu, 20 Mar 2025 23:08:39 +0100
Subject: [PATCH 66/71] Update pages/draft/2020-12/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft/2020-12/migration-notes.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pages/draft/2020-12/migration-notes.md b/pages/draft/2020-12/migration-notes.md
index 97ef9662f..d07344ebc 100644
--- a/pages/draft/2020-12/migration-notes.md
+++ b/pages/draft/2020-12/migration-notes.md
@@ -15,7 +15,7 @@ JSON Schema Draft 2020-12 introduces key improvements over Draft 2019-09, focusi
| $schema | remained $schema | Core | | The behavior was updated to use dialect 2020-12 |
| $recursiveAnchor | `$dynamicAnchor` | Core | Identifier | Similar to `$anchor`, but supports `$dynamicRef` for flexible schema resolution and $dynamicAnchor now has its own syntax. |
| $recursiveRef | `$dynamicRef` | Core | Applicator | Works with `$dynamicAnchor` to allow referencing dynamically resolved schemas at runtime. |
-| $vocabulary | `$vocabulary` | Core | Identifier | Specifies which vocabularies a schema uses in 2019-09, but the update now uses format-annotation aiding compatibility and extensibility. |
+| $vocabulary | `$vocabulary` | Core | | Specifies which vocabularies a schema uses in 2019-09, but the update now uses format-annotation aiding compatibility and extensibility. |
| `items` (used for both lists and tuples) | `prefixItems` | Core | Applicator | Separates tuple validation (`prefixItems`) from list validation (`items`). Now, `items` applies only to additional elements beyond `prefixItems`. |
### Tutorial
From 8a56fdf06c5ed22295537797c40de10e4712c9b2 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Thu, 20 Mar 2025 23:09:49 +0100
Subject: [PATCH 67/71] Update pages/draft/2020-12/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft/2020-12/migration-notes.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pages/draft/2020-12/migration-notes.md b/pages/draft/2020-12/migration-notes.md
index d07344ebc..c7f308919 100644
--- a/pages/draft/2020-12/migration-notes.md
+++ b/pages/draft/2020-12/migration-notes.md
@@ -45,13 +45,13 @@ Reference the correct Draft 2020-12 meta-schema to ensure compatibility:
##### 2. Using `$dynamicAnchor` and `$dynamicRef`
-Switch to `$dynamicAnchor` when defining flexible anchors:
+Switch to `$dynamicAnchor` when defining recursive schemas:
**Before (Draft 2019-09):**
```
{
- "$anchor": "mySchema"
+ "$recursiveAnchor": true
}
```
From f0d7f96f2b7b03e522ecbe7aaf3ab8478ca30c49 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Thu, 20 Mar 2025 23:10:34 +0100
Subject: [PATCH 68/71] Update pages/draft/2020-12/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft/2020-12/migration-notes.md | 65 ++++++++++++++++++++++++--
1 file changed, 60 insertions(+), 5 deletions(-)
diff --git a/pages/draft/2020-12/migration-notes.md b/pages/draft/2020-12/migration-notes.md
index c7f308919..375013a5a 100644
--- a/pages/draft/2020-12/migration-notes.md
+++ b/pages/draft/2020-12/migration-notes.md
@@ -84,16 +84,71 @@ To reference dynamically:
##### 3. Declaring Supported Vocabularies with `$vocabulary`
-Explicitly declare the vocabularies your schema uses:
+For your custom dialects, you'll need to update a couple of vocabulary declarations.
-**Example:**
+If you're using `format` as annotations (the default), you'll make the following change.
+
+**Before (Draft 2019-09):**
+```json
+{
+ "$vocabulary": {
+ "https://json-schema.org/draft/2019-09/vocab/format": false
+ }
+}
```
+
+**After (Draft 2020-12):**
+
+```json
+{
+ "$vocabulary": {
+ "https://json-schema.org/draft/2020-12/vocab/format-annotation": true
+ }
+}
+```
+
+If you're using `format` as annotations, do this instead,
+
+**Before (Draft 2019-09):**
+
+```json
+{
+ "$vocabulary": {
+ "https://json-schema.org/draft/2019-09/vocab/format": true
+ }
+}
+```
+
+**After (Draft 2020-12):**
+
+```json
+{
+ "$vocabulary": {
+ "https://json-schema.org/draft/2020-12/vocab/format-assertion": true
+ }
+}
+```
+
+Next, update your Applicator vocabulary declaration to include Unevaluated.
+
+**Before (Draft 2019-09):**
+
+```json
+{
+ "$vocabulary": {
+ "https://json-schema.org/draft/2019-09/vocab/applicator": true
+ }
+}
+```
+
+**After (Draft 2020-12):**
+
+```json
{
- "$schema": "https://json-schema.org/draft/2020-12/schema",
"$vocabulary": {
- "https://json-schema.org/draft/2020-12/vocab/core": true,
- "https://json-schema.org/draft/2020-12/vocab/applicator": true
+ "https://json-schema.org/draft/2020-12/vocab/applicator": true,
+ "https://json-schema.org/draft/2020-12/vocab/unevaluated": true
}
}
```
From e2e3fb7193a56b42f3a016175a8149edd7205749 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe <60541622+kwennB@users.noreply.github.com>
Date: Thu, 20 Mar 2025 23:12:20 +0100
Subject: [PATCH 69/71] Update pages/draft/2020-12/migration-notes.md
Co-authored-by: Jason Desrosiers
---
pages/draft/2020-12/migration-notes.md | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/pages/draft/2020-12/migration-notes.md b/pages/draft/2020-12/migration-notes.md
index 375013a5a..3eb9cc24e 100644
--- a/pages/draft/2020-12/migration-notes.md
+++ b/pages/draft/2020-12/migration-notes.md
@@ -183,7 +183,22 @@ For fixed-length arrays (tuples), replace `items` with `prefixItems`:
To validate additional items beyond `prefixItems`, `items` can still be used:
+**Before (Draft 2019-09):**
+
+```json
+{
+ "type": "array",
+ "items": [
+ { "type": "string" },
+ { "type": "number" }
+ ],
+ "additionalItems": { "type": "boolean" }
+}
```
+
+**After (Draft 2020-12):**
+
+```json
{
"type": "array",
"prefixItems": [
From 8800dc07e50c3418ae99b8d9f14b925a1c3288e4 Mon Sep 17 00:00:00 2001
From: Blessing Ene Anyebe
Date: Fri, 21 Mar 2025 18:24:34 +0100
Subject: [PATCH 70/71] Updated migration guides based on feedback
---
pages/draft-03/migration-notes.md | 27 +++++++++++++-------------
pages/draft-04/migration-notes.md | 9 +++------
pages/draft/2020-12/migration-notes.md | 10 +++++-----
3 files changed, 22 insertions(+), 24 deletions(-)
diff --git a/pages/draft-03/migration-notes.md b/pages/draft-03/migration-notes.md
index 61a119721..afe552176 100644
--- a/pages/draft-03/migration-notes.md
+++ b/pages/draft-03/migration-notes.md
@@ -11,17 +11,18 @@ The migration from Draft 2 to Draft 3 of JSON Schema introduced significant upda
| Keyword(Draft 2) | Keyword(Draft 3) | Specification | Keyword type | Behavior Details |
| ----------------- | ------------------- | ------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| not present | `$schema` | `core` | Identifier | The `$schema` keyword specifies the URI of the JSON Schema that defines the schema of the current document. Validators use this URI to resolve links and determine the JSON Schema version, enabling appropriate validation features. Including the `$schema` keyword is recommended to ensure compatibility with future JSON Schema changes. |
-| not present | `$ref` | `core` | Applicator | `$ref` key references an external schema URI for validation. |
-| not present | `id` | `core` | Identifier | This keyword defines the schema's current URI (a "self" link). The URI can be relative or absolute and is resolved against the parent schema's URI. If there is no parent schema, it is resolved against the URI used to retrieve the schema. |
-| `optional` | `required` | `core` | Assertion | In **draft-02**, object properties defined within the `properties` keyword were required by default, and the `optional` keyword was used to explicitly make a property optional. In **draft-03**, this behavior changed: properties defined under `properties` are now optional by default. As a result, the `optional` keyword became redundant and was replaced by the `required` keyword to reflect the new default behavior, where properties are optional unless explicitly marked as required. |
-| `minimumCanEqual` | `exclusiveMinimum` | `core` | Assertion | Specifies that instance values must be strictly greater than the minimum when `exclusiveMinimum` is `true`. |
-| `maximumCanEqual` | `exclusiveMaximum` | `core` | Assertion | This ensures that instance values fall below the maximum when `exclusiveMaximum` is `true`. |
-| `format` | `format` | `core` | Annotation | This update refined format handling by adding and removing specific types, offering clearer guidance for expected data formats. |
-| not present | `patternProperties` | `core` | Applicator | Enforces schema validation on properties with names matching specified regex patterns. Each property matching a pattern must conform to the schema defined for that pattern in `patternProperties`. |
-| `requires` | `dependencies` | `core` | Assertion | Defines property dependencies - if an instance includes a property named in this attribute, that property must meet additional validation requirements defined by its dependency value. |
-| not present | `additionalItems` | `core` | Applicator | Defines rules for extra items in an array - can be set to false to disallow extra items beyond specified tuples, or to a schema that additional items must follow. |
-| `alternate` | removed | `core` | | - |
+| not present | `$schema` | `Core` | Identifier | The `$schema` keyword specifies the URI of the JSON Schema that defines the schema of the current document. Validators use this URI to resolve links and determine the JSON Schema version, enabling appropriate validation features. Including the `$schema` keyword is recommended to ensure compatibility with future JSON Schema changes. |
+| not present | `$ref` | `Core` | Applicator | `$ref` key references an external schema URI for validation. |
+| not present | `id` | `Core` | Identifier | This keyword defines the schema's current URI (a "self" link). The URI can be relative or absolute and is resolved against the parent schema's URI. If there is no parent schema, it is resolved against the URI used to retrieve the schema. |
+| `optional` | `required` | `Core` | Assertion | In **draft-02**, object properties defined within the `properties` keyword were required by default, and the `optional` keyword was used to explicitly make a property optional. In **draft-03**, this behavior changed: properties defined under `properties` are now optional by default. As a result, the `optional` keyword became redundant and was replaced by the `required` keyword to reflect the new default behavior, where properties are optional unless explicitly marked as required. |
+| `minimumCanEqual` | `exclusiveMinimum` | `Core` | Assertion | Specifies that instance values must be strictly greater than the minimum when `exclusiveMinimum` is `true`. |
+| `maximumCanEqual` | `exclusiveMaximum` | `Core` | Assertion | This ensures that instance values fall below the maximum when `exclusiveMaximum` is `true`. |
+| `format` | `format` | `Core` | Annotation | This update refined format handling by adding and removing specific types, offering clearer guidance for expected data formats. |
+| not present | `patternProperties` | `Core` | Applicator | Enforces schema validation on properties with names matching specified regex patterns. Each property matching a pattern must conform to the schema defined for that pattern in `patternProperties`. |
+| `requires` | `dependencies` | `Core` | Assertion | Defines property dependencies - if an instance includes a property named in this attribute, that property must meet additional validation requirements defined by its dependency value. |
+| not present | `additionalItems` | `Core` | Applicator | Defines rules for extra items in an array - can be set to false to disallow extra items beyond specified tuples, or to a schema that additional items must follow. |
+| `properties` | remained `properties` | `Core` | Applicator | The `properties` takes two values, either `optional` or `required`; where `optional `, is the default value. |
+| `alternate` | removed | `Core` | | - |
### Tutorial
@@ -29,8 +30,8 @@ The migration from Draft 2 to Draft 3 of JSON Schema introduced significant upda
Start by understanding the key differences between Draft 2 and Draft 3, especially regarding core changes in $schema, $ref, and validation keywords.
-- `$schema`: In Draft 3, this remains the same but is now more standardized to handle the schema dialect and the version of the specification being used.
-- `$ref`: Draft 3 introduces the `$ref` keyword, which allows referencing external schemas for validation. This will enable more modular and reusable schema definitions.
+- `$schema`: Draft 3 introduces the `$schema` keyword, it handles the schema dialect and the version of the specification being used.
+- `$ref`: Draft 3 introduces the `$ref` keyword, which allows referencing external schemas for validation and schemas within the same schema document. This will enable more modular and reusable schema definitions.
#### Step 2: Update Validation Keywords
diff --git a/pages/draft-04/migration-notes.md b/pages/draft-04/migration-notes.md
index 504d667aa..30f8667cd 100644
--- a/pages/draft-04/migration-notes.md
+++ b/pages/draft-04/migration-notes.md
@@ -21,7 +21,7 @@ Below is a summary table highlighting keyword changes between Draft 3 and Draft
| `required` | `required` | Validation | Assertion | The `required` keyword shifted from being a boolean within each property to a standalone keyword that takes an array of required property names outside of properties. |
| `divisibleBy` | `multipleOf` | Validation | Assertion | `divisibleBy` was renamed to `multipleOf` with a stricter requirement that its value must be greater than 0. |
| `extends` | removed | Validation | Applicator | The `extends` keyword was removed; allOf was added as a new keyword to achieve similar functionality. |
-| `format` | `format` | Validation | Annotation | - |
+| `format` | `format` | Validation | Annotation | The attributes `phone`, `style`, and `color` have been removed and ip-address has been renamed to `ipv4`. |
| `dependencies` | `dependencies` | Core | Assertion | The `dependencies` member values were changed to require an array of strings or a schema, eliminating the use of single strings. |
| `id` | `id` | Core | Identifier | - |
| Not present | `allOf` | Core | Applicator | - |
@@ -58,16 +58,13 @@ The `allOf` keyword has now replaced the previous type schema functionality.
In Draft 3, these identifiers were considered valid:
```json
-id: ""
-id: "#"
+"id": ""
+"id": "#"
```
However, this format is now prohibited from Draft 4 onwards.
-
-Before Draft 3, the JSON Schema only included the Core specification, which outlined the foundational elements for schema structure. With Draft 4, the specification expanded to incorporate Validation, establishing rules for data format, structure, and type requirements. This addition enabled schema authors to define and enforce validation constraints directly within their schemas, making it easier for implementers to ensure data integrity and compatibility as schemas evolved.
-
### Tutorial
diff --git a/pages/draft/2020-12/migration-notes.md b/pages/draft/2020-12/migration-notes.md
index 3eb9cc24e..7e67c33b4 100644
--- a/pages/draft/2020-12/migration-notes.md
+++ b/pages/draft/2020-12/migration-notes.md
@@ -11,11 +11,11 @@ JSON Schema Draft 2020-12 introduces key improvements over Draft 2019-09, focusi
| Keyword (Draft 2019-09) | Keyword (Draft 2020-12) | Specification | Keyword Type | Behavior Details |
| --- | --- | --- | --- | --- |
-| $anchor | remained $anchor | Core | | In 2019-09, $anchor could use a colon and not start with an underscore, but in 2020-12, the upgrade in syntax rule can't use a colon. |
-| $schema | remained $schema | Core | | The behavior was updated to use dialect 2020-12 |
-| $recursiveAnchor | `$dynamicAnchor` | Core | Identifier | Similar to `$anchor`, but supports `$dynamicRef` for flexible schema resolution and $dynamicAnchor now has its own syntax. |
-| $recursiveRef | `$dynamicRef` | Core | Applicator | Works with `$dynamicAnchor` to allow referencing dynamically resolved schemas at runtime. |
-| $vocabulary | `$vocabulary` | Core | | Specifies which vocabularies a schema uses in 2019-09, but the update now uses format-annotation aiding compatibility and extensibility. |
+|` $anchor` | remained `$anchor` | Core | | In 2019-09, $anchor could use a colon and not start with an underscore, but in 2020-12, the upgrade in syntax rule can't use a colon. |
+| `$schema` | remained` $schema` | Core | | The behavior was updated to use dialect 2020-12 |
+| `$recursiveAnchor` | `$dynamicAnchor` | Core | Identifier | Similar to `$anchor`, but supports `$dynamicRef` for flexible schema resolution. |
+|` $recursiveRef` | `$dynamicRef` | Core | Applicator | Works with `$dynamicAnchor` to allow referencing dynamically resolved schemas at runtime. |
+| `$vocabulary` | `$vocabulary` | Core | | Specifies which vocabularies a schema uses in 2019-09, but the update now uses format-annotation aiding compatibility and extensibility. |
| `items` (used for both lists and tuples) | `prefixItems` | Core | Applicator | Separates tuple validation (`prefixItems`) from list validation (`items`). Now, `items` applies only to additional elements beyond `prefixItems`. |
### Tutorial
From 9bbb1c2481deb260b933337ebb53b3af1c1f5bc0 Mon Sep 17 00:00:00 2001
From: Benjamin Granados <40007659+benjagm@users.noreply.github.com>
Date: Sun, 11 May 2025 21:20:47 +0200
Subject: [PATCH 71/71] Update index.page.tsx
---
pages/specification/migration/index.page.tsx | 7 -------
1 file changed, 7 deletions(-)
diff --git a/pages/specification/migration/index.page.tsx b/pages/specification/migration/index.page.tsx
index 6024308e4..6c4908285 100644
--- a/pages/specification/migration/index.page.tsx
+++ b/pages/specification/migration/index.page.tsx
@@ -71,13 +71,6 @@ export default function ImplementationsPages({
bodyTextSize='small'
link='/draft-06/migration-notes'
/>
-