インターネットドラフト JSONスキーマ検証 2022年6月
ライトら 2022年12月18日 失効 [ページ]
ワーキンググループ
インターネットエンジニアリングタスクフォース
インターネットドラフト
draft-bhutton-json-schema-validation-01
公開
意図されたステータス
情報提供
失効
著者
A. ライト、
H. アンドリュース、
B. ハットン、
ポストマン

JSONスキーマ検証:JSONの構造検証のための語彙

概要

JSONスキーマ (application/schema+json) はいくつかの目的を持ちますが、その1つにJSONインスタンスの検証があります。このドキュメントは、JSONドキュメントの意味を記述し、JSONデータを取り扱うユーザーインターフェースへのヒントを提供し、有効なドキュメントがどのようなものであるべきかについての表明を行うための、JSONスキーマの語彙を規定しています。

読者への注意

このドラフトの課題リストは、https://github.com/json-schema-org/json-schema-spec/issues で確認できます。

詳細については、https://json-schema.dokyumento.jp/ を参照してください。

フィードバックを提供するには、この課題トラッカー、ホームページに記載されている連絡方法、またはドキュメント編集者への電子メールを使用してください。

このメモのステータス

このインターネットドラフトは、BCP 78およびBCP 79の規定に完全に準拠して提出されています。

インターネットドラフトは、インターネットエンジニアリングタスクフォース(IETF)の作業文書です。他の団体もインターネットドラフトとして作業文書を配布する場合があることに注意してください。現在のインターネットドラフトのリストは、https://datatracker.ietf.org/drafts/current/にあります。

インターネットドラフトは、最大6ヶ月間有効なドラフト文書であり、いつでも他の文書によって更新、置き換え、または廃止される可能性があります。「作業中」以外で、インターネットドラフトを参照資料として使用したり、引用したりすることは適切ではありません。

このインターネットドラフトは、2022年12月18日に失効します。

目次

1. はじめに

JSONスキーマは、特定の基準を満たすことを与えられたJSONドキュメント(インスタンス)に要求するために使用できます。これらの基準は、この仕様で記述されているキーワードを使用して表明されます。さらに、対話型のユーザーインターフェースインスタンス生成を支援するためのキーワードセットも定義されています。

この仕様では、JSONスキーマコア [json-schema]仕様で定義されている概念、構文、および用語を使用します。

2. 表記法と用語

このドキュメント内のキーワード「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「MAY」、および「OPTIONAL」は、RFC 2119 [RFC2119]で記述されているように解釈されます。

この仕様では、「コンテナインスタンス」という用語を配列インスタンスとオブジェクトインスタンスの両方を指すために使用します。「子インスタンス」という用語は、配列要素またはオブジェクトメンバーの値を指します。

配列値の要素は、この配列の2つの要素が等しい [json-schema]でない場合、一意であると言われます。

3. 概要

JSONスキーマ検証は、インスタンスデータの構造に対する制約を表明します。すべての表明された制約を満たすインスタンスの場所は、記述的なメタデータや使用方法のヒントなど、非表明情報を含むキーワードで注釈が付けられます。インスタンス内のすべての場所がすべての表明された制約を満たしている場合、そのインスタンスはスキーマに対して有効であると言われます。

各スキーマオブジェクトは、それが適用される各インスタンスの場所に個別に評価されます。これにより、ドキュメント全体の検証プロセス全体で状態を維持する必要がないため、バリデータの実装要件が大幅に簡素化されます。

この仕様では、一連のassertionキーワードと、JSONインスタンスに有用な情報を付与するために使用できる小さなメタデータキーワードの語彙を定義しています。第7節のキーワードは主にアノテーションとして意図されていますが、オプションでassertionとして使用できます。第8節のキーワードは、JSON文字列として埋め込まれたドキュメントを処理するためのアノテーションです。

4. 相互運用性の考慮事項

4.1. 文字列インスタンスの検証

ヌル文字(\u0000)はJSON文字列で有効であることに注意してください。検証するインスタンスには、基盤となるプログラミング言語がこの種のデータに対処できるかどうかに関係なく、この文字を含む文字列値が含まれる場合があります。

4.2. 数値インスタンスの検証

JSON仕様では任意精度の数値が許可されており、JSON Schemaではそのような境界を追加していません。これは、JSON Schemaによって処理される数値インスタンスは、基盤となるプログラミング言語がこの種のデータに対処できるかどうかに関係なく、任意に大きく、または小数部が任意に長くなる可能性があることを意味します。

4.3. 正規表現

正規表現を使用するか、インスタンス値を正規表現に制約するキーワードは、JSON Schemaコア [json-schema]仕様の正規表現に関する相互運用性の考慮事項の対象となります。

5. メタスキーマ

デフォルトのJSON Schema方言メタスキーマの現在のURIはhttps://json-schema.dokyumento.jp/draft/2020-12/schemaです。スキーマ作成者の便宜のために、このメタスキーマは、この仕様とJSON Schemaコア仕様で定義されているすべての語彙と、移行期間のために予約されている2つの以前のキーワードからなる方言を記述しています。個々の語彙と語彙メタスキーマのURIは、以下の各セクションで示されています。特定の語彙はサポートがオプションであり、関連セクションで詳しく説明されています。

更新された語彙とメタスキーマのURIは、仕様ドラフト間でエラーを修正するために公開される場合があります。実装では、この仕様ドラフトの後、次の仕様ドラフトの前に日付が付けられたURIを考慮して、ここに記載されているものと同じ構文とセマンティクスを示す必要があります。

6. 構造検証のための語彙

スキーマ内の検証キーワードは、インスタンスの検証に成功するための要件を課します。これらのキーワードはすべて、アノテーションの動作のないassertionです。

"$vocabulary"を使用しないメタスキーマは、そのURIがtrueの値で存在する場合と同様に、この語彙を必要とするものとみなされるべきです。

検証語彙として知られるこの語彙の現在のURIは、次のとおりです。<https://json-schema.dokyumento.jp/draft/2020-12/vocab/validation>。

対応するメタスキーマの現在のURIは次のとおりです。https://json-schema.dokyumento.jp/draft/2020-12/meta/validation

6.1. 任意のインスタンス型に対する検証キーワード

6.1.1. type

このキーワードの値は、文字列または配列のいずれかである必要があります。配列の場合、配列の要素は文字列でなければならず、一意でなければなりません。

