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

问题描述 投票:0回答:1

规范链接:http://json-schema.org/latest/json-schema-validation.html#anchor64

第 5.4.4.2 节规定:

针对这三个关键字成功验证对象实例取决于“additionalProperties”的值:如果其值为 boolean true 或 schema,则验证成功; ...

第 5.4.4.3 节规定:

如果“additionalProperties”不存在,则可能会被视为以空模式作为值存在。

好的,所以如果“additionalProperties”不存在,则视为存在空模式。如果它是一个模式(任何类型),那么无论任何其他考虑因素如何,该对象都会成功验证。

但这与第 5.4.4.5 节“示例”中的断言相矛盾,即给定实例无法根据给定模式进行验证(该模式没有为“additionalProperties”指定任何内容)。

有人可以解释一下我在哪里以及以什么方式误解了规范吗?

json validation specifications jsonschema
1个回答
53
投票

您在规范中发现了错误,因此您实际上并没有误解某些内容。

IETF 网站上有互联网草案的更新版本(两天后),该示例有所不同。

参见:https://datatracker.ietf.org/doc/html/draft-fge-json-schema-validation-00#page-13

由于该文档是互联网草案,因此 http://datatracker.ietf.org/ 上的版本很可能是正确的版本。

本备忘录的状态

本互联网草案的提交完全符合
BCP 78 和 BCP 79 的规定。

Internet-DraftsInternet Engineering
的工作文件 工作组 (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”:空, "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”。验证 因此失败了。

© www.soinside.com 2019 - 2024. All rights reserved.