参照
スキーマの合成
JSON スキーマには、スキーマを組み合わせるためのいくつかのキーワードが含まれています。これは必ずしも複数のファイルやJSONツリーからのスキーマの結合を意味するわけではありませんが、これらの機能はそれを実現するのに役立ち、複雑なスキーマの構造化で説明されています。スキーマの結合は、値が同時に複数の基準に対して検証されることを許可するほど単純な場合があります。
これらのキーワードは、AND、OR、XOR、NOTのようなよく知られたブール代数の概念に対応しています。これらのキーワードは、標準的なJSONスキーマキーワードでは表現できない複雑な制約を表現するために使用されることがよくあります。
スキーマを組み合わせるために使用されるキーワードは次のとおりです。
allOf
: (AND) すべてのサブスキーマに対して有効である必要があります。anyOf
: (OR) サブスキーマのいずれか1つに対して有効である必要があります。oneOf
: (XOR) サブスキーマのちょうど1つに対して有効である必要があります。
これらのキーワードはすべて配列に設定する必要があります。各項目はスキーマです。再帰的なスキーマには注意してください。処理時間が指数関数的に増加する可能性があります。
さらに、次のものがあります。
not
: (NOT) 指定されたスキーマに対して有効ではありません。
allOf
allOf
に対して検証するには、指定されたデータが指定されたすべてのサブスキーマに対して有効である必要があります。
allOf は、オブジェクト指向の継承の意味で、スキーマに詳細を追加するためにスキーマを「拡張」するために使用することはできません。インスタンスは、allOf
内のすべてのスキーマに対して個別に有効である必要があります。閉じたスキーマの拡張に関するセクションで詳細を参照してください。
anyOf
anyOf
に対して検証するには、与えられたデータは、与えられたサブスキーマのいずれか(1つ以上)に対して有効である必要があります。
oneOf
oneOf
に対して検証するには、与えられたデータは、与えられたサブスキーマのちょうど1つに対して有効である必要があります。
5または3のいずれの倍数でもありません。
5と3の *両方* の倍数は拒否されます。
oneOf
エントリを使用する際には注意が必要です。その性質上、*すべての* サブスキーマの検証が必要となり、処理時間が長くなる可能性があるためです。可能であれば、anyOf
を優先してください。not
not
キーワードは、インスタンスが与えられたサブスキーマに対して検証に失敗する場合に、そのインスタンスが有効であることを宣言します。
例えば、次のスキーマは文字列でないものに対して検証されます。
スキーマ合成のプロパティ
論理的に矛盾するスキーマ
これらのキーワードを使うと、論理的に不可能なスキーマを簡単に作成できることに注意してください。次の例では、(文字列と数値を同時に満たすことはできないため)何も検証されないスキーマを作成します。
スキーマのファクタリング
サブスキーマの共通部分を「ファクタリング」できることに注意してください。次の2つのスキーマは同等です。