0

我有一些生成的 JSON 模式,我正在尝试使用 JSON 模式为这些模式制定一个模式。这样做的原因是我需要其他人为我提供与我生成的内容相匹配的 JSON 模式。他们可以以任何他们喜欢的方式创建它们,但我最终必须能够使用它们。

在我生成的模式中,我有对象,其中对象的每个属性通过一些小的更改有效地扩展了核心 JSON 模式。有没有办法将对象属性的模式标记为扩展核心 JSON 模式?我读到如果 Draft 3 在 Draft 4 中被删除,则有一个“extends”关键字。

例如,像下面这样的对象属性可以有 minItems、type、name 等条目......但也可以有一些自定义条目,如 readonly 或 target_model_type。

"schema": {
    "directoryDomain": {
        "target" : "device/hcmf/DirectoryDomain",
        "format" : "uri",
        "required" : true,
        "title" : "directoryDomain",
        "type" : "string",
        "name" : "directoryDomain"
    },
    ...
}
4

1 回答 1

0

如果我正确理解你的问题...

扩展核心模式的一种方法是使用allOf将核心模式与新字段混合。

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "allOf": [{ "$ref": "http://json-schema.org/draft-04/schema#" }],
  "properties": {
    "target": {
      "type": "string",
      "format": "uri"
    }
  }
}

target此架构向核心 JSON 架构定义添加了一个可选属性。

问题在于它不是递归的。只有对象的顶层才能理解新字段。这是因为核心 JSON Schema 本身就是递归的。当核心 JSON Schema 引用自身时,无法让其使用您的模式。

扩展核心 JSON 模式的唯一方法是复制它并添加扩展属性。它闻起来像是违反 DRY 的,但实际上它不应该成为问题,因为 Draft-4 核心 JSON Schema 不会改变。

于 2015-03-31T06:18:26.883 回答