如何在其他文件中引用带有anyOf定义的类型数组的JSON模式定义



我有一个jsonschema定义definition-1.json,如下所示。我有一个array类型的属性inputs,它指的是类似的anyOfdefinitions

"inputs": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/definitions/stringParameter"
},
{
"$ref": "#/definitions/numberParameter"
},
{
"$ref": "#/definitions/booleanParameter"
},
{
"$ref": "#/definitions/jsonParameter"
},
{
"$ref": "#/definitions/fileParameter"
}
]
}
}

然后在相同的jsonschemadefinition-1.json中如下定义的参数definitions

"definitions": {
"stringParameter": {
"type": "object",
"required": [
"name",
"description",
"datatype"
]
}
...
}

现在我想在我的另一个模式dummy-1.json中引用这个参数definitions,就像下面的一样

{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "dummy-1.json",
"allOf": [
{
"type": "object",
"required": [
"definition_data"
],
"properties": {
"definition_data": {
"type": "object",
"required": [
"inputs"
],
"properties": {
"type": "array",
"inputs": {
"items": {
"allOf": [
{
"prop1": {
"$ref": "#/definitions/stringParameter"
}
},
{
"prop2": {
"$ref": "#/definitions/numberParameter"
}
}
]
}
}
}
}
}
},
{
"type": "object",
"properties": {
"definition_data": {
"$ref": "definition-1.json"
}
}
}
]
}

这看起来不起作用。prop1也将成功验证其他参数定义的任何属性部分,即使在dummy-1.json中我明确引用了#/definitions/stringParameter。我可以理解definition-1.json中的inputs接受anyOf的所有参数definitions。但我们想知道如何实现dummy-1.json的1:1参数定义映射。

如果我的理解是正确的,您希望从dummy-1.json引用definitions-1.json中定义的子模式。要做到这一点,您必须指定definition-1.json的URI,并在其中附加子模式的指针,如:

dummy-1.json:

{
"$ref": "uri-of-definitions-1.json#/definitions/stringParameter"
}

请注意,要设置的URI非常特定于您正在使用的json模式库。通常,一个绝对的https://URL可以工作,但使用起来并不总是很方便。也许相对路径也适用于您(如./definition-1.json#/definitions/stringParameter(

相关内容

  • 没有找到相关文章

最新更新