如何在其他文件中使用 anyOf 定义引用 JSON 类型数组的模式定义
How to ref JSON schema definition of type array with anyOf definition in other files
我有一个 jsonschema
定义 definition-1.json
,如下所示。我有一个名为 inputs
的 array
类型的 属性,它指的是 anyOf
definitions
like
"inputs": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/definitions/stringParameter"
},
{
"$ref": "#/definitions/numberParameter"
},
{
"$ref": "#/definitions/booleanParameter"
},
{
"$ref": "#/definitions/jsonParameter"
},
{
"$ref": "#/definitions/fileParameter"
}
]
}
}
然后参数definitions
在同一个jsonschema
definition-1.json
中定义如下
"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
。
我可以理解 inputs
in definition-1.json
接受 anyOf
所有参数 definitions
。但是想知道我们如何才能实现 1:1 参数定义映射为 dummy-1.json
.
如果我的理解是正确的,您想从 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
)
我有一个 jsonschema
定义 definition-1.json
,如下所示。我有一个名为 inputs
的 array
类型的 属性,它指的是 anyOf
definitions
like
"inputs": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/definitions/stringParameter"
},
{
"$ref": "#/definitions/numberParameter"
},
{
"$ref": "#/definitions/booleanParameter"
},
{
"$ref": "#/definitions/jsonParameter"
},
{
"$ref": "#/definitions/fileParameter"
}
]
}
}
然后参数definitions
在同一个jsonschema
definition-1.json
"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
。
我可以理解 inputs
in definition-1.json
接受 anyOf
所有参数 definitions
。但是想知道我们如何才能实现 1:1 参数定义映射为 dummy-1.json
.
如果我的理解是正确的,您想从 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
)