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

时间:2015-03-30 15:12:18

标签: json jsonschema json-schema-validator

我有一些生成的JSON模式,我正在尝试使用JSON模式为这些模式绘制模式。原因是我需要其他人为我提供与我生成的JSON模式匹配的JSON模式。他们可以按照自己喜欢的方式创建它们,但我必须能够最终使用它们。

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

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

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

1 个答案:

答案 0 :(得分: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模式使用您的模式。

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