文字列値は、6つのプリミティブ型("null"、"boolean"、"object"、"array"、"number"、または"string")のいずれか、または小数部がゼロの任意の数値と一致する"integer"である必要があります。

"type"の値が文字列の場合、インスタンスは、その型が文字列の値で表される型と一致する場合に検証に成功します。"type"の値が配列の場合、インスタンスは、その型が配列内の文字列で示される型のいずれかと一致する場合に検証に成功します。

6.1.2. enum

このキーワードの値は配列である必要があります。この配列には、少なくとも1つの要素が含まれている必要があります。配列内の要素は一意である必要があります。

インスタンスは、その値がこのキーワードの配列値の要素の1つと等しい場合、このキーワードに対して検証に成功します。

配列内の要素は、nullを含む任意の型にすることができます。

6.1.3. const

このキーワードの値は、nullを含む任意の型にすることができます。

このキーワードの使用は、単一の値を持つ"enum" (第6.1.2節)と機能的に同等です。

インスタンスは、その値がキーワードの値と等しい場合、このキーワードに対して検証に成功します。

6.2. 数値インスタンス(numberとinteger)に対する検証キーワード

6.2.1. multipleOf

"multipleOf"の値は、0より大きい数値である必要があります。

数値インスタンスは、このキーワードの値で除算した結果が整数の場合にのみ有効です。

6.2.2. maximum

"maximum"の値は、数値インスタンスの上限を表す数値である必要があります。

インスタンスが数値の場合、このキーワードは、インスタンスが"maximum"以下である場合にのみ検証に成功します。

6.2.3. exclusiveMaximum

"exclusiveMaximum"の値は、数値インスタンスの上限を表す数値である必要があります。

インスタンスが数値の場合、インスタンスは"exclusiveMaximum"より厳密に小さい値(等しくない)の場合にのみ有効です。

6.2.4. minimum

"minimum"の値は、数値インスタンスの下限を表す数値である必要があります。

インスタンスが数値の場合、このキーワードは、インスタンスが"minimum"以上である場合にのみ検証に成功します。

6.2.5. exclusiveMinimum

"exclusiveMinimum"の値は、数値インスタンスの下限を表す数値である必要があります。

インスタンスが数値の場合、インスタンスは"exclusiveMinimum"より厳密に大きい値(等しくない)の場合にのみ有効です。

6.3. 文字列に対する検証キーワード

6.3.1. maxLength

このキーワードの値は、非負の整数である必要があります。

文字列インスタンスは、その長さがこのキーワードの値以下である場合、このキーワードに対して有効です。

文字列インスタンスの長さは、RFC 8259 [RFC8259]で定義されているように、その文字数として定義されます。

6.3.2. minLength

このキーワードの値は、非負の整数である必要があります。

文字列インスタンスは、その長さがこのキーワードの値以上である場合、このキーワードに対して有効です。

文字列インスタンスの長さは、RFC 8259 [RFC8259]で定義されているように、その文字数として定義されます。

このキーワードを省略すると、値0と同じ動作になります。

6.3.3. pattern

このキーワードの値は文字列である必要があります。この文字列は、ECMA-262正規表現方言に従って、有効な正規表現である必要があります。

正規表現がインスタンスに正常に一致する場合、文字列インスタンスは有効と見なされます。思い出してください。正規表現は暗黙的にアンカーされていません。

6.4. 配列に対する検証キーワード

6.4.1. maxItems

このキーワードの値は、非負の整数である必要があります。

配列インスタンスは、そのサイズがこのキーワードの値以下である場合、"maxItems"に対して有効です。

6.4.2. minItems

このキーワードの値は、非負の整数である必要があります。

配列インスタンスは、そのサイズがこのキーワードの値以上である場合、"minItems"に対して有効です。

このキーワードを省略すると、値0と同じ動作になります。

6.4.3. uniqueItems

このキーワードの値はブール値である必要があります。

このキーワードがブール値falseの場合、インスタンスは検証に成功します。ブール値trueの場合、インスタンスのすべての要素が一意である場合に検証に成功します。

このキーワードを省略すると、値falseと同じ動作になります。

6.4.4. maxContains

このキーワードの値は、非負の整数である必要があります。

同じスキーマオブジェクト内に"contains"が存在しない場合、このキーワードは影響しません。

インスタンス配列が「maxContains」に対して有効であるかどうかは、隣接する"contains" [json-schema]キーワードのアノテーション結果の形式によって2つの方法で判定されます。1つ目の方法は、アノテーション結果が配列であり、その配列の長さが「maxContains」の値以下である場合です。2つ目の方法は、アノテーション結果がブール値の「true」であり、インスタンス配列の長さが「maxContains」の値以下である場合です。

6.4.5. minContains

このキーワードの値は、非負の整数でなければなりません。

同じスキーマオブジェクト内に「contains」が存在しない場合、このキーワードは効果を持ちません。

インスタンス配列が「minContains」に対して有効であるかどうかは、隣接する"contains" [json-schema]キーワードのアノテーション結果の形式によって2つの方法で判定されます。1つ目の方法は、アノテーション結果が配列であり、その配列の長さが「minContains」の値以上である場合です。2つ目の方法は、アノテーション結果がブール値の「true」であり、インスタンス配列の長さが「minContains」の値以上である場合です。

値0は許容されますが、「maxContains」の値から0までの出現範囲を設定する場合にのみ有用です。値0は、「minContains」と「contains」が常に検証に合格することを意味します(ただし、「maxContains」キーワードに対しては検証に失敗する可能性があります)。

このキーワードを省略した場合、値1と同じ動作になります。

6.5. オブジェクトの検証キーワード

6.5.1. maxProperties

このキーワードの値は、非負の整数でなければなりません。

オブジェクトインスタンスが「maxProperties」に対して有効であるのは、そのプロパティ数が、このキーワードの値以下である場合です。

6.5.2. minProperties

このキーワードの値は、非負の整数でなければなりません。

オブジェクトインスタンスが「minProperties」に対して有効であるのは、そのプロパティ数が、このキーワードの値以上である場合です。

このキーワードを省略した場合、値0と同じ動作になります。

6.5.3. required

このキーワードの値は配列でなければなりません。この配列の要素(もしあれば)は文字列でなければならず、一意でなければなりません。

オブジェクトインスタンスがこのキーワードに対して有効であるのは、配列内のすべての項目がインスタンスのプロパティ名である場合です。

このキーワードを省略した場合、空の配列と同じ動作になります。

6.5.4. dependentRequired

