Я создаю схему для квитанций и хочу иметь основную схему для основных концепций с множеством различных объектов подробностей для специализированных типов квитанций (например, детализированных квитанций отеля и т. д.). Моя текущая реализация использует механизм oneOf
в JSON- схема
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Receipt",
"type": "object",
"properties": {
...
"amount": { "type": "number" },
"detail": {
"type": "object",
"oneOf": [
{ "$ref": "general-detail.schema.json" },
{ "$ref": "hotel-detail.schema.json" },
...
]
}
}
}
Проблема с этим подходом заключается в том, что когда я проверяю (используя tv4), оказывается, что все схемы, указанные в oneOf
, проверяются и фактически возвращают ошибки. Я могу свести к минимуму этот эффект, избавившись от свойства detail
, переместив oneOf
на уровень схемы (например, за пределы properties
), а затем создав имена корневых свойств в каждой из подсхем. Однако даже в этом случае я получаю сообщение «Отсутствует обязательное свойство: generalDetail» в случае возникновения ошибки при проверке типа квитанции отеля.
Итак 2 вопроса:
- возможно ли вообще использовать общее свойство
detail
, как я сейчас делаю, и не иметь валидатора, полностью проверяющего каждую подсхему в структуреoneOf
(например, я неправильно используюoneOf
)? - если это невозможно, я был бы более чем в порядке, просто имея набор «типизированных» свойств деталей (таких как «generalDetail», «hotelDetail» и т. д.), но есть ли способ указать, что они являются группой и что только один из них должен существовать в проверяемом документе?
ТИА