Насколько я могу интерпретировать вашу схему, кажется, что вы хотите использовать комбинированную схему в конце, вместо того, чтобы иметь ref
в той же части элементов.
С этим allOf
схема должна быть действительным объектом, как определено в items
и как ref
в definitions
Также другая ошибка возникает при использовании anyOf
вместо allOf
.
При anyOf
он должен быть действителен как для первой, так и для второй схем, поскольку обе проверяются для объекта, даже если первая недействительна, вторая действительна, поэтому все допустимо. Это также может быть изменено с помощью additionalProperties
, но тогда оно не будет работать так, как вы его вложили.
anyOf
: пока значение проверяется по любой из этих схем, оно считается действует против всей объединенной схемы. - combining-schemas
Вы также хотели бы использовать allOf
здесь, поэтому оно должно проверяться на всех или переписать это условие, чтобы не использовать объект здесь.
С этой модификацией anyOf
в allOf
ваши данные теперь также проверяют bird_id
:
И я думаю, что вы не используете draft-04
здесь, похоже на draft-7
.
{
"type": "object",
"$schema": "http://json-schema.org/draft-04/schema#",
"definitions": {
"animal_id": {
"type": "string",
"maxLength": 24
},
"bird_id": {
"type": "string",
"maxLength": 50
},
"zoo_bird_and_animal": {
"type": "object",
"allOf": [
{
"properties": {
"zoo_bird": {
"type": "object",
"required": [
"zoo_bird_id"
],
"properties": {
"zoo_bird_id": {
"$ref": "#/definitions/bird_id"
}
}
}
}
},
{
"properties": {
"zoo_animal": {
"type": "object",
"required": [
"zoo_animal_id"
],
"properties": {
"zoo_animal_id": {
"$ref": "#/definitions/animal_id"
}
}
}
}
}
]
}
},
"properties": {
"zoo_list": {
"type": "array",
"minItems": 1,
"items": {
"allOf": [
{
"type": "object",
"required": [
"zoo_unique_code"
],
"minProperties": 1,
"properties": {
"zoo_unique_code": {
"type": "string",
"enum": [
"NEWYORKZOO",
"PARISZOO"
]
}
}
},
{
"$ref": "#/definitions/zoo_bird_and_animal"
}
]
}
}
}
}
Недопустимые данные, см .: неверные :
{
"zoo_list": [
{
"zoo_unique_code": "NEWYORKCODE",
"zoo_bird": {
"zoo_bird_id": "newidnewidnewidnewidnewidnewidnewnewidnewidnewidnewidnewidnewidnew"
}
}
]
}
Допустимые данные, см. действительные :
{
"zoo_list": [
{
"zoo_unique_code": "NEWYORKZOO",
"zoo_bird": {
"zoo_bird_id": "newid"
}
}
]
}