【发布时间】:2017-07-18 10:02:24
【问题描述】:
我正在尝试创建一个用于验证策略语言的架构。简短:
策略与断言相关联。这个断言可以是一个操作符(and,or,not)并且包含其他断言的列表。断言也可以是原语(叶节点)。
我做了一个 UML 设计让事情更容易理解:
{
"policy": {
"name": "test",
"expression": {
"operator": "all",
"value": [
{
"primitive": "encrypt",
"preference": 12345,
"usage": "required"
},
{
"primitive": "sign",
"preference": 12345,
"usage": "required"
}
],
"preference": 12345,
"usage": "required"
}
}
}
这是我目前制定的方案:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"minProperties": 1,
"additionalProperties": {
"$ref": "#/definitions/policy"
},
"definitions": {
"policy": {
"title": "Policy",
"type": "object",
"required": [
"name",
"expression"
],
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"expression": {
"$ref": "#/definitions/assertion"
}
}
},
"operator": {
"properties": {
"value": {
"type": "array",
"items": {
"$ref": "#/definitions/assertion"
}
},
"operator": {
"enum": [
"allOne",
"all"
]
}
}
},
"primitive": {
"properties": {
"primitive": {
"enum": [
"encrypt",
"sign"
]
}
}
},
"assertion": {
"type": "object",
"additionalProperties": false,
"oneOf": [
{
"$ref": "#/definitions/operator"
},
{
"$ref": "#/definitions/primitive"
}
],
"properties": {
"preference": {
"type": "integer",
"minimum": 0,
"exclusiveMinimum": true
},
"usage": {
"enum": [
"required",
"rejected",
"optional",
"observed",
"ignored"
]
}
}
}
}
}
通过使用"oneOf",我尝试使用运算符或原语的规范。但我不确定这是要走的路,因为我收到以下错误:
"message" : "对象实例具有架构不允许的属性:[\"operator\",\"value\"]"
错误消息抱怨未定义的额外属性(因为"additionalProperties": false)。但是,这些是在定义中定义的......
【问题讨论】:
-
好的,知道了!感谢您提供信息。
标签: json jsonschema json-schema-validator