从XML模式生成Json模式(XSD)
有谁知道如何从现有的XML模式(XSD文件)生成JSON模式 ? 有没有可用的工具?
免责声明 :我是Jsonix的作者, Jsonix是一个function强大的开源XML < – > JSON JavaScript映射库。
今天,我已经发布了Jsonix Schema编译器的新版本,并带有新的JSON Schema生成function。
以采购订单架构为例。 这是一个片段:
<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模式 。
下面是结果的样子(为简洁起见):
{ "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模式匹配生成的Jsonix映射。 因此,如果您使用Jsonix进行XML < – > JSON转换,则应该可以使用生成的JSON Schema来validationJSON。 它还包含源于XML Schema的所有必需元数据(如元素,属性和types名称)。
免责声明:目前这是一个新的实验性的function。 有一些已知的限制和缺less的function 。 但是我期待这样的performance和成熟非常快。
链接:
- 演示NPM的采购订单项目 – 只需检查和
npm install
- 文档
- 当前版本
- 在npmjs.com上的Jsonix Schema编译器
最初提出这个问题一年后,JSON Schema仍然是IETF草案文件。 截至撰写本文时(2011年10月18日),工作组正试图就规范草案4达成一致。 虽然有几个推测validation实现(请参阅http://json-schema.org/ ),但大多数工具供应商并没有投入太多的精力到实现JSON Schema开发,编辑或转换的工具上。
JSON模式不打算与XML模式等同使用。 有一个function,但没有在其他。
一般而言,您可以创build一个从XML到JSON的映射,然后再返回,但对于XML模式和JSON模式,情况并非如此。
也就是说,如果您已经将XML文件映射到JSON,那么很可能制作一个JSON模式,以与XSDvalidationXML几乎相同的方式validationJSON。 但这不是一个直接映射。 而且不可能保证它将validationJSON完全一样的XSDvalidationXML。
出于这个原因,除非这两个规范是100%兼容的,否则将validation系统从XML / XSD迁移到JSON / JSON模式将需要人为干预。
免责声明:我是jgeXml的作者。
jgexml具有基于Node.js的实用程序xsd2json
,它在XML模式(XSD)和JSON模式文件之间进行转换。
与其他选项一样,这不是1:1转换,您可能需要手动编辑输出以改进JSON模式validation,但是它已被用于在OpenAPI(扩展器)定义中表示复杂的XML模式。
在另一个答案中给出的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}.*$" } },
将XML模式复制到此处,然后将JSON模式代码转换为可用于从XML模式生成JSON模式的在线工具 。
是的,但在将json转换为xml的xml后,您可以使用trang应用程序(http://www.thaiopensource.com/relaxng/trang.html)从xml文件创buildxsd。;