我需要为简单的语法表达式创建模式,其中:
{Expression}:
{Function}
OR {Variable}
{Function}:
FunctionName [array of {Expression}]
{Variable}:
VariableName
所以我可以像这样编写JSON树表达式:
{
"Expression": {
"function": "MyFunc",
"args": [ { "varName": "X1" }, { "varName": "X2" }, { "function": "MyFunc2", "args": [ { "varName": "123" } ] } ]
}
}
我需要为函数和变量提供additionalProperties的能力。 这是我创建的架构:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"definitions": {
"var": {
"type": "object",
"properties": {
"varName": { "type": "string" }
},
"required": [ "varName" ]
},
"func": {
"type": "object",
"properties": {
"function": { "type": "string" },
"args": { "type": "array", "items": { "$ref": "#/definitions/expr" } }
},
"required": [ "function" ]
},
"expr": {
"oneOf": [
{ "$ref": "#/definitions/var" },
{ "$ref": "#/definitions/func" }
]
}
},
"type": "object",
"properties": {
"Expression": { "$ref": "#/definitions/expr" }
}
}
由于某些原因,它没有通过验证,因为Visual Studio 2013 Update 5中的表达式显示以下错误:
1)所需的属性“varName”不存在
2)属性“Expression”的值必须完全符合其中之一 以下架构:{ “type”:“object”, “properties”:{ “varName”:{“type”:“string”} }, “required”:[“varName”] },{ “type”:“object”, “properties”:{ “function”:{“type”:“string”}, “args”:{“type”:“array”,“items”:{“$ ref”:“#/ definitions / expr”}} }, “必需”:[“功能”] }
赞赏任何想法
答案 0 :(得分:1)
您的架构写得很好且没有错误。问题必须出在您使用的验证器中。架构在http://jsonschemalint.com/draft4/#和http://json-schema-validator.herokuapp.com/处成功验证。我也详细审查了它,发现没有错误。
您可以尝试的一件事是使用anyOf
代替oneOf
。它将产生与oneOf
相同的结果,因为这两个模式是互斥的。如果幸运的话,该错误会影响oneOf
,但不会影响anyOf
。