このキーワードの値はオブジェクトでなければなりません。このオブジェクトのプロパティ(もしあれば)は配列でなければなりません。各配列の要素(もしあれば)は文字列でなければならず、一意でなければなりません。

このキーワードは、特定の他のプロパティが存在する場合に必須となるプロパティを指定します。それらの必須要件は、他のプロパティの存在に依存します。

インスタンスとこのキーワードの値の両方に出現する名前ごとに、対応する配列内のすべての項目がインスタンスのプロパティ名でもある場合、検証は成功します。

このキーワードを省略した場合、空のオブジェクトと同じ動作になります。

"format"によるセマンティックコンテンツの語彙

7.1. まえがき

構造検証だけでは、アプリケーションが特定の値を正しく利用できるようにするには不十分な場合があります。「format」アノテーションキーワードは、スキーマ作成者が、RFCやその他の外部仕様など、権威のあるリソースによって正確に記述される、固定された値のサブセットに関するセマンティック情報を伝えることを可能にするために定義されています。

このキーワードの値は、フォーマット属性と呼ばれます。文字列でなければなりません。フォーマット属性は、一般的に、特定のインスタンス型の集合のみを検証できます。検証するインスタンスの型がこの集合に含まれていない場合、このフォーマット属性とインスタンスに対する検証は成功するはずです。このセクションで定義されているすべてのフォーマット属性は文字列に適用されますが、コアJSONスキーマ。 [json-schema]で定義されたデータモデルで定義されている任意のインスタンス型に適用されるようにフォーマット属性を指定できます。 この仕様の「type」キーワードは、データモデルの一部ではない「integer」型を定義していることに注意してください。したがって、フォーマット属性は数値に制限できますが、整数に限定することはできません。ただし、数値形式は「type」キーワードと共に「integer」の値と共に使用できます。または、数値が整数でない場合に常に合格するように明示的に定義することもできます。これは、整数にのみ適用する場合と本質的に同じ動作になります。

フォーマットアノテーション語彙として知られるこの語彙の現在のURIは、<https://json-schema.dokyumento.jp/draft/2020-12/vocab/format-annotation>です。対応するメタスキーマの現在のURIは、https://json-schema.dokyumento.jp/draft/2020-12/meta/format-annotationです。この語彙のサポートの実装は必須です。

フォーマットアノテーション語彙に加えて、カスタムメタスキーマ用に「format」をアサーションとして定義するセカンダリ語彙が利用可能です。フォーマットアサーション語彙のURIは、<https://json-schema.dokyumento.jp/draft/2020-12/vocab/format-assertion>です。対応するメタスキーマの現在のURIは、https://json-schema.dokyumento.jp/draft/2020-12/meta/format-assertionです。フォーマットアサーション語彙のサポートの実装は任意です。

フォーマットアノテーション語彙とフォーマットアサーション語彙の両方を指定することは、その要件がフォーマットアノテーション語彙のスーパーセットであるため、フォーマットアサーション語彙のみを指定することと同等です。

7.2. 実装要件

「format」キーワードは、参照されている語彙によって定義されたとおりに機能します。

7.2.1. フォーマットアノテーション語彙

実装がアノテーションの収集をサポートしている場合、「format」の値はアノテーションとして収集されなければなりません。これにより、スキーマ検証が利用できない場合や不十分な場合でも、アプリケーションレベルの検証が可能になります。

実装は、アノテーションに加えて「format」をアサーションとして扱い、値の指定されたセマンティクスへの適合性を検証しようと試みることができます。実装は、そのような評価を有効化および無効化するオプションを提供しなければならず、デフォルトでは無効化されなければなりません。実装は、そのような検証に対するサポートレベルを文書化すべきです。 フォーマットアノテーション語彙を指定し、実装で検証を有効化することは、フォーマットアサーション語彙の指定と同等とは見なされません。なぜなら、実装は、フォーマットアサーション語彙が指定されていない場合、完全な検証サポートを提供する必要がないからです。

実装がアサーション動作に構成されている場合、以下を行います。

  • 以下に定義されている各フォーマット属性に対して、実装固有のベストエフォート検証を提供する必要があります。
  • 任意の、またはすべてのフォーマット属性の検証を、常にtrueの検証結果を生成するno-opとして実装することを選択できます。

これは、実装の現状と一致します。実装は、いくつかの、またはすべてのフォーマット属性に対して、全く検証しないことを含め、幅広い検証レベルを提供しています。これは、アノテーション動作のみに依存し、アプリケーションでセマンティック検証を実行することを推奨するベストプラクティスであるためです。

7.2.2. フォーマットアサーション語彙

フォーマットアサーション語彙がtrueの値で宣言されている場合、実装はこの仕様で定義されているすべてのフォーマットに対して完全な検証サポートを提供しなければなりません。完全な検証サポートを提供できない実装は、スキーマの処理を拒否しなければなりません。

フォーマットアサーション語彙をサポートする実装は、以下を行います。

  • 実装がアノテーションの収集をサポートしている場合、「format」をアノテーションとして収集しなければなりません。
  • 「format」をアサーションとして評価しなければなりません。
  • この仕様で定義されているすべてのフォーマット属性、および認識する追加のフォーマット属性に対して、検証に失敗する正しい型の可能なインスタンス値が存在するように、構文検証を実装しなければなりません。

多くの属性に関連する複雑さのため、フォーマット属性の最小限の検証の要件は意図的に曖昧で寛容です。特に、要件は構文チェックに限定されていることに注意してください。実装が電子メールを送信したり、URLに接続しようとしたり、またはフォーマットインスタンスによって識別されるエンティティの存在を確認したりすることは期待されていません。 日付時刻などの単純なフォーマットでは、構文検証は徹底的であることが期待されます。時間とともにさまざまな標準と多数の調整、そして曖昧または時代遅れのルール(値を利用する他のアプリケーションによって制限される場合とされない場合があります)の集大成である電子メールアドレスなどの複雑なフォーマットでは、最小限の検証で十分です。たとえば、「@」を含まないインスタンス文字列は明らかに有効な電子メールアドレスではなく、7ビットASCII以外の文字を含む「email」または「hostname」も同様に明らかに無効です。

実装は、各フォーマットに対して共通の解析ライブラリ、またはよく知られた正規表現を使用することをお勧めします。実装は、各フォーマット属性をどの程度検証するのかを明確に文書化する必要があります。

