了解 JSON Schema 草稿版本 4 中的“additionalProperties”关键字
Posted
技术标签:
【中文标题】了解 JSON Schema 草稿版本 4 中的“additionalProperties”关键字【英文标题】:Understanding the "additionalProperties" keyword in JSON Schema draft version 4 【发布时间】:2013-05-03 19:42:53 【问题描述】:规范链接: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】:您在规范中发现了一个错误,因此您实际上并没有误解某些内容。
IETF 网站上有互联网草案的更新版本(两天后),这里的示例有所不同。
见:https://datatracker.ietf.org/doc/html/draft-fge-json-schema-validation-00#page-13
由于该文档是互联网草稿,http://datatracker.ietf.org/ 上的版本很可能是正确的版本。
此备忘录的状态
本互联网草案的提交完全符合 BCP 78 和 BCP 79 的规定。
Internet-Drafts是Internet Engineering的工作文件 工作组 (IETF)。请注意,其他组也可能分发 工作文件作为互联网草案。当前互联网列表- 草稿在http://datatracker.ietf.org/drafts/current/。
Internet-Drafts 是 Internet Engineering 的工作文件 工作组 (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”:空, "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”仍然包含两个元素,“”和“fiddle”。验证 因此失败。
【讨论】:
以上是关于了解 JSON Schema 草稿版本 4 中的“additionalProperties”关键字的主要内容,如果未能解决你的问题,请参考以下文章
使用 z-schema 编译 JSON Schema Draft-03