我遇到了问题,我无法独自解决。所以我想在StackOverflow找到帮助。
我正在生成XSD并使用基于python的转换器将XSD转换为JSON模式。 JSON模式用于验证JSON代码,我不会详细解释。我的问题是,我有JSON代码来验证哪个包含一个包含包含整数的数组(复数)的数组。
JSON代码如下所示:
"factors": [
[12,3],
[1,14]
]
我知道如何为此编写JSON模式:
"factors": {
"items": {
"$ref": "#/definitions/factorscontent"
},
"type": "array"
}
...
"factorscontent": {
"items": {
"type": "integer"
},
"type": "array",
"properties": {}
}
这很好用。但我不知道如何在XSD中构建这个结构。有谁知道如何面对“数组中的数组中的整数”问题?
要添加的一件事:如果json代码看起来像这样:
"factors": [ "items":{ [12,3], [1,14] } ]
我不会有问题,因为我可以将“factors-array”的内容表达为
<xs:element name="items" type="integer" max0occurs="unbounded"/>
但是里面的数组结构只包含整数,没有元素!
答案 0 :(得分:1)
为了避免投票,请清理你的&#34;将&#34; JSON示例,因为"factors": [ "items":{ [12,3], [1,14] } ]
根本就不是格式良好的JSON。一个结构良好的可能看起来如下(当然,随意纠正它,以便它反映了你想要的东西,至少我们的工具会按照你所分享的XSD片段的方式生成它):
{
"factors": [
{
"items": [ 12, 3 ]
},
{
"items": [ 1, 14 ]
}
]
}
您的问题很容易回答:除非您依赖XSD中的专有标记,否则无法做到这一点。
在XML中,表示数据需要某种标记;文本节点和属性需要一个元素来保持&#34;他们。在XSD中,您可以使用<xsd:list/>
来建模整数数组;即使这样,使用它需要一个(n)(重复)元素使它成为一个数组的数组(或者,该元素可以包装在一个重复的合成器中,通常是<xsd:sequence/>
)。
由于这个必备元素,我知道的任何转换器都会自动创建对象(其中 object 是由JSON Schema Draft定义的)并使用元素和/或属性的名称来创建属性。您的数组数组没有对象,因此不允许任何属性,因此您不能依赖核心XSD结构进行此类转换。
我们已经针对真正的XSD对XD进行了三年的JSD转换,因此我们对此转换进行了相当多的改进。为了实现像你这样的场景,我们在<xsd:appinfo/>
中定义了一个专有标记:它指示转换引擎跳过创建属性,从而创建相关的对象。我建议你改变你的基于Python的解析器,以便它考虑某种类型的提示&#34;,无论是我们这样做的方式,还是通过创作模式(如果你想不加选择地应用它们)。