Условное включение подсхемы в схему JSON?

#json #jsonschema

#json #jsonschema

Вопрос:

В зависимости от свойства type я хотел бы включить подсхему, поэтому я написал:

 "allOf": [
    {
        "if": {
            "properties": { "type": { "const": "foobar" }}
        },
        "then": {
            "$ref": "foobar.schema.json"
        }
    }, ...
]
  

К сожалению, это не работает. Однако, если я сделаю следующее, я успешно получу foobar определения:

 "allOf": [
    {
        "$ref": "foobar.schema.json"
    }, ...
]
  

Кажется, json-schema не поддерживает условное включение подсхемы, или я не знаю, как его использовать.

Какие-нибудь подсказки?

Моя полезная нагрузка:

 {
  "type": "foobar",
  "foobarProperty": 42
}
  

Здесь та же проблема с монолитной схемой:

 {
    "$schema": "http://json-schema.org/draft-07/schema",
    "type": "object",
    "additionalProperties": false,
    "definitions": {
      "foo": {
        "lines": {
            "$id": "#/lines",
            "type": "integer",
            "default": 1,
        },        
      }
    },
    "allOf": [
        {
            "if": {
                "properties": { "type": { "const": "foo" }}
            },
            "then": {
                "allOf" : [
                    {"$ref": "#/definitions/foo"}
                ]
            }
        },
    ],
    "properties": {
        "type": {
            "$id": "#/properties/type",
            "type": "string",
            "enum": ["foo", "bar"],
            "default": "foo"
        },

    }
}