我正在尝试制作一个方案,用于验证策略语言。简而言之,一个策略与一个断言相关联。这个断言可以是运算符(and、or、not),并包含其他断言的列表。断言也可以是原语(叶子节点)。我设计了一个UML图以便更容易理解,请参考下列链接:UML diagram。
我正在尝试使用
{
"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" : "object instance has properties which are not allowed by the schema: [\"operator\",\"value\"]"
"additionalProperties": false
)。然而,在这些定义中已经定义了这些内容...