From 691ebcf7077c9b9dba5b9d7cb6432d7aa266cb2d Mon Sep 17 00:00:00 2001 From: Greg Dennis Date: Fri, 18 Aug 2023 12:38:26 +1200 Subject: [PATCH 1/3] add post about modelling inheritance --- pages/posts/modelling-inheritance.md | 233 ++++++++++++++++++ .../2023/modelling-inheritance/cover.webp | Bin 0 -> 69602 bytes 2 files changed, 233 insertions(+) create mode 100644 pages/posts/modelling-inheritance.md create mode 100644 public/img/posts/2023/modelling-inheritance/cover.webp diff --git a/pages/posts/modelling-inheritance.md b/pages/posts/modelling-inheritance.md new file mode 100644 index 00000000..d24a419a --- /dev/null +++ b/pages/posts/modelling-inheritance.md @@ -0,0 +1,233 @@ +--- +title: "Modeling Inheritance with JSON Schema" +date: 2023-08-18 +tags: + - Questions + - Explorations +type: Engineering +cover: /img/posts/2023/modelling-inheritance/cover.webp +authors: + - name: Greg Dennis + photo: /img/avatars/gregsdennis.webp + link: https://twitter.com/gregsdennis + byline: JSON Tooling Implementer, Specification & Tooling Architect @ Postman +excerpt: Can it be done? Well, sort of. +--- + +Probably the most common question that we get is, "How do I model an inheritance hierarchy in JSON Schema?" And most commonly, our answer to that question is, "You don't." + +JSON Schema just isn't [designed](https://modern-json-schema.com/json-schema-is-a-constraint-system) for that. It's a subtractive system, where more constraints means fewer matches, and data modelling tends to be additive, where more definition means more matches. The systems are inherently incompatible. + +However, if we accept a few concessions, we might just be able to work something out. + +## Our Models + +To get started, we're going to attempt to model some computer peripherals. In a strongly typed language, we may model this using a `Peripheral` base class that defines a number of properties (and typically functions) that are common to all peripherals. Then, each device would be a subclass of this base class. + +For our purposes, we're just going to define the `name` property on the base class. That is, every peripheral needs to have a name. + +_I'm going to use TypeScript for the code samples, but the concepts will apply to other languages as well._ + +```ts +abstract class Peripheral { + name: string; + // ... +} +``` + +Now we can define other peripherals, `Mouse` and `Keyboard`, by inheriting from this base class. + +```ts +class Mouse extends Peripheral { + buttonCount: number; + wheelCount: number; + trackingType: string; // ball / optical + // ... +} + +class Keyboard extends Peripheral { + keyCount: number; + mediaButtons: boolean; + // ... +} +``` + +This will suffice to get us started. + +## Representing Our Models Using Constraints + +In JSON Schema, ideally, we'd want to have schemas for each of these. For peripheral, we might try something like this: + +```json +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "schema:peripheral", + "type": "object", + "properties": { + "name": true + }, + "required": [ "name" ], + "additionalProperties": false +} +``` + +_I'm using a `schema:` URI for the schema identifiers since these schemas aren't accessible anywhere. It's a recommendation that we're [considering](https://github.com/orgs/json-schema-org/discussions/460) for the upcoming version of JSON Schema. Let us know if you like this approach._ + +But that `additionalProperties` keyword causes problems. Specifically, "inherited" schemas (like what we're going to build for `Mouse`) can't define additional properties, which is something it definitely needs to do. That just won't work at all, and the solution is simply to omit it. + +```json +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "schema:peripheral", + "type": "object", + "properties": { + "name": true + }, + "required": [ "name" ] +} +``` + +But now, _any_ JSON object with a `name` property is validated as a peripheral. While not quite right, we can live with it. This gives us our first concession: + +> Schemas that model base classes cannot verify that an instance represents a derivation of that class. + +Modelling the derivations is pretty straightforward: we model what the derivation defines and add a `$ref` back to the base schema. + +```json +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "schema:mouse", + "$ref": "schema:peripheral", + "type": "object", + "properties": { + "buttonCount": { "type": "integer" }, + "wheelCount": { "type": "integer" }, + "trackingType": { "enum": [ "ball", "optical" ] } + }, + "required": [ "buttons", "wheels", "tracking" ], + "unevaluatedProperties": false +} + +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "schema:keyboard", + "$ref": "schema:peripheral", + "properties": { + "keys": { "type": "integer" }, + "mediaButtons": { "type": "boolean" } + }, + "required": [ "keys", "mediaButtons" ], + "unevaluatedProperties": false +} +``` + +For the derived schemas, we can use `unevaluatedProperties` because these don't have any schemas which derive from them. If the inheritance hierarchy is bigger and these classes serve as bases for others, we'd have to leave the `unevaluatedProperties` off, just like we did for `schema:peripheral`. Checking for extra properties can only be done for the leaves of the inheritance tree. + +Additionally, we use `unevaluatedProperties` instead of `additionalProperties` because we need it to be able to "see inside" of the `$ref` to identify that `name` was evaluated as part of the base schema. With `additionalProperties`, `name` would be rejected. + +That seems pretty simple, and we only had to make a single (and rather easy) concession. + +## Adding a Recursive Reference + +What if one of our peripherals could itself have other peripherals attached? Say, a USB hub. + +```ts +class UsbHub extends Peripheral { + connectedDevices: Peripheral[]; + // ... +} +``` + +Let's try to model that in a schema: + +```json +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "schema:usbhub", + "$ref": "schema:peripheral", + "properties": { + "connectedDevices": { + "type": "array", + "items": { "$ref": "schema:peripheral" } + } + }, + "required": [ "connectedDevices" ], + "unevaluatedProperties": false +} +``` + +This works, but remember that first concession we made? This schema would allow items that are _anything_ with a string `name` property. But that doesn't align with the TypeScript models. The TypeScript model says that `connectedDevices` can only hold types that are derived from `Peripheral`. + +While this may be sufficient for some, in my opinion it doesn't work. I want to ensure that the items in the `connectedDevices` array are only known peripheral types. To do this, we need another schema. + +## Supporting Only Known Derivations + +Problem: we want a schema that identifies that some JSON represents _one of_ our known device types. + +Solution: define the schema using a `oneOf` that references all of the known device type schemas. + +```json +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "schema:known-peripherals", + "oneOf": [ + { "$ref": "schema:mouse" }, + { "$ref": "schema:keyboard" }, + { "$ref": "schema:usbhub" } + ] +} +``` + +This schema is pretty basic. It just says, "If the JSON matches one of these devices, then it's a known peripheral." + +We can now reference this in `schema:usbhub`. + +```json +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "schema:usbhub", + "$ref": "schema:peripheral", + "properties": { + "connectedDevices": { + "type": "array", + "items": { "$ref": "schema:known-peripherals" } + } + }, + "required": [ "connectedDevices" ], + "unevaluatedProperties": false +} +``` + +Now the USB hub _and its connected devices_ can be validated properly. + +The catch is that because I can't dynamically add items to the `oneOf`, I can only support devices I know about at dev time. For most cases, this isn't a problem. However, if I plan on publishing this in a package to be used by others, it wouldn't support devices that they create. (I do have a workaround for this, but it's not a good one, so I won't be sharing it here.) This gives us our second concession: + +> If we need references to the base class, we can only support derivations we know about ahead of time. + +## An Unexpected Benefit + +To determine whether some JSON is a `Mouse` or a `Keyboard` or a `UsbHub`, one might hold all three of those schemas and validate each one of them in turn to determine which one was received. But our solution to the referencing problem actually gives us a better option. + +We know that `schema:known-peripherals` can validate _any_ known peripheral (because we designed it to do that), but if we use a more verbose output format, it can actually tell us which _kind_ of peripheral we got. + +First, we identify which `oneOf` subschema passed validation by looking through its child output nodes for a `valid: true`. We know that's going to be a `$ref` schema (because it's a `oneOf` that contains only `$ref` schemas), which means that the child output node of that `$ref` schema will represent the output of the peripheral schema, which contains the peripheral schema's `$id` URI. + +So in a single validation pass, we get whether it's a supported peripheral of any kind, _and_ we can discern what kind it is. Two birds, one stone. + +## So is Inheritance in JSON Schema Possible? + +No. + +And yes, if we're okay that: + +> Schemas that model base classes cannot verify that an instance represents a derivation of that class. + +> If we need references to the base class, we can only support derivations we know about ahead of time. + +I think these will be acceptable for most people, but I'm also sure that someone will inevitably run into a scenario where this approach won't work. + +This is the best I've seen so far at modelling inheritance, and I'm fairly certain that JSON Schema can't get it 100% right without some new functionality. + +If you have some other ideas about how to support polymorphism, or if you think polymorphism is overrated and JSON Schema doesn't need to support it, please join the [conversation](https://github.com/json-schema-org/vocab-idl/issues/49) in our IDL Vocabulary repository. + +_Cover image by [Gerd Altmann](https://pixabay.com/users/geralt-9301/) on [Pixabay](https://pixabay.com/illustrations/board-drawing-hierarchy-755792/)_ diff --git a/public/img/posts/2023/modelling-inheritance/cover.webp b/public/img/posts/2023/modelling-inheritance/cover.webp new file mode 100644 index 0000000000000000000000000000000000000000..d1f6dbaeeb77482b2ed5cea5a4f2ee67f606b184 GIT binary patch literal 69602 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 U1OkD;|0D4I1fc=9oEZ;{FEn39qW}N^ literal 0 HcmV?d00001 From 799149cb7d187eda8f69406d5ceb29ed9b29e655 Mon Sep 17 00:00:00 2001 From: Greg Dennis Date: Fri, 1 Sep 2023 13:06:16 +1200 Subject: [PATCH 2/3] better typescript Co-authored-by: Jason Desrosiers --- pages/posts/modelling-inheritance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/posts/modelling-inheritance.md b/pages/posts/modelling-inheritance.md index d24a419a..54db8191 100644 --- a/pages/posts/modelling-inheritance.md +++ b/pages/posts/modelling-inheritance.md @@ -41,7 +41,7 @@ Now we can define other peripherals, `Mouse` and `Keyboard`, by inheriting from class Mouse extends Peripheral { buttonCount: number; wheelCount: number; - trackingType: string; // ball / optical + trackingType: "ball" | "optical"; // ... } From 39852f1770f10e156c422fe7b15ddbd7ccc8a704 Mon Sep 17 00:00:00 2001 From: Greg Dennis Date: Thu, 14 Sep 2023 11:43:56 +1200 Subject: [PATCH 3/3] update publish date --- pages/posts/modelling-inheritance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/posts/modelling-inheritance.md b/pages/posts/modelling-inheritance.md index 54db8191..45c46bc6 100644 --- a/pages/posts/modelling-inheritance.md +++ b/pages/posts/modelling-inheritance.md @@ -1,6 +1,6 @@ --- title: "Modeling Inheritance with JSON Schema" -date: 2023-08-18 +date: 2023-09-13 tags: - Questions - Explorations