难以对齐 JSONschema 和 XSD 等效项

Posted

技术标签:

【中文标题】难以对齐 JSONschema 和 XSD 等效项【英文标题】:Difficulty aligning JSONschema and XSD equivalent 【发布时间】:2016-12-01 09:36:15 【问题描述】:

我有一个问题,我无法自己解决。所以我想在 *** 寻求帮助。

我正在生成 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"/> 

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

【问题讨论】:

要补充一点:如果 json 代码看起来像这样: "factors": [ "items":[12,3], [1,14] ] 我不会有一个问题,因为我可以将“因子数组”的内容表示为 但是里面的数组结构只包含整数,没有元素! 所以你的问题可以改写为如何在 XSD 中定义一个二维数组。 当然你的第一个 Json 结构是一个 int[][] 【参考方案1】:

为避免投票,请清理您的“愿意”JSON 示例,因为 "factors": [ "items": [12,3], [1,14] ] 根本不是格式正确的 JSON。格式良好的文件可能如下所示(当然,请随时更正它以反映您想要的内容,至少我们的工具会按照您共享的 XSD sn-p 的方式生成它):


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

您的问题有一个简单的答案:没有办法做到这一点,除非您依赖 XSD 中的专有标记。

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

由于这个必备元素,我知道的任何转换器都会自动创建对象(其中 object 由 JSON Schema Draft 定义)并使用元素和/或属性的名称来创建一个属性。您的数组数组没有对象,因此不允许使用任何属性,因此您不能依赖核心 XSD 构造进行这种转换。

三年来,我们一直在针对真正的 XSD 进行 XSD 到 JSD 的转换,因此我们对这种转换进行了相当多的改进。为了实现像您这样的场景,我们在&lt;xsd:appinfo/&gt; 中定义了一个专有标记:它指示转换引擎跳过创建属性以及关联对象的创建。我建议您更改基于 Python 的解析器,以便它考虑某种“提示”,无论是我们这样做的方式,还是通过创作模式(如果您希望不加选择地应用它们)。

【讨论】:

非常感谢您的详细而有帮助的回答。我感谢你的努力。因为 xsd 和 json 模式并不难理解,所以我已经在想“它可能不起作用”。所以现在我知道了。而且我认为,最简单的方法是针对特定问题更改 python 脚本,就像你推荐的那样。

以上是关于难以对齐 JSONschema 和 XSD 等效项的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将 JSON Schema 转换为 XSD? [关闭]

JsonSchema和JsonSchemaValidator

是否有与 xsd.exe 等效的 JSON?

[Grid.IsSharedSizeScope Windows 8等效项

JSON:对于 JSON 和 JSON Schema,是不是有等效的 Schematron? (即一种表示协约束的JSON技术)

JSON Schema 中的附加项和附加属性有啥区别?