问题描述
我有一个 jsonschema
定义 deFinition-1.json
如下。我有一个名为 inputs
的 array
类型的属性,它引用 anyOf
deFinitions
之类的
"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"
]
}
...
}
现在我想在我的其他架构 deFinitions
中引用这个参数 dummy-1.json
,如下所示
{
"$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
中的 deFinition-1.json
接受 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
)