#json #validation #enums #schema
#json #проверка #перечисления #схема
Вопрос:
У меня есть простая схема только перечисления отдельно от схемы полезной нагрузки, например, так
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "demo::common::Husbandry",
"properties": {
"Anilmals": {
"$ref": "#/definitions/Anilmals"
},
"Breeds": {
"$ref": "#/definitions/Breeds"
}
},
"definitions": {
"Anilmals": {
"type": "string",
"description": "Any animal",
"minLength": 1,
"maxLength": 30,
"enum": [
"Dog",
"Cat",
"Bear",
"Human"
]
},
"Breeds": {
"type": "string",
"description": "Any Breed",
"minLength": 1,
"maxLength": 30,
"enum": [
"Poodle",
"Cheshire",
"Polar",
"Trump"
]
}
}
}
Если бы я / производитель полезной нагрузки должен был отправить более строгую схему поверх этого, чтобы выразить и кодировать дополнительные правила, не нарушая исходную схему, пример — когда выбранное животное было «Кошка», они могут выбрать только «Чешир» в качестве породы и так далее, как бы я закодировал более строгую схему? Обратите внимание, что исходная схема не подлежит изменению и доступна только для чтения. Возможно, мне потребуется использовать anyOf или oneOf, но, похоже, я не могу найти хороший пример.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"additionalProperties": false,
"properties": {
"ReferenceToLocalSchema": {
"$ref": "#/definitions/LocalType"
},
"ReferenceToExternalSchema": {
"$ref": "masterh-husbandry.json#/properties"
}
},
"definitions": {
"LocalType": {
"type": "object",
"additionalProperties": false,
"properties": {
"no-write": {
"type": "boolean",
"default": false
}
}
}
}
}