有人知道如何从现有的XML架构(XSD文件)生成JSON schema吗? 有没有可用的工具?
答案 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。