理解JSON Schema草案版本4中的“additionalProperties”关键字

46

规范链接:http://json-schema.org/latest/json-schema-validation.html#anchor64

5.4.4.2小节指出:

如果 "additionalProperties" 的值为布尔类型的true或模式,则对象实例成功验证取决于此;...

5.4.4.3小节指出:

如果 "additionalProperties" 缺失,则可以将其视为一个空模式。

所以,如果 "additionalProperties" 缺失,则被视为具有空模式。如果它是模式(任何一种),则对象会成功验证而不考虑其他任何因素。

但这与第5.4.4.5小节中关于"示例"的断言相矛盾,即给定实例无法针对未为 "additionalProperties" 指定任何内容的给定模式进行验证。

是否有人能解释我在哪里以及以何种方式误解了规范?

1个回答

54
你在规范中发现了一个错误,所以你并没有误解什么。
在IETF网站上有一个更新的版本(比两天前的),其中这个例子是不同的。
请参见:https://datatracker.ietf.org/doc/html/draft-fge-json-schema-validation-00#page-13 由于该文档是一个互联网草案,很可能http://datatracker.ietf.org/上的版本是正确的。 本备忘录的状态 本互联网草案完全符合BCP 78和BCP 79的规定。 互联网草案互联网工程任务组(IETF)的工作文件。请注意,其他组织也可以将工作文件发布为互联网草案。当前互联网草案的列表可在http://datatracker.ietf.org/drafts/current/上找到。
互联网草案是互联网工程任务组(IETF)的工作文件。
此外,两个版本具有不同的日期和到期日期:
- 您提供的链接版本 - 编写日期:2013年1月30日,到期日期:2013年8月3日。 - IETF上的版本 - 编写日期:2013年2月1日,到期日期:2013年8月5日
关于IETF版本:

This schema will be used as an example:

   {
       "properties": {
           "p1": {}
       },
       "patternProperties": {
           "p": {},
           "[0-9]": {}
       },
       "additionalProperties": false

This is the instance to validate:

{ "p1": true, "p2": null, "a32&o": "foobar", "": [], "fiddle": 42, "apple": "pie" }

The three property sets are:

   s  [ "p1", "p2", "a32&o", "", "fiddle", "apple" ]

   p  [ "p1" ]

   pp [ "p", "[0-9]" ]

Applying the two steps of the algorithm:

      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".

The set "s" still contains two elements, "" and "fiddle". Validation therefore fails.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接