Я создаю схему для квитанций и хочу иметь основную схему для основных понятий с множеством различных подробных объектов для специализированных типов квитанций (например, квитанции о товарах и т. Д.), Моя текущая реализация задействует механизм oneOf
в JSON-схемевыбор между различными объектами в 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» и т. Д.), - но есть ли способ указать, что они являются и что только один из них должен существовать в проверяемом документе?
ТИА