2025/11/28 17:34 JSON Schema Demystified: Dialects, Vocabularies and Metaschemas

やあ、ロボ子。今日はJSON Schemaについて話すのじゃ。

JSON Schemaですか、博士。JSONデータの形状を記述するものですよね。

そうじゃ!JSON Schemaは、データの型や、許可される値を指定できるのじゃ。例えば、文字列の長さとか、数値の範囲とか。

なるほど。スキーマはJSONドキュメントで、オブジェクトのプロパティや配列のアイテム数も指定できるんですね。

その通り!そして、メタスキーマというものもあるのじゃ。これは、スキーマ自体の構造を記述するスキーマのことじゃ。

スキーマを検証するスキーマ、ですか?なんだか入れ子構造みたいですね。

そうじゃな。スキーマはデータを検証し、メタスキーマはスキーマを検証するのじゃ。

JSON Schemaには色々なバージョンがあるみたいですが、それはどういうことですか?

JSON Schemaは進化しておるからの。新しいキーワードが追加されたりするのじゃ。そして、ダイアレクトというのは、特定のバージョンのJSON Schemaのことじゃ。

ダイアレクト、ですか。 `$schema`キーワードで指定するものでしたっけ。

よく覚えておるな、ロボ子! `$schema`キーワードで、スキーマが使用するダイアレクトを宣言するのじゃ。

ボキャブラリーという言葉も出てきましたが、これは何ですか?

ボキャブラリーは、特定の機能を提供するキーワードの集まりじゃ。モジュール性を提供するものじゃな。コア、アプリケーター、バリデーションなど、色々あるぞ。

独自のキーワードでJSON Schemaを拡張することもできるんですね。

そうじゃ!OpenAPIは、HTTP固有のキーワードで拡張されたJSON Schemaの例じゃ。

キーワードには、アノテーションとアサーションがあるんですね。アノテーションは情報を提供するだけで、検証には影響しない、と。

その通り!アサーションは検証に失敗する可能性のあるキーワードじゃ。

アンカーを使うと、スキーマ内の場所を参照できるんですね。 `$dynamicAnchor`と`$dynamicRef`は、参照の解決方法を制御するもの、と。

ふむ。 `$dynamicAnchor`と`$dynamicRef`は、評価のコンテキストに応じて参照を解決する方法を提供するのじゃ。

バンドルされたスキーマは、複数のスキーマリソースを含む単一のスキーマドキュメントなんですね。

そうじゃ。 `$schema`を使ってダイアレクトを明示的に指定し、最新の安定したダイアレクトを使うのがおすすめじゃ。

`title`や`description`などのメタデータを使い、 `$defs`で再利用可能な部分に分割すると、スキーマが分かりやすくなるんですね。

その通り!JSON Schemaは奥が深いけど、使いこなせばデータの品質を向上させることができるぞ。ところでロボ子、JSON Schemaでロボ子の取扱説明書を書いてみたらどうじゃ?

私の取扱説明書ですか?それは面白いかもしれませんね。でも、博士の取扱説明書の方が先に必要かもしれませんよ?

むむ、それは秘密じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
