将 xs:choice 表示为 JSON 模式

Mic*_*ael 2 xml json xsd jsonschema

让我热衷于 JSON Schema 的oneOf.

我想生成 XML 格式的 JSON 版本,并使用 JSON 模式验证基本方面(我知道会有一些差异)。

我有一个 XML 架构概念,您可以在其中指定某个实体的名称或 ID:

<xs:element name="Entity" type="test:EntityType" />
    <xs:complexType name="EntityType">
        <xs:choice>
            <xs:element name="EntityID" />
            <xs:element name="EntityName" />
        </xs:choice>
    </xs:complexType>
Run Code Online (Sandbox Code Playgroud)

在相应的 JSON 模式中,我无法确定将对象放在哪里oneOf

JSON 模式示例中,您似乎应该将完整的模式放入 中oneOf,对吗?在一般情况下这应该是什么样子?有谁记录了 XSD 和 JSON 模式之间的异同以供参考吗?

ero*_*osb 5

我自己没有尝试过,但我认为你需要这样的东西:

{
    "allOf" : [
        {
            "type" : "object",
            "properties" : {
                "entityName" : {"type" : "string"},
                "entityID" : {"type" : "integer"}
            }
        },
        {
            "oneOf" : [
                {
                    "required" : ["entityName"]
                },
                {
                    "required" : ["entityID"]
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

因此,在顶层之后,"allOf"您首先描述基本结构,然后用 a"oneOf"表达您的选择。

  • 感谢@erosb - 未经测试的答案,效果非常好! (2认同)