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

时间:2010-10-13 08:47:45

标签: xml json xsd transform jsonschema

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

6 个答案:

答案 0 :(得分:32)

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

今天我发布了新版Jsonix Schema Compiler,其中包含新的JSON Schema generation功能。

我们以Purchase Order架构为例。这是一个片段:

  <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 mappings以及matching 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 Schema派生自原始的XML Schema。它并不完全是1:1的转换,但非常接近。

生成的JSON Schema与generatd Jsonix映射匹配。因此,如果您使用Jsonix进行XML&lt; - &gt; JSON转换,您应该能够使用生成的JSON Schema验证JSON。它还包含来自原始XML模式的所有必需元数据(如元素,属性和类型名称)。

免责声明:目前,这是一项新的实验性功能。有一些已知的limitations and missing functionality。但我希望这能快速显现和成熟。

链接:

答案 1 :(得分:10)

最初询问此问题一年后,JSON Schema仍然是IETF草案文件。在撰写本文时(2011年10月18日),工作组正试图就规范草案4达成一致意见。虽然有一些推测性验证实现(参见http://json-schema.org/),但大多数工具供应商都没有在实现JSON Schema开发,编辑或转换的工具上投入太多精力。

答案 2 :(得分:6)

JSON Schema不是与XML Schema等效的功能。有一个功能在一个但不在另一个。

通常,您可以创建从XML到JSON的映射,然后再返回,但XML架构和JSON架构不是这种情况。

也就是说,如果您已将XML文件映射到JSON,则很有可能制作一个JSON模式,该模式以与XSD验证XML的方式几乎相同的方式验证JSON。但它不是直接映射。并且不可能保证它将验证JSON与XSD验证XML完全相同。

出于这个原因,除非两个规范兼容100%,否则将验证系统从XML / XSD迁移到JSON / JSON Schema将需要人工干预。

答案 3 :(得分:3)

免责声明:我是jgeXml的作者。

jgexml具有基于Node.js的实用程序xsd2json,它在XML模式(XSD)和JSON模式文件之间进行转换。

与其他选项一样,它不是1:1转换,您可能需要手动编辑输出以改进JSON模式验证,但它已被用于表示OpenAPI中的复杂XML模式(swagger)定义

另一个答案中给出的purchaseorder.xsd样本呈现为:

"PurchaseOrderType": {
  "type": "object",
  "properties": {
    "shipTo": {
      "$ref": "#/definitions/USAddress"
    },
    "billTo": {
      "$ref": "#/definitions/USAddress"
    },
    "comment": {
      "$ref": "#/definitions/comment"
    },
    "items": {
      "$ref": "#/definitions/Items"
    },
    "orderDate": {
      "type": "string",
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}.*$"
    }
  },

答案 4 :(得分:-1)

在此处复制您的XML架构&amp;获取online tools的JSON模式代码,这些代码可用于从XML模式生成JSON模式。

答案 5 :(得分:-4)

是的,但是在使用xmlspy将json转换为xml后,您可以使用trang应用程序(http://www.thaiopensource.com/relaxng/trang.html)从xml文件创建xsd。