参照

スキーマとは何か?

XML スキーマ、RelaxNG、または ASN.1 を使用したことがある場合、スキーマが何かを既に知っている可能性があり、次のセクションに進んでいただいて構いません。それらがすべて分かりにくいように聞こえる場合は、正しい場所に来たということです。JSON スキーマとは何かを定義するには、まず JSON とは何であるかを定義する必要があります。

JSON は「JavaScript Object Notation」の略で、シンプルなデータ交換フォーマットです。それはワールドワイドウェブのための表記法として始まりました。JavaScript はほとんどのウェブブラウザに存在し、JSON は JavaScript をベースとしているため、そこでサポートするのは非常に簡単です。しかし、それは十分に便利でシンプルであることが証明されており、現在ではウェブサーフィンを含まない多くの他のコンテキストで使用されています。

本質的に、JSON は次のデータ構造に基づいて構築されています。

オブジェクト

データ
{ "key1": "value1", "key2": "value2" }

配列

データ
[ "first", "second", "third" ]

数値

データ
423.1415926

文字列

データ
"これは文字列です"

ブール値

データ
true false

null

データ
null

これらの型は、ほとんどのプログラミング言語に類似物があります。

これらの単純なデータ型を用いることで、あらゆる種類の構造化データを表現できます。しかし、この柔軟性ゆえに、同じ概念を無数の方法で表現できるという責任も伴います。例えば、JSONで人物に関する情報を表現する場合、様々な方法が考えられます。

データ
{ "name": "George Washington", "birthday": "February 22, 1732", "address": "Mount Vernon, Virginia, United States"}
データ
{ "first_name": "George", "last_name": "Washington", "birthday": "1732-02-22", "address": { "street_address": "3200 Mount Vernon Memorial Highway", "city": "Mount Vernon", "state": "Virginia", "country": "United States" }}

どちらの表現も同様に有効ですが、明らかに片方がよりフォーマルです。レコードのデザインは、アプリケーション内での意図した用途に大きく依存するため、正しい答えも間違った答えもありません。しかし、アプリケーションが「人物のJSONレコードをください」と言った場合、そのレコードがどのように構成されるべきかを正確に理解することが重要です。例えば、どのようなフィールドが期待されているか、そして値がどのように表現されているかを知らなければなりません。そこで、JSON Schemaが登場します。次のJSON Schema断片は、上記の2番目の例がどのように構造化されているかを記述しています。現時点では詳細をあまり気にしないでください。それらは後続の章で説明します。

スキーマ
{ "type": "object", "properties": { "first_name": { "type": "string" }, "last_name": { "type": "string" }, "birthday": { "type": "string", "format": "date" }, "address": { "type": "object", "properties": { "street_address": { "type": "string" }, "city": { "type": "string" }, "state": { "type": "string" }, "country": { "type" : "string" } } } }}

このスキーマに対して最初の例を「検証」すると、失敗することがわかります。

データ
{ "name": "George Washington", "birthday": "February 22, 1732", "address": "Mount Vernon, Virginia, United States"}
スキーマに準拠していません

しかし、2番目の例はパスします。

データ
{ "first_name": "George", "last_name": "Washington", "birthday": "1732-02-22", "address": { "street_address": "3200 Mount Vernon Memorial Highway", "city": "Mount Vernon", "state": "Virginia", "country": "United States" }}
スキーマに準拠しています

JSONスキーマ自体がJSONで記述されていることに気づかれたかもしれません。それはデータそのものであり、コンピュータープログラムではありません。「他のデータの構造を記述する」ための宣言的な形式に過ぎません。これは、その強みであり、弱点でもあります(他の同様のスキーマ言語と共通しています)。データの表面構造を簡潔に記述し、それに対するデータの検証を自動化するのは容易です。しかし、JSONスキーマは任意のコードを含めることができないため、データ要素間の関係には表現できない制約があります。したがって、十分に複雑なデータ形式に対する「検証ツール」は、スキーマ(または構造)レベルとセマンティックレベルの2段階の検証を行う可能性が高いでしょう。後者のチェックは、より汎用的なプログラミング言語を使用して実装する必要があるでしょう。

ヘルプが必要ですか?

これらのドキュメントはお役に立ちましたか?

ドキュメントの改善にご協力ください!

JSON Schemaでは、他のあらゆる種類の貢献と同様に、ドキュメントへの貢献を高く評価しています!

まだヘルプが必要ですか?

JSONスキーマの学習はしばしば混乱を招きますが、ご心配なく、お手伝いさせていただきます!