链接到规范: 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”指定的任何东西)。
有人可以解释何处及以何种方式,我误解了规范?
你已经发现,在规范的错误,所以你实际上并不误解的东西。
还有就是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