草案 07 发布说明

对于核心和验证规范,草案 07 是一个相对较小的更新。在验证关键字和结果方面,它与草案 06 完全向后兼容。

一些区别在于从超级模式迁移过来的关键字,以及实例和模式如何推荐链接在一起。最后,收集注释关键字值的流程比以前更清晰。

关键字

  • 没有关键字更改行为
  • 没有关键字被删除
  • 一些关键字是从超级模式移动过来的,其中两个被重命名了
关键字更改说明
["$comment"](../../draft-07/json-schema-core.html#rfc.section.9)添加到核心用于给模式维护者添加备注,而不是 ["description"](../../draft-07/json-schema-validation.html#rfc.section.10.1),后者适合向最终用户展示
["if", "then", "else"](../../draft-07/json-schema-validation.html#rfc.section.6.6)添加到验证显式条件模式评估
["readOnly"](../../draft-07/json-schema-validation.html#rfc.section.10.3)从超级模式移动到验证不限于超媒体环境
["writeOnly"](../../draft-07/json-schema-validation.html#rfc.section.10.3)添加到验证一般只写字段,包括但不限于密码
["contentMediaType"](../../draft-07/json-schema-validation.html#rfc.section.8)从超级模式移动到验证以前是 ["media": {"type": "..."}](../../draft-06/json-schema-hypermedia.html#rfc.section.5.3)
["contentEncoding"](../../draft-07/json-schema-validation.html#rfc.section.8)从超级模式移动到验证以前是 ["media": {"binaryEncoding": "..."}](../../draft-06/json-schema-hypermedia.html#rfc.section.5.3)

请注意,"content*" 关键字不需要验证。

格式

许多格式已添加、澄清或从旧草案中恢复。

格式更改说明
["iri"](../../draft-07/json-schema-validation.html#rfc.section.7.3.5)添加"uri" 的 I18N 等效项
["iri-reference"](../../draft-07/json-schema-validation.html#rfc.section.7.3.5)添加"uri-reference" 的 I18N 等效项
["uri-template"](../../draft-07/json-schema-validation.html#rfc.section.7.3.6)注意到 IRI 支持没有单独的 IRI 模板标准
["idn-email"](../../draft-07/json-schema-validation.html#rfc.section.7.3.2)添加"email" 的 I18N 等效项
["idn-hostname"](../../draft-07/json-schema-validation.html#rfc.section.7.3.3)添加"hostname" 的 I18N 等效项
["json-pointer"](../../draft-07/json-schema-validation.html#rfc.section.7.3.7)澄清仅用于字符串形式,不用于 URI 片段
["relative-json-pointer"](../../draft-07/json-schema-validation.html#rfc.section.7.3.7)添加恢复了 相对 JSON 指针 草案
["regex"](../../draft-07/json-schema-validation.html#rfc.section.7.3.8)从草案 03 中恢复ECMA 262 正则表达式
["date"](../../draft-07/json-schema-validation.html#rfc.section.7.3.1)从草案 03 中恢复RFC 3339 “full-date”
["time"](../../draft-07/json-schema-validation.html#rfc.section.7.3.1)从草案 03 中恢复RFC 3339 “full-time”

所有其他 RFC 3339 日期、时间和持续时间名称都保留以备将来考虑。如果被添加为扩展格式,则应以与在 RFC 中使用的方式兼容的方式实现它们,以确保未来的兼容性。

关键字分类

虽然它对验证过程没有直接影响,但这组草案根据关键字的行为对其进行分类。这些分类的名称在整个文档中都有使用,因此了解它们很有用

请注意,definitions 不符合任何这些类别,美元符号开头的核心关键字也不符合。

收集注释值

注解关键字(以前称为 元数据关键字)现在提供了关于 如何收集应用于实例中同一位置的多个值 的指导。默认情况下,所有未在 否定模式 中找到的值都将作为无序集合进行收集。以下例外情况在相应的关键字下有记录。

  • readOnlywriteOnly 应该进行逻辑或运算。
  • examples 应被扁平化为一个单一的收集数组。

超媒体环境中的 JSON Schema

这些更改与许多验证用例无关,对超模式用户更有意义。但是,即使没有超模式,如果您通过 HTTP 或其他超媒体环境访问实例文档,您可能会发现本节有用。

链接实例和模式

在与“profile”规范作者的讨论之后,我们得出结论,将其用于 JSON Schema 是不正确的。关于 使用哪些关系 来将实例链接到模式的新指导是:

链接关系更改说明
"describedBy"无变化可网络访问的 URL
"profile"已移除;请使用 "schema"不透明的标识 URI
"schema"添加不透明的标识 URI

"schema",类似于过去草案中的 "profile",也可以用作 媒体类型参数

实例媒体类型

本节中的更改与 JSON 超模式更相关,而不是与验证相关,但由于它们是核心规范的一部分,因此在此进行解释。

媒体类型确定它们自己的参数以及它们自己的 URI 片段语法。application/json 不允许任何参数或 URI 片段。

application/schema-instance+json 是一种可选的媒体类型,用于与支持 "schema" 作为媒体类型参数的实例一起使用,并允许使用 JSON 指针语法进行 URI 片段。

支持 "schema" 作为媒体类型参数允许在超媒体环境中进行基于模式的内容协商。

支持 JSON 指针 URI 片段主要对 JSON 超模式有用,因为超模式使用中涉及的许多 URI 来自或指向实例文档中的位置,而不是整个文档。

需要帮助?

您发现这些文档有帮助吗?

帮助我们使我们的文档更出色!

在 JSON Schema 中,我们重视文档贡献,就像我们重视其他类型的贡献一样!

仍然需要帮助?

学习 JSON Schema 通常令人困惑,但别担心,我们在这里为您提供帮助!