Я работаю с многокомпонентной схемой JSON (но я новичок в схемах JSON).Схема накладывает ограничения на профиль, который содержит шаблоны ресурсов, каждый из которых содержит шаблоны свойств.Я пытаюсь изменить способ применения ограничений к свойствам в любом данном шаблоне свойств.
В модуле схемы для шаблонов свойств ограничения накладываются на свойства "mandatory"
, "repeatable"
и "type"
следующим образом:
"mandatory": {
"type": ["boolean", "string"],
"enum": ["true", "false"],
"title": "Mandatory",
"description": "Indication that a value for the property is required. If unspecified, defaults to false.",
"default": false
},
[...]
"repeatable": {
"type": ["boolean","string"],
"enum": ["true", "false"],
"title": "Repeatable",
"description": "Indication that the property is repeatable. If unspecified, defaults to true.",
"default": true
},
[...]
"type": {
"type": "string",
"enum": ["literal", "lookup", "resource"],
"title": "Type",
"description": "Type of value (literal / resource / lookup) that is allowed by this property."
},
Iхотели бы использовать оператор if then, чтобы указать, что если значение другого свойства равно -1
(показатель того, что шаблон свойства был добавлен в профиль, но еще не заполнен значениями), он не должен соответствоватьправила выше.На самом деле, я хотел бы убедиться, что значения для свойств выше являются пустыми строками в этом случае.
Я пытался сделать это следующим образом:
"allOf": [
(некоторые другие if-thens здесь)
{
"if": {
"properties": {
"uwFormOrder": {
"const": -1
}
}
},
"then": {
"$ref": "#/definitions/empty-PTs"
}
}
],
"definitions": {
(некоторые другие определения здесь)
"empty-PTs": {
"properties": {
"mandatory": {
"const": ""
},
"repeatable": {
"const": ""
},
"type": {
"const": ""
}
}
}
Является ли этот подход * в корне неверным?
* Этот подход = добавление дополнительного if / затем внутри существующего "allOf"
, добавление дополнительного определения в существующий "definitions"
.
Последнее замечание: я изменяю схемуопубликовано открыто здесь - оригинальная работа не моя , я просто пытаюсь немного на ней остановиться.