了解JSON Schema草案版本4中的"additionalProperties"关键字

Ham*_*ite 25 validation json specifications jsonschema

链接到规范: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"指定任何内容).

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

Men*_*los 33

你已经发现,在规范的错误,所以你实际上并不误解的东西.

还有就是IETF网站,在这个例子中是不同的互联网草案的更新版本(从两天后).

见:http://tools.ietf.org/html/draft-fge-json-schema-validation-00#page-13

由于该文件是一个互联网草案,最有可能的版本http://datatracker.ietf.org/是正确的版本.

本备忘录的状态

这个互联网草案是在完全遵守提交
BCP 78和BCP 79的规定.

Internet-DraftsInternet工程
任务组(IETF)的
工作文档.请注意,其他组也可能将
工作文档分发为Internet-Drafts.当前的Internet
草案列表位于http://datatracker.ietf.org/drafts/current/.

Internet-Drafts是Internet工程
任务组(IETF)的工作文档.

此外,这两个版本有不同的日期和到期日:

  • 您链接的版本 - 书面:2013年1月30日和到期:2013年8月3日.
  • ietf上的版本 - 写于:2013年2月1日,到期:2013年8月5日

在IETF版本上:

此架构将用作示例:

   {
       "properties": {
           "p1": {}
       },
       "patternProperties": {
           "p": {},
           "[0-9]": {}
       },
       "additionalProperties": false
Run Code Online (Sandbox Code Playgroud)

这是验证的实例:

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

这三个属性集是:

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

   p  [ "p1" ]

   pp [ "p", "[0-9]" ]
Run Code Online (Sandbox Code Playgroud)

应用算法的两个步骤:

      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".
Run Code Online (Sandbox Code Playgroud)

集合"s"仍然包含两个元素,""和"小提琴".因此验证失败.