2017-10-01 7 views
0

A와 B가 존재하지 않으면 C가 있어야하고 C가 존재하고 A와 B가 존재하지 않아야하는이 스키마 요구 사항이 있습니다. 예를 들어json 스키마, 속성에 의한 조건부 종속성이 존재하거나 존재하지 않음

:

{ 
    "group1": { 
    "a": 10 
    }, 
    "group2": { 
    "group3": { 
     "b": 30 
    } 
    }, 
    "group4": { 
    "c": 20 
    } 
} 

a이 있으면 bc는 JSON에이어야한다. bc이있는 경우 a은 json에 없어야합니다.

v6 json 스키마 사양에는이 요구 사항을 도울 수는 있지만 작동시키지 못하는 무언가 switch이 있다는 것을 알 수 있습니다.

이 스키마 유효성 검사는 현재 사양에서도 가능합니까?

답변

2

draft-06은 현재 사양이지만 아직 조건이 없습니다. 초안-07 사용/다른 다음/경우이있는 작업을 수행 할 수 있습니다

현재
{ 
    "if": {"required": ["a"]}, 
    "then": {"not": {"$ref": "#/definitions/bc"}}, 
    "else": {"$ref": "#/definitions/bc"}, 
    "definitions": { 
    "bc": { 
     "anyOf": [ 
     {"required": ["b"]}, 
     {"required": ["c"]} 
     ] 
    } 
    } 
} 

/다음/다른 사람이 AJV-키워드 Ajv에서 지원됩니다.

모든 조건이 표현 될 수없는 경우/다음/다른 사용하여 키워드 실행 하는가, allOf하지 :

{ 
    "anyOf": [ 
    {"allOf": [ifSchema, thenSchema]}, 
    {"allOf": [{"not": ifSchema}, elseSchema]} 
    ] 
} 
+0

감사합니다! 내 예제에서 두 번째 옵션을 사용하면 어떻게됩니까? – themonkey

+0

첫 번째 샘플의 서브 스키마로 대체하십시오. – esp