Я пытаюсь придумать схему json для проверки документов такого типа:
{
"rootData": {
"parent1": [
{
"parent1": [
{
"leaf1": {
"attr": "value"
}
}
]
},
{
"parent2": [
{
"leaf1": {
"attr": "value"
}
}
]
},
{
"leaf1": {
"attr": "value"
}
}
]
},
"rootInfo": {
"i1": 1
}
}
Некоторая информация:
- "rootData" может содержать только один родитель, либо parent1, либо parent2
- parent1 / parent2 может быть переключен на parent2 / parent1 в любой позиции в иерархии
- без ограничения глубины: до тех пор, пока родитель содержит другого родителя, мы можем go глубже и глубже.
Мне кажется, я смог понять, как представить иерархическую природу встроенной родительской / дочерней части. Но я не знаю, как определить верхний уровень «rootData», точнее выбор между «parent1» или «parent2», так как я не могу использовать oneOf (я думаю ...)
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"parent1": {
"$id": "#parent1",
"type": "object",
"properties": {
"parent1": {
"$ref": "#node"
}
}
},
"parent2": {
"$id": "#parent2",
"type": "object",
"properties": {
"parent2": {
"$ref": "#node"
}
}
},
"leaf1": {
"$id": "#leaf1",
"type": "object",
"properties": {
"leaf1": {
"type": "object",
"properties": {
"attr": {
"type": "string"
}
},
"required": [
"attr"
]
}
}
},
"node": {
"$id": "#node",
"type": "array",
"items": {
"oneOf": [
{
"$ref": "#parent1"
},
{
"$ref": "#parent2"
},
{
"$ref": "#leaf1"
}
]
}
}
},
"type": "object",
"properties": {
"rootData": {
"properties": {
//I tried several things here minProperties/maxProperties or oneOf ... but I actually don't know how to reuse my previous parent1 or parent2 definitions ...
}
}
}
}
Любая помощь приветствуется!
Thx