標準コアおよび検証メタスキーマ(セクション5)には、このボキャブラリが"$vocabulary"キーワードにfalseの値で含まれています。これは、デフォルトでは実装がこのキーワードをアサーションとしてサポートする必要がないためです。formatボキャブラリをtrueの値でサポートすると、コードサイズが大幅に増加し、場合によっては実行時間も長くなるため、すべての実装に適しているとは限りません。

7.2.3. カスタム形式属性

実装は、カスタム形式属性をサポートしても構いません。当事者間の合意を除き、スキーマ作成者は、ピア実装がそのようなカスタム形式属性をサポートすることを期待してはなりません。実装は、未知の形式を注釈として収集できないようにしてはなりません。Format-Assertionボキャブラリが指定されている場合、実装は未知の形式を検出したときにエラーを発生させなければなりません。

ボキャブラリは、キーワードに対して異なる値セットを具体的に宣言することをサポートしていません。この制限と、このキーワードの実装における歴史的な不均一性のため、相互運用性を求める場合は、追加の形式属性ではなく、カスタムボキャブラリに追加のキーワードを定義することを推奨します。

7.3. 定義済みの形式

7.3.1. 日付、時刻、および期間

これらの属性は、文字列インスタンスに適用されます。

日付と時刻の形式名は、RFC 3339、セクション5.6 [RFC3339] から派生しています。期間形式は、RFC 3339の付録Aに記載されているISO 8601 ABNFからのものです。

形式をサポートする実装は、次の属性のサポートを実装する必要があります。

date-time
文字列インスタンスは、上記の"date-time" ABNFルールに従って有効な表現である場合、この属性に対して有効です。
date
文字列インスタンスは、上記の"full-date" ABNFルールに従って有効な表現である場合、この属性に対して有効です。
time
文字列インスタンスは、上記の"full-time" ABNFルールに従って有効な表現である場合、この属性に対して有効です。
duration
文字列インスタンスは、上記の"duration" ABNFルールに従って有効な表現である場合、この属性に対して有効です。

実装は、そのRFCに定義されている他の形式名を使用して追加の属性をサポートしても構いません。"full-date"または"full-time"が実装されている場合、対応する短縮形(それぞれ"date"または"time")を実装する必要があり、動作は同じでなければなりません。実装は、その形式のルールに従って検証しない限り、RFC 3339形式と一致する名前を持つ拡張属性を定義してはなりません。現在、すべてのRFC 3339形式をサポートする必要性についてコンセンサスはありません。そのため、この名前空間を予約するというアプローチにより、全体セットにコミットすることなく実験を促進することができます。形式の実装要件は一般的により柔軟になるか、これらは完全に指定された属性に昇格するか、削除される可能性が高いでしょう。

7.3.2. メールアドレス

これらの属性は、文字列インスタンスに適用されます。

文字列インスタンスは、以下のとおり有効なインターネットメールアドレスである場合、これらの属性に対して有効です。

email
RFC 5321、セクション4.1.2 [RFC5321]の"Mailbox" ABNFルールで定義されています。
idn-email
RFC 6531、セクション3.3 [RFC6531]の拡張された"Mailbox" ABNFルールで定義されています。

"email"属性に対して有効なすべての文字列は、"idn-email"属性に対しても有効であることに注意してください。

7.3.3. ホスト名

これらの属性は、文字列インスタンスに適用されます。

文字列インスタンスは、以下のとおり有効なインターネットホスト名の表現である場合、これらの属性に対して有効です。

hostname
RFC 1123、セクション2.1 [RFC1123]で定義されているもの(RFC 5891、セクション4.4 [RFC5891]で指定されているPunycodeアルゴリズムを使用して生成されたホスト名を含む)です。
idn-hostname
hostnameの場合と同様にRFC 1123で定義されているか、またはRFC 5890、セクション2.3.2.3 [RFC5890]で定義されている国際化されたホスト名です。

"hostname"属性に対して有効なすべての文字列は、"idn-hostname"属性に対しても有効であることに注意してください。

7.3.4. IPアドレス

これらの属性は、文字列インスタンスに適用されます。

文字列インスタンスは、以下のとおり有効なIPアドレスの表現である場合、これらの属性に対して有効です。

ipv4
RFC 2673、セクション3.2 [RFC2673]で定義されている"dotted-quad" ABNF構文に従ったIPv4アドレスです。
ipv6
RFC 4291、セクション2.2 [RFC4291]で定義されているIPv6アドレスです。

7.3.5. リソース識別子

これらの属性は、文字列インスタンスに適用されます。

uri
文字列インスタンスは、[RFC3986]に従って有効なURIである場合、この属性に対して有効です。
uri-reference
文字列インスタンスは、[RFC3986]に従って有効なURI参照(URIまたは相対参照のいずれか)である場合、この属性に対して有効です。
iri
文字列インスタンスは、[RFC3987]に従って有効なIRIである場合、この属性に対して有効です。
iri-reference
文字列インスタンスは、[RFC3987]に従って有効なIRI参照(IRIまたは相対参照のいずれか)である場合、この属性に対して有効です。
uuid
文字列インスタンスは、[RFC4122]に従って有効なUUIDの文字列表現である場合、この属性に対して有効です。

有効なURIはすべて有効なIRIであり、有効なURI参照はすべて有効なIRI参照でもあることに注意してください。

"uuid"形式は、URN内のUUIDではなく、プレーンなUUID用であることにも注意してください。例としては"f81d4fae-7dec-11d0-a765-00a0c91e6bf6"があります。URNとしてのUUIDには、URIスキームとURN名前空間を示す"^urn:uuid:"のパターン正規表現を使用して"uri"形式を使用してください。

7.3.6. uri-template

この属性は、文字列インスタンスに適用されます。

文字列インスタンスは、[RFC6570]に従って有効なURIテンプレート(任意のレベル)である場合、この属性に対して有効です。

URIテンプレートはIRIに使用できますが、個別のIRITemplate仕様はありません。

7.3.7. JSONポインタ

これらの属性は、文字列インスタンスに適用されます。

json-pointer
文字列インスタンスは、RFC 6901、セクション5 [RFC6901]に従って、JSONポインタの有効なJSON文字列表現である場合、この属性に対して有効です。
relative-json-pointer
文字列インスタンスは、有効な相対JSONポインタ [relative-json-pointer]である場合、この属性に対して有効です。

絶対JSONポインタと相対JSONポインタの両方を許可するには、"anyOf"または"oneOf"を使用して、いずれかの形式のサポートを示します。

