如何定义两个相互引用的字段而不会导致循环依赖 .
在下面的例子中,我希望min_percentage的最大值是max_percentage的最小值,max_percentage的最小值是min_percentage的最大值;
所以
"min_percentage": {
"type": "integer",
"minimum" : 1,
"maximum" : 99
}
"max_percentage": {
"type": "integer",
"minimum" : 2,
"maximum" : 150
}
变得像
"min_percentage": {
"type": "integer",
"minimum" : 1,
"maximum" : "#max_percentage#minimum"
}
"max_percentage": {
"type": "integer",
"minimum" : "#min_percentage#maximum",
"maximum" : 150
}
编辑:我认为一个可能的解决方案将是......
这可能是使用Schema Dependencies https://spacetelescope.github.io/understanding-json-schema/reference/object.html?highlight=default
我们只指定max_percentage,并使min_percentage成为依赖项,然后#min_percentage#maximum可以基于#max_percentage#minimum删除任何循环依赖项 .
"max_percentage": {
"type": "integer",
"minimum" : 2,
"maximum" : 150
}
"dependencies": {
"max_percentage": {
"properties": {
"min_percentage": {
"type": "integer",
"minimum" : 1,
"maximum" : "#max_percentage#minimum"
}
},
"required": ["min_percentage"]
}
}
但这显然不能完成.. Can JSON integer attributes be referenced?
谢谢 .
1 回答
在非循环图中,您总能找到Topological sorting . 同样重要的是,这也是另一种方式 . 这可以通过将每个引用视为有向图中的有向边来应用,其中每个节点都是文档中的某个变量 .
这告诉我们的是,应该可以以我们只需要引用的方式列出所有值,如果我们的依赖是非循环的,则永远不要引用文档中下面列出的元素 . 这当然是有代价的,因为不能保证这样的列表仍然能够遵循相同的分组 . 但是这里有一种可能的格式,具有上述列表格式:
正如拓扑排序所保证的那样,只要您的依赖图是非循环的,您将始终能够通过引入额外的'proxy variables'来找到这样的表示,例如
min_max_percentage
. 而且,相反,如果您的格式规范只允许反向引用,那么永远不会有循环依赖 .