У меня есть набор из 2 свойств, которые всегда являются необязательными, но должны быть разрешены только в том случае, если значение другого (всегда обязательного) булевого свойства равно правда.Удаление дублирования в схеме JSON, которая использует oneOf (v4 или v5)
Свойства, которые всегда являются необязательными, но не всегда разрешены, называются: max_recurrences
и recurrence_arguments
. Логическое свойство, значение которого true
, от которого они зависят, называется: recurring
.
Я придумал схему ниже, которая, как я думаю, работает, но я дублирую все другие свойства в каждом элементе массива oneOf
. Я ищу способ избежать этого дублирования.
{
"id": "plan_schedule",
"type": "object",
"oneOf": [
{
"properties": {
"start_date": {
"type": "string",
"format": "date-time"
},
"end_date": {
"type": "string",
"format": "date-time"
},
"trigger": {
"$ref": "re_non_empty_string"
},
"arguments": {
"type": "object",
"minProperties": 1
},
"recurring": {
"type": "boolean",
"enum": [true],
},
"max_recurrences": {
"type": "integer",
"minimum": 1
},
"recurrence_arguments": {
"type": "object",
"minProperties": 1
}
}
},
{
"properties": {
"start_date": {
"type": "string",
"format": "date-time"
},
"end_date": {
"type": "string",
"format": "date-time"
},
"trigger": {
"$ref": "re_non_empty_string"
},
"arguments": {
"type": "object",
"minProperties": 1
},
"recurring": {
"type": "boolean",
"enum": [false],
},
}
}
],
"additionalProperties": false,
"required": ["start_date", "trigger", "recurring"]
}
Может ли кто-нибудь помочь мне? Я бы хотел использовать v4, но я открыт для использования v5, если это помогает.
Для дальнейшего уточнения, я надеюсь только перечислить свойства: start_date
, end_date
, trigger
и arguments
один раз во всей схеме.
Похоже, эта схема решает ли или нет '' recurrence_arguments' и max_recurrences' должны быть ** ** требуется на основе значения 'recurring'. На самом деле это не то, что я ищу. Поля не должны быть обязательными, но не должны допускаться, если 'recurring' не является' true'. – LukeP
какой вариант вы имеете в виду? – esp
Ваше редактирование на самом деле выглядит так, как будто оно делает то, что я хочу, но верхние 2 выглядят так, как будто они делают нужными поля, если 'recurring' истинно. Я ошибаюсь? – LukeP