7.3.8. regex

この属性は、文字列インスタンスに適用されます。

ECMA-262 [ecma262]正規表現方言に従って有効である必要がある正規表現です。

形式を検証する実装は、この仕様の正規表現セクション4.3セクションで定義されているECMA-262のサブセットを少なくとも受け入れる必要があり、すべての有効なECMA-262式を受け入れる必要があります。

8. 文字列エンコードデータの内容に関するボキャブラリ

8.1. まえがき

このセクションで定義されている注釈は、インスタンスにJSON文字列でエンコードされた非JSONデータが含まれていることを示しています。

これらのプロパティは、JSONデータをリッチマルチメディアドキュメントとして解釈するために必要な追加情報を提供します。これらは、コンテンツの種類、エンコード方法、および/または検証方法について説明しています。これらは検証アサーションとしては機能しません。不正な文字列エンコードドキュメントは、含まれているインスタンスが無効と見なされる原因になってはなりません。

"$vocabulary"を使用しないメタスキーマは、そのURIがtrueの値で存在する場合と同様に、このボキャブラリを必要とするものと見なす必要があります。

コンテンツボキャブラリとして知られるこのボキャブラリの現在のURIは、次のとおりです。<https://json-schema.dokyumento.jp/draft/2020-12/vocab/content>。

対応するメタスキーマの現在のURIは次のとおりです。https://json-schema.dokyumento.jp/draft/2020-12/meta/content

8.2. 実装要件

セキュリティとパフォーマンスに関する懸念事項、および考えられるコンテンツタイプのオープンエンドな性質から、実装はデフォルトで文字列の内容を自動的にデコード、解析、および/または検証してはなりません。これはさらに、包含しているドキュメントを処理したコンシューマとは異なるコンシューマによって処理されることを意図した埋め込みドキュメントの使用ケースをサポートします。

このセクションのすべてのキーワードは、文字列のみに適用され、他のデータ型には影響しません。

実装では、文字列の内容のデコード、解析、および/または検証を自動的に行う機能を提供することがあります。ただし、これらの操作をデフォルトで実行してはならず、文字列でエンコードされた各ドキュメントの検証結果を、それを含むドキュメントとは別に提供しなければなりません。このプロセスは、インスタンスを元のスキーマに対して完全に評価し、次にアノテーションを使用して文字列でエンコードされた各ドキュメントをデコード、解析、および/または検証することと同等であるべきです。現時点では、そのような自動的なデコード、解析、および検証機能からの解析済みデータおよび/または検証結果を実行および返すための正確なメカニズムは未定義です。そのような機能が人気を博した場合、将来のドラフトでより詳細に規定される可能性があります。

インスタンス文字列をこれらのキーワードに従って自動的に処理することによって導入される可能性のある脆弱性については、セキュリティに関する考慮事項 (セクション10)セクションも参照してください。

8.3. contentEncoding

インスタンスの値が文字列の場合、このプロパティは、その文字列をエンコードされたバイナリデータとして解釈し、このプロパティで指定されたエンコーディングを使用してデコードする必要があることを定義します。

いくつかのバリエーションを含む16進数、32進数、および64進数のエンコーディングを示す可能性のある値は、RFC 4648 [RFC4648]にリストされています。さらに、RFC 2045 [RFC2045]のセクション6.7と6.8には、MIMEで使用されるエンコーディングが記載されています。このキーワードは、MIMEのContent-Transfer-Encodingヘッダーから派生したもので、バイナリデータをASCII文字にマップするように設計されています。これは、HTTPリクエストとレスポンスのコンテンツをエンコードする(例:圧縮または暗号化)ために使用されるHTTPのContent-Encodingヘッダーとは関係ありません。

"base64"は両方のRFCで定義されていますが、文字列がMIMEコンテキストでの使用を意図していない限り、RFC 4648の定義を想定する必要があります。これらのエンコーディングはすべて、7ビットASCII文字のみで構成される文字列になります。したがって、このキーワードは、その範囲外の文字を含む文字列には意味を持ちません。

このキーワードが存在せず、「contentMediaType」が存在する場合は、エンコーディングが同一性エンコーディングであることを示します。つまり、コンテンツをUTF-8文字列で表現するために変換は必要ありませんでした。

このプロパティの値は、文字列でなければなりません。

8.4. contentMediaType

インスタンスが文字列の場合、このプロパティは、文字列の内容のメディアタイプを示します。「contentEncoding」が存在する場合は、このプロパティはデコードされた文字列を記述します。

このプロパティの値は、文字列でなければならず、RFC 2046 [RFC2046]で定義されているように、メディアタイプでなければなりません。

8.5. contentSchema

インスタンスが文字列であり、「contentMediaType」が存在する場合は、このプロパティに、文字列の構造を記述するスキーマが含まれています。

このキーワードは、JSONスキーマのデータモデルにマップできるメディアタイプであれば、どれでも使用できます。

このプロパティの値は、有効なJSONスキーマでなければなりません。「contentMediaType」が存在しない場合は、無視されるべきです。

8.6.

"contentEncoding"と"contentMediaType"の使用方法を示すスキーマの例を以下に示します。

{
    "type": "string",
    "contentEncoding": "base64",
    "contentMediaType": "image/png"
}

このスキーマで記述されているインスタンスは、文字列であることが期待されており、その値はbase64でエンコードされたPNG画像として解釈できる必要があります。

別の例です。

{
    "type": "string",
    "contentMediaType": "text/html"
}

このスキーマで記述されているインスタンスは、JSON文字列がデコードされた文字セットを使用するHTMLを含む文字列であることが期待されています。RFC 8259 [RFC8259]のセクション8.1に従って、完全に閉じたシステム以外では、これはUTF-8でなければなりません。

この例は、HMAC SHA-256アルゴリズムを使用してMACされたJWTを記述しており、クレームセットに"iss"と"exp"フィールドが必要です。

{
    "type": "string",
    "contentMediaType": "application/jwt",
    "contentSchema": {
        "type": "array",
        "minItems": 2,
        "prefixItems": [
            {
                "const": {
                    "typ": "JWT",
                    "alg": "HS256"
                }
            },
            {
                "type": "object",
                "required": ["iss", "exp"],
                "properties": {
                    "iss": {"type": "string"},
                    "exp": {"type": "integer"}
                }
            }
        ]
    }
}

