我有一些生成的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"
},
...
}
答案 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不会改变。