如何使用XSD表示指定JSON文档的结构
适配方案及可直接使用的XSD示例
XSD是用于描述XML结构的约束语言,你需要先将JSON结构映射为固定格式的XML,再编写对应的XSD约束即可完成适配。
映射规则说明
和你给出的JSON结构对应的XML结构设计如下:
- 根节点为
Dataset - 子节点
Fields存储所有字段名,每个字段名用Field节点存储 - 子节点
Rows存储所有行数据,每一行用Row节点存储,每行的每个单元格值用Value节点存储
对应示例JSON的XML样例
你给出的JSON转换后对应的XML结构如下,可用于校验XSD是否适配:
<?xml version="1.0" encoding="UTF-8"?> <Dataset> <Fields> <Field>Deal State</Field> <Field>PTI</Field> <Field>LTV</Field> <Field>assetpropevercount</Field> <Field>evictioncount</Field> <Field>inquirynonshortterm12month</Field> <Field>addronfilecount</Field> </Fields> <Rows> <Row> <Value>text</Value> <Value>0</Value> <Value>0</Value> <Value>0</Value> <Value>0</Value> <Value>0</Value> <Value>0</Value> </Row> </Rows> </Dataset>
可用XSD代码
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- 根节点定义 --> <xs:element name="Dataset"> <xs:complexType> <xs:sequence> <!-- Fields节点定义:存储所有字段名 --> <xs:element name="Fields"> <xs:complexType> <xs:sequence> <xs:element name="Field" type="xs:string" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <!-- Rows节点定义:存储所有行数据 --> <xs:element name="Rows"> <xs:complexType> <xs:sequence> <xs:element name="Row" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="Value" type="xs:string" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
落地建议
- 先固化JSON转XML的转换逻辑,不要随意调整节点名称、层级,否则XSD会校验失败,简单的转换脚本用Python、JavaScript等常用语言都能在10行代码内实现
- 可以根据实际业务场景调整
Value节点的数据类型,比如数值类字段可以把type="xs:string"改为type="xs:integer"或者type="xs:decimal",也可以给特定字段加长度、取值范围约束 - 如果你的工具要求XSD中明确定义所有字段名,而非动态字段,可把
Field节点改为固定名称的子节点,删除maxOccurs="unbounded"属性,对应调整XML映射规则即可 - 转换完成后可以先做一轮本地校验,确认结构和约束符合要求再导入目标工具
内容的提问来源于stack exchange,提问作者Marshall Alan Hill
相关产品推荐
相关产品推荐

