有没有办法将我的 JSON 模式的某些部分定义为必须根据核心 JSON 模式简单验证的元素?

Is there a way to define certain parts of my JSON schema as elements that must simply validate according to the core JSON schema?

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

在我生成的模式中,我有一些对象,其中对象的每个 属性 有效地扩展了核心 JSON 模式,并进行了一些小的更改。有没有办法将对象 属性 的架构标记为扩展核心 JSON 架构?我读到有一个 "extends" 关键字 if Draft 3 在 Draft 4 中被删除了。

例如,像下面这样的对象属性可以包含 minItems、类型、名称等条目...但也可以包含一些自定义条目,例如只读或 target_model_type。

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

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

扩展核心模式的一种方法是使用 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 架构在引用自身时使用您的架构。

扩展核心 JSON 架构的唯一方法是复制它并添加您的扩展属性。这听起来像是违反了 DRY,但实际上这应该不是问题,因为 draft-4 核心 JSON 架构不会改变。