【发布时间】:2015-06-21 08:04:04
【问题描述】:
我正在为收据创建一个架构,并希望为核心概念提供一个主架构,其中包含用于专业收据类型(例如逐项酒店收据等)的各种不同详细对象。我当前的实现是利用 @987654321 JSON-schema 中的@机制
{
"$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”等) - 但有没有办法指定它们是组并且只有其中一个应该存在于正在验证的文档中?
TIA
【问题讨论】:
标签: jsonschema json-schema-validator