一尘不染

从XML模式(XSD)生成Json模式

json

有人知道如何从现有的XML模式(XSD文件)生成JSON模式吗?有没有可用的工具?


阅读 851

收藏
2020-07-27

共1个答案

一尘不染

免责声明
:我是Jsonix的作者,Jsonix是一个功能强大的开源XML
<-> JSON JavaScript映射库。

今天,我发布了具有新JSON Schema生成功能的新版本的Jsonix Schema
Compiler

让我们以采购订单模式为例。这是一个片段:

  <xsd:element name="purchaseOrder" type="PurchaseOrderType"/>

  <xsd:complexType name="PurchaseOrderType">
    <xsd:sequence>
      <xsd:element name="shipTo" type="USAddress"/>
      <xsd:element name="billTo" type="USAddress"/>
      <xsd:element ref="comment" minOccurs="0"/>
      <xsd:element name="items"  type="Items"/>
    </xsd:sequence>
    <xsd:attribute name="orderDate" type="xsd:date"/>
  </xsd:complexType>

您可以使用提供的命令行工具来编译此架构:

java -jar jsonix-schema-compiler-full.jar
    -generateJsonSchema
    -p PO
    schemas/purchaseorder.xsd

编译器会生成Jsonix映射以及匹配的JSON Schema

结果如下所示(为简洁起见编辑):

{
    "id":"PurchaseOrder.jsonschema#",
    "definitions":{
        "PurchaseOrderType":{
            "type":"object",
            "title":"PurchaseOrderType",
            "properties":{
                "shipTo":{
                    "title":"shipTo",
                    "allOf":[
                        {
                            "$ref":"#/definitions/USAddress"
                        }
                    ]
                },
                "billTo":{
                    "title":"billTo",
                    "allOf":[
                        {
                            "$ref":"#/definitions/USAddress"
                        }
                    ]
                }, ...
            }
        },
        "USAddress":{ ... }, ...
    },
    "anyOf":[
        {
            "type":"object",
            "properties":{
                "name":{
                    "$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/QName"
                },
                "value":{
                    "$ref":"#/definitions/PurchaseOrderType"
                }
            },
            "elementName":{
                "localPart":"purchaseOrder",
                "namespaceURI":""
            }
        }
    ]
}

现在,此JSON模式是从原始XML模式派生的。它不完全是1:1转换,但是非常非常接近。

生成的JSON模式与生成的Jsonix映射匹配。因此,如果将Jsonix用于XML <->
JSON转换,则应该能够使用生成的JSON模式验证JSON。它还包含来自原始XML模式的所有必需元数据(例如元素,属性和类型名称)。

免责声明:
目前,这是一个新的实验性功能。有某些已知的限制和缺少的功能。但我希望这会很快显现并成熟。

链接:

2020-07-27