我有以下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"]
}
]
}
答案 0 :(得分:2)
如果您要为您的问题提供更多背景信息,这将有助于其他人。首先,您的示例来自Understanding JSON Schema指南的第30页(打印版本)。您的JSON是JSON模式(草案#4)。
因为你在谈论模式,所以我把你的问题看作模型。为了更清楚,我认为你的问题类似于许多年前提出的问题:可以使用UML来表示XSD结构吗?
我实际上使用XSD来描述JSON结构;我们在XSD和JSON模式之间进行了自动转换(草案#4),因为我自己使用XSD作为数据建模语言。
您的特定示例没有自然的XSD等效项。从本质上讲,我的意思是XML也是有意义的,而“通用”的XML-to-JSON转换会产生预期的结果。
如果我们拿走简单的东西,例如建模为列表的简单类型:
<xsd:simpleType name="array">
<xsd:list itemType="xsd:float"/>
</xsd:simpleType>
基本上与(逗号分隔符除外)相同:
{
"type": "array",
"items": {
"type": "number"
}
}
那么我的答案实际上是关于一个“配置文件”,转换工具将使用该配置文件来获取XSD中表示的模型的语义(换句话说,我们不会在这里挂起XML文档),使用JSON模式表示相同。
我们的XSD-to-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>