我正在使用a multi-part JSON schema(但是JSON模式是新手)。 模式在配置文件上放置约束,配置文件包含资源模板,每个资源模板都包含属性模板。 我正在尝试更改对任何给定属性模板中的属性实施约束的方式。
在schema module for property templates中,对属性"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."
},
我想使用if if语句来指示是否另一个属性的值是-1
(指示属性模板已添加到配置文件中但尚未填充值的指示符),它不必符合上述规则。实际上,在这种情况下,我想确保上面属性的值是空字符串。
我试图通过以下方式做到这一点:
"allOf": [
(此处还有一些if-thens)
{
"if": {
"properties": {
"uwFormOrder": {
"const": -1
}
}
},
"then": {
"$ref": "#/definitions/empty-PTs"
}
}
],
"definitions": {
(此处还有一些其他定义)
"empty-PTs": {
"properties": {
"mandatory": {
"const": ""
},
"repeatable": {
"const": ""
},
"type": {
"const": ""
}
}
}
这种方法*根本上是错误的吗?
*这种方法=在现有的"allOf"
内添加一个附加的if / then,在现有的"definitions"
内添加一个附加的定义。
最后一点:我正在修改公开here公开的架构-原始作品不是我自己的,而是我自己尝试的一部分。 / p>
答案 0 :(得分:0)
简而言之,JSON Schema验证关键字将约束添加到验证检查中。您以后将无法删除它们。
相反,您必须构造if/then/else
块以形成所需的结果。
通过链接到的架构的外观,您似乎已经了解如何正确使用if/then/else
。
请注意,您可以嵌套if/then/else
个块。这些关键字中的每个关键字的值都必须是JSON模式,它本身可以使用这些关键字。生成的嵌套then
或else
模式将“弄乱”要在其应有的位置应用的适用性链。
本质上,没有关键字可以忽略其他使用过的关键字。