"contentEncoding"は表示されません。「application/jwt」メディアタイプはbase64urlエンコーディングを使用しますが、それはメディアタイプによって定義されており、JWT文字列が2つのJSONデータ構造のリストにどのようにデコードされるかを決定します。まずヘッダー、次にペイロードです。JWTメディアタイプはJWTをJSON文字列で表現できることを保証するため、さらにエンコードまたはデコードする必要はありません。

9. 基本的なメタデータアノテーションのための語彙

これらの汎用アノテーションキーワードは、ドキュメントとユーザーインターフェースの表示目的で一般的に使用される情報を提供します。これらは、機能の包括的なセットを形成することを意図していません。むしろ、より複雑なアノテーションベースのアプリケーションに対して、追加の語彙を定義できます。

"$vocabulary"を使用しないメタスキーマは、そのURIがtrueの値で存在する場合と同様に、この語彙を必要とするものと見なされるべきです。

メタデータ語彙として知られるこの語彙の現在のURIは、次のとおりです。<https://json-schema.dokyumento.jp/draft/2020-12/vocab/meta-data>。

対応するメタスキーマの現在のURIは次のとおりです。https://json-schema.dokyumento.jp/draft/2020-12/meta/meta-data

9.1. "title"と"description"

これらのキーワードの値は、文字列でなければなりません。

これらのキーワードは両方とも、このユーザーインターフェースによって生成されたデータに関する情報を用いてユーザーインターフェースを装飾するために使用できます。タイトルは短くするのが好ましく、説明は、このスキーマによって記述されたインスタンスの目的について説明します。

9.2. "default"

このキーワードの値には制限はありません。このキーワードの複数の出現が単一のサブインスタンスに適用される場合、実装は重複を削除する必要があります。

このキーワードは、特定のスキーマに関連付けられたデフォルトのJSON値を提供するために使用できます。デフォルト値は、関連付けられたスキーマに対して有効であることが推奨されます。

9.3. "deprecated"

このキーワードの値は、ブール値でなければなりません。このキーワードの複数の出現が単一のサブインスタンスに適用される場合、アプリケーションは、いずれかの出現がtrueの値を指定している場合、インスタンスの場所が非推奨であると見なす必要があります。

"deprecated"がブール値trueの値を持つ場合、アプリケーションは宣言されたプロパティの使用を控える必要があることを示します。将来、プロパティが削除される可能性があります。

trueの値を持つ"deprecated"を含むルートスキーマは、記述されているリソース全体が将来削除される可能性があることを示します。

"deprecated"キーワードは、キーワードを含むスキーマオブジェクトが正常に適用される各インスタンスの場所に適用されます。これにより、包含する配列またはオブジェクトが非推奨ではない場合でも、すべての配列アイテムまたはオブジェクトのプロパティが非推奨になるシナリオが発生する可能性があります。

このキーワードを省略することは、falseの値と同じ動作になります。

9.4. "readOnly"と"writeOnly"

これらのキーワードの値は、ブール値でなければなりません。これらのキーワードの複数の出現が単一のサブインスタンスに適用される場合、結果の動作は、いずれかの出現がtrueの値を指定している場合はtrueの値の場合と同様になり、それ以外の場合はfalseの値の場合と同様になる必要があります。

"readOnly"がブール値trueの値を持つ場合、インスタンスの値は所有権を持つ機関によって排他的に管理されており、アプリケーションがプロパティの値を変更しようとしても、その所有権を持つ機関によって無視または拒否されることが期待されることを示します。

ドキュメント全体に対して"readOnly"としてマークされているインスタンスドキュメントは、所有権を持つ機関に送信された場合に無視されるか、または機関の裁量でエラーが発生する可能性があります。

"writeOnly"がブール値trueの値を持つ場合、インスタンスが所有権を持つ機関から取得されたときに値が存在しないことを示します。所有権を持つ機関にドキュメント(またはそれが表すリソース)を更新または作成するために送信されたときに存在する可能性がありますが、インスタンスの更新されたバージョンまたは新規作成されたバージョンには含まれません。

ドキュメント全体に対して"writeOnly"としてマークされているインスタンスドキュメントは、何らかの空のドキュメントとして返されるか、機関の裁量で取得時にエラーが発生するか、取得要求が無視される可能性があります。

たとえば、"readOnly"はデータベースによって生成されたシリアル番号を読み取り専用としてマークするために使用され、"writeOnly"はパスワード入力フィールドをマークするために使用されます。

これらのキーワードは、ユーザーインターフェースインスタンスの生成に役立てることができます。特に、アプリケーションは、書き込み専用フィールドの入力値がタイプされるときに非表示にするウィジェットを使用することを選択できます。

これらのキーワードを省略することは、falseの値と同じ動作になります。

9.5. "examples"

このキーワードの値は、配列でなければなりません。配列内の値には制限はありません。このキーワードの複数の出現が単一のサブインスタンスに適用される場合、実装は配列の配列ではなく、すべての値のフラットな配列を提供しなければなりません。

このキーワードは、使用方法を示す目的で、特定のスキーマに関連付けられたサンプルのJSON値を提供するために使用できます。これらの値は、関連付けられたスキーマに対して有効であることが推奨されます。

実装では、「default」の値が存在する場合は、追加の例として使用できます。「examples」が存在しない場合でも、「default」はこの方法で使用できます。

10. セキュリティに関する考慮事項

JSONスキーマの検証は、JSONスキーマのコアに関する語彙を定義し、そこにリストされているすべてのセキュリティに関する考慮事項を対象としています。

JSONスキーマ検証では正規表現を使用できますが、正規表現には多くの異なる(多くの場合、互換性のない)実装が存在します。一部の実装では任意のコードの埋め込みを許可していますが、これはJSONスキーマの範囲外であり、許可してはなりません(MUST NOT)。正規表現は、計算コストが非常に高くなる(いわゆる「カタストロフィックバックトラッキング」)ように作成されることが多く、サービス拒否攻撃につながる可能性があります。

"contentEncoding"および/または"contentMediaType"に基づいてインスタンス文字列データの検証または評価をサポートする実装は、誤った情報に基づいて安全でない方法でデータ評価を行うリスクがあります。アプリケーションは、スキーマとインスタンス間の関係が確立された場合にのみ(例:同じ権限を共有する場合)、このような処理を実行することで、このリスクを軽減できます。

メディアタイプまたはエンコーディングの処理は、そのメディアタイプまたはエンコーディングのセキュリティ上の考慮事項に従います。RFC 4329 スクリプティングメディアタイプ [RFC4329]のセキュリティ上の考慮事項は、JSON文字列内にエンコードされたJavaScriptまたはECMAScriptを処理する場合に適用されます。

