Схема JSON - можно ли ссылаться на несколько схем из одного объекта?

Ниже приведена выдержка из моей схемы JSON.

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "properties": {
        "images": {
            "type": "array",
            "items": { "$ref": "#/definitions/bits" },
        }
    },
    "definitions": {
        "identifier": {
            "type": "string"
        },
        "bits": {
            "type": "integer",
            "enum": [
                8,
                16,
                32
            ]
        }
    }
}

Как указано, я считаю, что массив изображений, где каждый элемент состоит из строкового идентификатора и целого числа, значение которого может быть 8, 16 или 32, будет считаться допустимыми данными JSON.

Это нормально для некоторых моих данных JSON.

Но что, если я хочу дополнительно ограничить схему, чтобы целочисленное значение могло быть только 32? Как мне это сделать, при этом позволяя некоторым данным JSON быть действительными по сравнению с исходной схемой?

Можно ли, например, ссылаться на две схемы в одном объекте, например. что-то вроде:

items": { "$ref": "#/definitions/bits" AND "$ref": "#/definitions/otherSchema"}

person ksl    schedule 21.04.2015    source источник


Ответы (1)


Вы можете использовать allOf для проверки по нескольким схемам.

{
    "items": {
        "allOf": [
            { "$ref": "#/definitions/bits" },
            { "$ref": "#/definitions/otherSchema" }
        ]
    }
}
person Jason Desrosiers    schedule 23.04.2015
comment
Если otherSchema определяет bits как 32, вы говорите, что приведенный выше синтаксис даст мне то, что я хочу? Разве это не будет рассматриваться как два отдельных свойства? - person ksl; 23.04.2015
comment
Да, все схемы в allOf относятся к одной и той же схеме. В этом случае все элементы массива должны пройти проверку по обеим схемам в allOf. oneOf, anyOf и not — это другие ключевые слова, которые можно использовать для ссылки на несколько схем в одной. - person Jason Desrosiers; 24.04.2015