2017-10-01 9 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は現在の仕様ですが、条件はありません。その後、/それ以外はAJV-キーワードとAjvでサポートされて

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

現在/場合: ドラフト-07は、することができますを使用してのif/then /他の持っています。

任意の条件は、キーワードのanyOf、ALLOFなく使用して、その後/ ELSE/IFずに表現することができます。

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

感謝を!私の例では2番目のオプションでどのように動作しますか? – themonkey

+0

最初のサンプルのサブスキーマを置換するだけです – esp

関連する問題