11. 参考文献

11.1. 規定参照

[RFC2119]
Bradner, S."RFCにおける要件レベルを示すためのキーワード"BCP 14RFC 2119DOI 10.17487/RFC2119<https://www.rfc-editor.org/info/rfc2119>
[RFC1123]
Braden, R., Ed."インターネットホストの要件 - アプリケーションとサポート"STD 3RFC 1123DOI 10.17487/RFC1123<https://www.rfc-editor.org/info/rfc1123>
[RFC2045]
Freed, N.およびN. Borenstein"汎用インターネットメール拡張機能(MIME)パート1:インターネットメッセージ本文の形式"RFC 2045DOI 10.17487/RFC2045<https://www.rfc-editor.org/info/rfc2045>
[RFC2046]
Freed, N.およびN. Borenstein"汎用インターネットメール拡張機能(MIME)パート2:メディアタイプ"RFC 2046DOI 10.17487/RFC2046<https://www.rfc-editor.org/info/rfc2046>
[RFC2673]
Crawford, M."ドメインネームシステムにおけるバイナリラベル"RFC 2673DOI 10.17487/RFC2673<https://www.rfc-editor.org/info/rfc2673>
[RFC3339]
Klyne, G.およびC. Newman"インターネット上の日付と時刻:タイムスタンプ"RFC 3339DOI 10.17487/RFC3339<https://www.rfc-editor.org/info/rfc3339>
[RFC3986]
Berners-Lee, T.Fielding, R.、およびL. Masinter"統一資源識別子(URI):汎用構文"STD 66RFC 3986DOI 10.17487/RFC3986<https://www.rfc-editor.org/info/rfc3986>
[RFC3987]
Duerst, M.およびM. Suignard"国際化されたリソース識別子(IRI)"RFC 3987DOI 10.17487/RFC3987<https://www.rfc-editor.org/info/rfc3987>
[RFC4122]
Leach, P.Mealling, M.、およびR. Salz"普遍的に一意な識別子(UUID)URN名前空間"RFC 4122DOI 10.17487/RFC4122<https://www.rfc-editor.org/info/rfc4122>
[RFC4291]
Hinden, R.およびS. Deering"IPv6アドレス体系"RFC 4291DOI 10.17487/RFC4291<https://www.rfc-editor.org/info/rfc4291>
[RFC4648]
Josefsson, S."Base16、Base32、およびBase64データエンコーディング"RFC 4648DOI 10.17487/RFC4648<https://www.rfc-editor.org/info/rfc4648>
[RFC5321]
Klensin, J."簡易メール転送プロトコル"RFC 5321DOI 10.17487/RFC5321<https://www.rfc-editor.org/info/rfc5321>
[RFC5890]
Klensin, J."アプリケーションのための国際化ドメイン名(IDNA):定義とドキュメントフレームワーク"RFC 5890DOI 10.17487/RFC5890<https://www.rfc-editor.org/info/rfc5890>
[RFC5891]
Klensin, J."アプリケーションにおける国際化ドメイン名(IDNA):プロトコル"RFC 5891DOI 10.17487/RFC5891<https://www.rfc-editor.org/info/rfc5891>
[RFC6570]
Gregorio, J.Fielding, R.Hadley, M.Nottingham, M.、およびD. Orchard"URIテンプレート"RFC 6570DOI 10.17487/RFC6570<https://www.rfc-editor.org/info/rfc6570>
[RFC6531]
Yao, J.およびW. Mao"国際化されたメールのためのSMTP拡張"RFC 6531DOI 10.17487/RFC6531<https://www.rfc-editor.org/info/rfc6531>
[RFC6901]
Bryan, P., Ed.Zyp, K.、およびM. Nottingham, Ed."JavaScriptオブジェクト表記(JSON)ポインタ"RFC 6901DOI 10.17487/RFC6901<https://www.rfc-editor.org/info/rfc6901>
[RFC8259]
Bray, T., Ed."JavaScriptオブジェクト表記(JSON)データ交換形式"STD 90RFC 8259DOI 10.17487/RFC8259<https://www.rfc-editor.org/info/rfc8259>
[ecma262]
"ECMA-262、第11版仕様"<https://262.ecma-international.org/5.1/>
[relative-json-pointer]
Luff, G.Andrews, H.、およびB. Hutton, Ed."相対JSONポインタ"開発中インターネットドラフト、draft-handrews-relative-json-pointer-01<https://datatracker.ietf.org/doc/html/draft-handrews-relative-json-pointer-01>
[json-schema]
Wright, A.Andrews, H.Hutton, B.、およびG. Dennis"JSONスキーマ:JSONドキュメントを記述するためのメディアタイプ"開発中インターネットドラフト、draft-bhutton-json-schema-01<https://datatracker.ietf.org/doc/html/draft-bhutton-json-schema-01>

11.2. 参考参照

[RFC4329]
Hoehrmann, B."スクリプティングメディアタイプ"RFC 4329DOI 10.17487/RFC4329<https://www.rfc-editor.org/info/rfc4329>

付録A. 検証からコアに移されたキーワード

このドラフトの時点で、いくつかのキーワードがこのドキュメントからコア仕様 [json-schema]に移動され、場合によっては名前の変更やその他の変更が行われています。これは、次の以前の検証キーワードに影響します。

"definitions"
"$ref"と一致させ、より短く入力できるように"$defs"に名前が変更されました。スキーマ語彙の作成者は、古い名前を使用しているスキーマを無効にしないように、異なる動作を持つ"definitions"キーワードを定義してはなりません(SHOULD NOT)。このドキュメントで参照されている単一語彙メタスキーマには"definitions"が存在しませんが、デフォルトのメタスキーマには存在し続けており、そのメタスキーマが使用されている場合、実装は"$defs"と"definitions"が同じ動作を持つと想定する必要があります(SHOULD)。
"allOf"、"anyOf"、"oneOf"、"not"、"if"、"then"、"else"、"items"、"additionalItems"、"contains"、"propertyNames"、"properties"、"patternProperties"、"additionalProperties"
これらのキーワードはすべて、インスタンスにサブスキーマを適用し、その結果を組み合わせますが、それ自体では条件を主張しません。アサーションキーワードがない場合、これらの適用者は、false ブールスキーマを使用するか、true ブールスキーマ(または同等のスキーマオブジェクト)の結果を反転させることによってのみ、アサーションエラーを引き起こす可能性があります。このため、これらは検証、ハイパースキーマ、および拡張語彙のすべてを基盤とするジェネリックなメカニズムとして、より適切に定義されています。
「dependencies」
このキーワードには、実装と推論を比較的困難にする2つの異なる動作モードがありました。スキーマ形式は、適用者語彙の一部として、コアに移動され、「dependentSchemas」に名前が変更されました。これは「properties」と類似していますが、サブスキーマをプロパティ値に適用する代わりに、プロパティを含むオブジェクトに適用します。プロパティ名配列形式はここに保持され、「dependentRequired」に名前が変更されます。これは、「required」アサーションキーワードの条件付き使用のショートカットであるアサーションだからです。

