Cameron Jewell
Cameron Jewell

Reputation: 105

Allow additional properties in reference schemas, but none else

Suppose I have two schema being used to validate a json file.

testSchema.json

{
    "$schema": "http://json-schema.org/draft-07/schema",
    "type": "object",
    "additionalProperties": false,
    "properties": {
        "$schema": { "type": "string" },
        "sample": { "type": "number" }
    },
    "anyOf": [
        { "$ref": "./testSchema2.json" },
        {}
    ]
}

testSchema2.json

{
    "$schema": "http://json-schema.org/draft-04/schema",
    "type": "object",
    "properties": {
        "test": { "type": "string" },
        "test2": { "type": "number" }
    }
}

test.json

{
    "$schema": "../testSchema.json",
    "sample": 0,
    "test": "some text" //this line throws error "Property is not allowed"
}

I'd like for the file to be validated against the included schema's properties and any schema that is referenced's properties. Am I missing something?

Edit: I want to exclude any objects that are not explicitly defined in any of my included/referenced schema.

Upvotes: 0

Views: 2005

Answers (1)

Relequestual
Relequestual

Reputation: 12335

From JSON Schema draft 2019-09 (after draft-07), this is possible by using the unevaluatedProperties keyword.

additionalProperties cannot "see through" applicator keywords such as "anyOf" and "$ref", and only works based on the properties in the same schema object.

This is not possible with draft-07 or previous.

Upvotes: 1

Related Questions