リファレンス
ダイアレクトの宣言
JSONスキーマのバージョンはダイアレクトと呼ばれます。ダイアレクトは、スキーマを評価するために使用できるキーワードとセマンティクスをまとめたものです。JSONスキーマの各リリースは、JSONスキーマの新しいダイアレクトです。JSONスキーマには、スキーマが準拠するダイアレクトを宣言する方法と、独自のカスタムダイアレクトを記述する方法が用意されています。
$schema
$schema
キーワードは、スキーマがどのJSONスキーマのダイアレクトで記述されたかを宣言するために使用されます。$schema
キーワードの値は、スキーマが$schema
が識別するダイアレクトに従って有効であることを検証するために使用できるスキーマの識別子でもあります。別のスキーマを記述するスキーマは、「メタスキーマ」と呼ばれます。
$schema
はドキュメント全体に適用され、ルートレベルにある必要があります。外部参照($ref
, $dynamicRef
)ドキュメントには適用されません。これらのスキーマは、独自の$schema
を宣言する必要があります。
$schema
が使用されていない場合、実装では、値を外部で指定できるようにしたり、スキーマの評価に使用する必要がある仕様バージョンについて仮定を行ったりする場合があります。すべてのJSONスキーマに、リーダーやツールにどの仕様バージョンを意図しているかを伝えるために$schema
キーワードを含めることをお勧めします。したがって、ほとんどの場合、スキーマのルートにこれを配置することになります。
1"$schema": "https://json-schema.dokyumento.jp/draft/2020-12/schema"
ドラフト4の識別子はhttps://json-schema.dokyumento.jp/draft-04/schema#
です。
ドラフト4では、特定のダイアレクト(https://json-schema.dokyumento.jp/schema#
)を持たない$schema
の値を定義しました。つまり、最新のダイアレクトを使用することを意味します。これはその後非推奨となり、使用すべきではありません。
ドラフト5への参照が出てくる場合があります。JSONスキーマのドラフト5リリースはありません。ドラフト5は、ドラフト4リリースの変更なしのリビジョンを指します。機能を追加、削除、または変更することはありません。参照を更新し、明確化を行い、バグを修正するだけです。ドラフト5はドラフト4リリースを記述します。ドラフト5に関する情報を探してここにたどり着いた場合は、ドラフト4の下で見つかります。この混乱を避けるため、パッチリリースを指すために「ドラフト」という用語は使用しなくなりました。
語彙
ドキュメントは近日公開予定
$schema
キーワードでこのURIを使用すると、スキーマがカスタムバージョンを使用していることを宣言できます。すべての実装がカスタムメタスキーマとカスタムキーワードの実装をサポートしているわけではありません。
ガイドライン
JSONスキーマの強みの1つは、JSONで記述でき、さまざまな環境で使用できることです。たとえば、フロントエンドとバックエンドの両方のHTMLフォーム検証に使用できます。カスタム語彙を使用する場合の問題は、スキーマを使用するすべての環境で、語彙のキーワードを評価する方法を理解する必要があることです。メタスキーマを使用して、スキーマが正しく記述されていることを確認できますが、各実装は、語彙のキーワードを評価する方法を理解するためにカスタムコードを必要とします。
メタデータキーワードは、検証に影響を与えないため、最も相互運用性があります。たとえば、units
キーワードを追加できます。これは、準拠したバリデーターで常に期待どおりに機能します。
カスタムキーワードの次の最適な候補は、他のスキーマを適用せず、既存のキーワードの動作を変更しないキーワードです。 isEven
キーワードがその例です。ブラウザでの HTML フォームの検証など、ある程度の検証が全く検証しないよりも優れているコンテキストでは、このスキーマは期待できる範囲で適切に機能します。完全な検証は依然として必要であり、カスタムキーワードを理解するバリデーターを使用する必要があります。
バリデーターがisEven
を理解しないため、これはパスします。
スキーマは、isEven
を理解しないため、完全に損なわれているわけではありません。
相互運用性が最も低いカスタムキーワードのタイプは、他のスキーマを適用するか、既存のキーワードの動作を変更するものです。例としては、プロパティを宣言して必須にするrequiredProperties
などがあります。この例は、カスタムキーワードを理解しないバリデーターで評価した場合に、スキーマがほぼ完全に役に立たなくなることを示しています。これは、requiredProperties
がキーワードとして悪いアイデアであることを必ずしも意味するわけではなく、カスタムキーワードを理解しないコンテキストでスキーマを使用する必要がある場合に、それが適切な選択肢ではないということです。
requiredProperties
が理解されないため、これはパスします。
requiredProperties
が理解されないため、これはパスします。