我有一个jsonschema
定义definition-1.json
,如下所示。我有一个array
类型的属性inputs
,它指的是类似的anyOf
definitions
"inputs": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/definitions/stringParameter"
},
{
"$ref": "#/definitions/numberParameter"
},
{
"$ref": "#/definitions/booleanParameter"
},
{
"$ref": "#/definitions/jsonParameter"
},
{
"$ref": "#/definitions/fileParameter"
}
]
}
}
然后在相同的jsonschema
definition-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
(