链接到规范: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”指定任何内容)。
有人可以解释我误解规范的地点和方式吗?
答案 0 :(得分:32)
您在规范中发现了一个错误,因此您实际上并没有误解某些内容。
IETF网站上有一个更新版本(两天后)的互联网草案,这个例子不同。
请参阅:http://tools.ietf.org/html/draft-fge-json-schema-validation-00#page-13
由于该文档是互联网草案,因此http://datatracker.ietf.org/上的版本很可能是正确的版本。
本备忘录的状态
此互联网草案的提交完全符合中文 BCP 78和BCP 79的规定。
Internet草案是 Internet Engineering
的工作文档 特遣部队(IETF)。请注意,其他组也可以分发
工作文件作为互联网草案。当前互联网列表 -
草稿是http://datatracker.ietf.org/drafts/current/。互联网草案是互联网工程的工作文件 特遣部队(IETF)。
此外,这两个版本有不同的日期和到期日期:
关于IETF版本:
此架构将用作示例:
{ "properties": { "p1": {} }, "patternProperties": { "p": {}, "[0-9]": {} }, "additionalProperties": false
这是要验证的实例:
{ “p1”:是的, “p2”:null, “a32& o”:“foobar”, “”:[], “小提琴”:42, “apple”:“pie”}
三个属性集是:
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”仍然包含两个元素,“”和“小提琴”。验证 因此失败了。