【问题标题】:How to represent json array in XSD如何在 XSD 中表示 json 数组
【发布时间】:2015-03-18 06:44:30
【问题描述】:

我有以下 json ,如何在 XSD 中表示。这是一个 json 元组,我在 XSD 中找不到有效的构造来表示这种类型的 json 结构。

{
"type": "array",
"items": [
{
"type": "number"
},
{
"type": "string"
},
{
"type": "string",
"enum": ["Street", "Avenue", "Boulevard"]
},
{
"type": "string",
"enum": ["NW", "NE", "SW", "SE"]
}
]
}

【问题讨论】:

标签: arrays xml json xsd


【解决方案1】:

如果您能为您的问题提供更多背景信息,将会对其他人有所帮助。首先,您的示例来自Understanding JSON Schema 指南的第 30 页(印刷版)。您的 JSON 是 JSON 模式(草案 #4)。

因为您在谈论模式,所以我认为您的问题是关于模型的。更清楚地说,我认为您的问题类似于多年前提出的问题:可以使用 UML 来表示 XSD 结构吗?

我确实使用 XSD 来描述 JSON 结构;我们在 XSD 和 JSON 模式之间进行了自动转换(草案 #4),因为我自己使用 XSD 作为数据建模语言。

您的特定示例没有自然的 XSD 等效项。当然,我的意思是与 XML 一样有意义,并且“通用”XML 到 JSON 的转换会产生预期的结果。

如果我们去掉简单的东西,比如一个简单的类型建模为一个列表:

<xsd:simpleType name="array">
    <xsd:list itemType="xsd:float"/>
</xsd:simpleType>

基本相同(逗号分隔符除外):

{
    "type": "array",
    "items": {
        "type": "number"
    }
}

那么我的回答实际上是关于一个“配置文件”,转换工具将使用该配置文件将 XSD 中表示的模型的语义(换句话说,我们在这里不关注 XML 文档)放入同样使用 JSON 模式表示。

我们的 XSD 到 JSON 架构配置文件使用复杂类型来表示对象和数组。当应用于复杂类型的“原型”是“数组”时,以下模型与您的 JSON 模式完美匹配。

<xsd:complexType name="address">
    <xsd:annotation>
        <xsd:appinfo>
            <xsd2json:type>array</xsd2json:type>
        </xsd:appinfo>
    </xsd:annotation>
    <xsd:sequence>
        <xsd:element name="StreetNumber" type="xsd:float"/>
        <xsd:element name="StreetName" type="xsd:string"/>
        <xsd:element name="StreetType">
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:enumeration value="Street"/>
                    <xsd:enumeration value="Avenue"/>
                    <xsd:enumeration value="Boulevard"/>                        
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:element>
        <xsd:element name="StreetDirection">
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:enumeration value="NW"/>
                    <xsd:enumeration value="NE"/>
                    <xsd:enumeration value="SW"/>
                    <xsd:enumeration value="SE"/>                       
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:element>
    </xsd:sequence>
</xsd:complexType>

【讨论】:

  • 是的,它来自 json 架构指南,我有将 json 架构转换为 XSD 以用于集成产品的要求。是否有任何 git hub 项目或开源项目可以做到这一点。在转换期间我们应该弥补元素名称。
  • 大多数时候,您不必编名;对于这个特定的例子,是的。我说“大多数”,因为 JSON 模式论文确实展示了异构数组的一个很好的例子;但是,按照大多数数据建模标准,这很糟糕。它很紧凑,是的。不过,实例文档的可读性不会那么高……我不知道有任何开源项目可以按照我的描述进行操作。
猜你喜欢
  • 1970-01-01
  • 2021-12-28
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-03
  • 1970-01-01
相关资源
最近更新 更多