Combining unevaluatedProperties and ref: # #375
-
Hi all, Thanks for your work on JSON Schema, work really seems to have picked up a lot since you have people working on it full time. My question is about whether a particular construct is possible or whether I'm just doing it wrong. I would like to have a property which allows as its contents anything from the root schema, plus one extra property. For example, say I have a simple schema defining one property that is required,
and another property
I have tried to combine recursion and unevaluated properties to make it work. This is what I came up with:
But it fails:
Am I doing something wrong, or is this not possible with the 2020-12 draft? |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 2 replies
-
The problem is {
"$ref": "#/$defs/base",
"unevaluatedProperties": false,
"$defs": {
"base": { ... }
}
} Now, the top level can be "closed" while still having an "open" schema available at {
"$ref": "#/$defs/base",
"properties": {
"newProp": { "type": "string" }
},
"unevaluatedProperties": false
} |
Beta Was this translation helpful? Give feedback.
The problem is
"additionalProperties": false
at the top level. Once you do this, you can no longer add properties using schema composition. We sometimes call this a "closed" schema. The way around this is to define your base schema as a definition ($defs
) allowing additional/unevaluated properties and then using schema composition at the top level to "close" the schema withunevaluatedProperties
.Now, the top level can be "closed" while still having an "open" schema available at
#/$defs/base
that can be extended.