2016-07-27 72 views
1

我有一个问题,我无法自己解决。所以我试图在StackOverflow中寻求帮助。难以对齐JSONschema和XSD等价物

我生成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] } ] 

我不会有问题,因为我可以表达“的因素阵列”作为

内容
<xs:element name="items" type="integer" max0occurs="unbounded"/> 

但是里面的数组结构只包含整数,没有元素!

+0

有一点补充: 如果JSON代码应该是这样的: “因素”: “项目”:{[12,3],[1,14]}] 我不会有一个问题,因为我可以将“因素数组”的内容表示为 但是数组结构中只包含整数,没有元素! – tharndt

+0

所以你的问题可以重写为如何在XSD中定义一个二维数组。 –

+0

它真的是2D吗? – tharndt

回答

1

为了避免投下意见,请清理您的“would”JSON示例,因为"factors": [ "items":{ [12,3], [1,14] } ]根本不是格式正确的JSON。一个格式良好的可能看起来如下(当然,可以随意纠正它,以便它反映出你想要的内容,至少我们的工具会按照你共享的XSD代码片段的方式生成它):

{ 
    "factors": [ 
     { 
      "items": [ 12, 3 ] 
     }, 
     { 
      "items": [ 1, 14 ] 
     } 
    ] 
} 

您的问题有一个简单的答案:除非您依赖XSD中的专有标记,否则无法执行此操作。

在XML中,表示数据需要某种标记;一个文本节点和一个属性需要一个元素来“保留”它们。在XSD中,您可以使用<xsd:list/>来模拟一个整数数组;即使这样,使用它也需要一个(n)(重复)元素使其成为一个数组数组(或者,该元素可能会被包装在重复合成器中,通常为<xsd:sequence/>)。

因为这必须具备的元件的,我知道将自动创建的对象的任何转换器(其中对象是通过JSON架构草案所定义的),并使用元素的名称和/或属性来创建属性。你的数组数组没有对象,因此没有属性是允许的,因此你不能依赖这种转换的核心XSD结构。

对于真正的XSD,我们一直在对XSD进行JSD转换三年,所以我们对此转换进行了相当多的改进。为了实现像您这样的场景,我们在<xsd:appinfo/>中定义了专有标记:它指示转换引擎跳过创建属性并关联对象创建。我建议你改变你的基于Python的解析器,以便它考虑某种“提示”,无论是我们做的方式,还是通过创作模式(如果你想不加区分地应用它们)。

+0

非常感谢你的详细和有用的答案。我感谢你的努力。因为xsd和json模式不难理解,所以我已经在考虑“这可能不起作用”。所以现在我知道了。 我认为,最简单的方法就是改变特定问题的python脚本,就像你推荐的那样。 – tharndt