付録B.謝辞

JSON スキーマの初期ドラフト作成にご尽力いただいた Gary Court、Francis Galiegue、Kris Zyp、および Geraint Luff の皆様に感謝いたします。

このドキュメントへの提出とパッチにご協力いただいた Jason Desrosiers、Daniel Perrett、Erik Wilde、Evgeny Poberezkin、Brad Bowman、Gowry Sankar、Donald Pipowitch、Dave Finlay、Denis Laxalde、Phil Sturgeon、Shawn Silverman、および Karen Etheridge の皆様に感謝いたします。

付録C.変更ログ

インターネットドラフトのステータスを離れる前に、このセクションを削除してください。

draft-bhutton-json-schema-validation-01
  • 「minContains」キーワードの説明を改善および明確化
  • 「production」の使用を「ABNF ルール」に変更
draft-bhutton-json-schema-validation-00
  • メール形式RFC参照を5322ではなく5321に修正
  • 「contentEncoding」値の集合と意味を明確化
  • 正規表現のサポートについて、ECMA-262 第11版を参照
  • 「format」を注釈のみの語彙とアサーション語彙に分割
  • 配列に適用可能な場合、「deprecated」を明確化
draft-handrews-json-schema-validation-02
  • キーワードを正式な語彙にグループ化
  • 語彙の観点から「format」の実装要件を更新
  • デフォルトでは、「format」は検証してはなりませんが、検証を有効にすることができます
  • 語彙宣言を使用して「format」検証を要求できます
  • 「definitions」をコア仕様の「$defs」に移動
  • 適用者キーワードをコア仕様に移動
  • 「dependencies」の配列形式を「dependentRequired」に名前変更し、スキーマ形式をコア仕様に移動
  • すべての「content*」キーワードをアサーションではなく注釈として指定
  • 文字列でエンコードされたドキュメントにスキーマを適用できるように「contentSchema」を追加
  • 「contentEncoding」でRFC 4648エンコーディングも許可
  • 「minContains」と「maxContains」を追加
  • 「hostname」と「idn-hostname」のRFC参照を更新
  • 「uuid」と「duration」フォーマットを追加
draft-handrews-json-schema-validation-01
  • このドラフトは純粋に明確化であり、機能的な変更はありません
  • 「not」などの場合に注釈を無視する背後にある一般的な原則を提供
  • 「if」「then」「else」の検証の相互作用を明確化
  • 注釈に対する「if」「then」「else」の動作を明確化
  • 軽微な書式設定と相互参照の改善
draft-handrews-json-schema-validation-00
  • 「if」「then」「else」を追加
  • コア仕様に従ってキーワードをアサーションまたは注釈として分類
  • 将来「dependencies」を削除する可能性について警告
  • 可読性のために検証キーワードをサブセクションにグループ化
  • 「readOnly」をハイパースキーマから検証メタデータに移動
  • 「writeOnly」を追加
  • 以前のハイパースキーマ「media」キーワードを使用して、文字列でエンコードされたメディアセクションを追加
  • 「regex」形式を復元(削除は意図的ではありませんでした)
  • 「date」と「time」形式を追加し、追加のRFC 3339形式名を予約
  • I18N 形式:「iri」、「iri-reference」、「idn-hostname」、「idn-email」
  • 「json-pointer」形式はURIフラグメントではなく文字列エンコーディングを意味することを明確化
  • 「minimum」と「exclusiveMinimum」の意味を反転させたタイプミスを修正
  • 形式構文の参照を規定参照に移動
  • JSONは規定要件です
draft-wright-json-schema-validation-01
  • 完全な単語を使用するハイフン付きの形式名に標準化(「uriref」は「uri-reference」になります)
  • 「uri-template」と「json-pointer」形式を追加
  • 「exclusiveMaximum」「exclusiveMinimum」を「maximum」「minimum」のブール修飾子から独立した数値フィールドに分割
  • additionalItems/itemsを2つのセクションに分割
  • properties/patternProperties/additionalPropertiesの定義を改良
  • 「examples」キーワードを追加
  • 「contains」キーワードを追加
  • 空の「required」と「dependencies」配列を許可
  • プリミティブ型への「type」参照を修正
  • 「const」キーワードを追加
  • 「propertyNames」キーワードを追加
draft-wright-json-schema-validation-00
  • 追加のセキュリティに関する考慮事項を追加
  • 「最新バージョン」メタスキーマへの参照を削除し、代わりに番号付きバージョンを使用
  • 多くのキーワードの定義を簡潔にするために言い換え
  • 相対URI参照も許可する「uriref」形式を追加
draft-fge-json-schema-validation-00
  • 初期ドラフト。
  • ドラフトv3からサルベージ。
  • 「required」キーワードを再定義。
  • 「extends」、「disallow」を削除
  • 「anyOf」、「allOf」、「oneOf」、「not」、「definitions」、「minProperties」、「maxProperties」を追加。
  • 「dependencies」メンバの値は、もはや単一の文字列にすることはできません。プロパティ依存配列には、少なくとも1つの要素が必要です。
  • 「divisibleBy」を「multipleOf」に名前変更。
  • 「type」配列には、もはやスキーマを含めることができなくなりました。「any」を可能な値から削除します。
  • 「format」セクションを改良し、サポートをオプションにします。
  • 「format」:「phone」、「style」、「color」属性を削除。「ip-address」を「ipv4」に名前変更。すべての属性への参照を追加。
  • 配列/オブジェクトインスタンスのスキーマを計算するためのアルゴリズムを提供。
  • 相互運用性の考慮事項を追加。

著者アドレス

Austin Wright(編集者
Henry Andrews(編集者
Ben Hutton(編集者
ポストマン