Учитывая следующую схему:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"definitions": {
"worktype": {
"blue": {
"enum": [1, 2, 3]
},
"red": {
"enum": [4, 5, 6]
}
}
}
}
Я могу проверить, что массив состоит либо из всех «синих» элементов, либо из «красных» элементов следующим образом:
{
"type": "array",
"items": {
"$ref": "#/definitions/worktype/red" // or worktype/blue
}
}
Но как я могу проверить массив на наличие только «синих» или «красных» рабочих типов, но не смешанных?
Например:
[1, 2]: Valid (only blue)
[5]: Valid (only red)
[1, 6]: Invalid (mixed blue and red)
Моей первой идеей было использование oneOf
:
{
"type": "array",
"items": {
"oneOf": [
{"$ref": "#/definitions/worktype/red"},
{"$ref": "#/definitions/worktype/blue"},
]
}
}
Но это проверяет каждую запись для себя по схемам, поэтому, например, [1, 6]
тоже действительна. (На самом деле, в этом случае oneOf
не означает, что "все элементы должны быть действительными против одного из вместе", но "каждый элемент должен быть действительным против одного из для себя").
Как я могу написать схему для массива, который имеет только «синий» или «красный» рабочие типы, но не оба? Это возможно?