草案 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
不符合任何这些类别,美元符号开头的核心关键字也不符合。
收集注释值
注解关键字(以前称为 元数据关键字)现在提供了关于 如何收集应用于实例中同一位置的多个值 的指导。默认情况下,所有未在 否定模式 中找到的值都将作为无序集合进行收集。以下例外情况在相应的关键字下有记录。
readOnly
和writeOnly
应该进行逻辑或运算。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 来自或指向实例文档中的位置,而不是整个文档。