仕様へのリンク: http://json-schema.org/latest/json-schema-validation.html#anchor64
セクション5.4.4.2には次のように記載されています。
これら3つのキーワードに対するオブジェクトインスタンスの検証が成功するかどうかは、「additionalProperties」の値に依存します。その値がブール値trueまたはスキーマの場合、検証は成功します。 ...
セクション5.4.4.3には次のように記載されています。
「additionalProperties」が存在しない場合は、値として空のスキーマが存在すると見なされます。
OK、「additionalProperties」が存在しない場合は、空のスキーマが存在すると見なされます。そして、それが(あらゆる種類の)スキーマである場合、オブジェクトは他の考慮事項に関係なく正常に検証されます。
しかし、これはセクション5.4.4.5「例」のアサーションと矛盾します。これは、指定されたインスタンスが指定されたスキーマ(「additionalProperties」に何も指定していない)に対して検証に失敗することを示しています。
誰かがどこでどのように私が仕様を間違って解釈しているのか説明できますか?
仕様にエラーを見つけたので、実際に何かを誤解していない。
IETFのWebサイトには、インターネットドラフトの更新バージョン(2日後)があり、この例は異なります。
参照: http://tools.ietf.org/html/draft-fge-json-schema-validation-00#page-1
ドキュメントはインターネットドラフトであるため、おそらく http://datatracker.ietf.org/ のバージョンが正しいバージョンです。
このメモのステータス
このインターネットドラフトは、
BCP 78およびBCP 79の規定。Internet-DraftsはInternet Engineeringの作業文書です
タスクフォース(IETF)。他のグループも配布する可能性があることに注意してください
インターネットドラフトとしての作業文書。現在のインターネットのリスト
ドラフトは http://datatracker.ietf.org/drafts/current/ にあります。インターネットドラフトはインターネットエンジニアリングの作業文書です
タスクフォース(IETF)。
さらに、2つのバージョンには異なる日付と有効期限があります。
IETFバージョン:
このスキーマは例として使用されます。
{ "properties": { "p1": {} }, "patternProperties": { "p": {}, "[0-9]": {} }, "additionalProperties": false
これは検証するインスタンスです:
{"p1":true、 "p2":null、 "a32&o": "foobar"、 "":[]、 "fiddle":42、 "Apple": "pie"}
3つのプロパティセットは次のとおりです。
s [ "p1", "p2", "a32&o", "", "fiddle", "Apple" ] p [ "p1" ] pp [ "p", "[0-9]" ]
アルゴリズムの2つのステップの適用:
after the first step, "p1" is removed from "s"; after the second step, "p2" (matched by "p"), "a32&o" (matched by "[0-9]") and "Apple" (matched by "p") are removed from "s".
セット "s"には、まだ2つの要素 ""と "fiddle"が含まれています。したがって、検証は失敗します。