了解在JSON模式4版草案中的“additionalProperties”关键字(Understan

2019-09-02 08:25发布

链接到规范: 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”指定的任何东西)。

有人可以解释何处及以何种方式,我误解了规范?

Answer 1:

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

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

见: http://tools.ietf.org/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的版本:

这个模式将被用来作为一个例子:

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

这是为了验证实例:

{ “P1”:真, “P2”:NULL, “A32&O”: “foobar的”, “”:[], “小提琴”:42, “苹果”: “饼”}

这三个属性设置为:

  s [ "p1", "p2", "a32&o", "", "fiddle", "apple" ] p [ "p1" ] pp [ "p", "[0-9]" ] 

应用该算法的两个步骤:

  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”仍然包含两个元素,“”和“小提琴”。 因此验证失败。



文章来源: Understanding the “additionalProperties” keyword in JSON Schema draft version 4