정책 언어의 유효성을 검사하기위한 스키마를 만들려고합니다. 짧은 :Json 스키마 oneOf with additionalProperties draft-04
정책이 어설 션과 연결되어 있습니다. 이 어설 션은 연산자 (및 또는 아님) 일 수 있으며 다른 어설 션 목록을 포함 할 수 있습니다. 어서션은 프리미티브 (리프 노드) 일 수도 있습니다.
{
"policy": {
"name": "test",
"expression": {
"operator": "all",
"value": [
{
"primitive": "encrypt",
"preference": 12345,
"usage": "required"
},
{
"primitive": "sign",
"preference": 12345,
"usage": "required"
}
],
"preference": 12345,
"usage": "required"
}
}
}
을 그리고 여기에 내가 만든 currenty 계획입니다 : :
{
"$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"
I의 사용으로
"message" : "object instance has properties which are not allowed by the schema: [\"operator\",\"value\"]"
오류 메시지 (때문에 "additionalProperties": false
의) 정의되지 않은 추가 속성에 대해 불평. 그러나 이것들은 정의에 정의되어 있습니다 ...
이를 참조하십시오 : 내 예는 다음이 될 것 https://github.com/epoberezkin/ajv/blob/master/FAQ.md#additional-properties-inside-compound-keywords-anyof-oneof- 등 및이 : https://github.com/epoberezkin/ajv/issues/134#issuecomment-242989744 – esp
알았어요! 정보 주셔서 감사합니다. – freskimo