JB *_*aux 71 xml json xsd transform jsonschema
有人知道如何从现有的XML模式(XSD文件)生成JSON模式吗?有没有可用的工具?
lex*_*ore 34
免责声明:我是Jsonix的作者,Jsonix是一个功能强大的开源XML < - > JSON JavaScript映射库.
今天我发布了新版本的Jsonix Schema Compiler,它具有新的JSON Schema生成功能.
我们以采购订单架构为例.这是一个片段:
<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>
Run Code Online (Sandbox Code Playgroud)
您可以使用提供的命令行工具编译此架构:
java -jar jsonix-schema-compiler-full.jar
-generateJsonSchema
-p PO
schemas/purchaseorder.xsd
Run Code Online (Sandbox Code Playgroud)
编译器生成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":""
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
现在,这个JSON Schema源自原始的XML Schema.它不完全是1:1的转换,但非常接近.
生成的JSON模式与生成的Jsonix映射匹配.因此,如果您使用Jsonix进行XML < - > JSON转换,您应该能够使用生成的JSON Schema验证JSON.它还包含来自原始XML Schema的所有必需元数据(如元素,属性和类型名称).
免责声明:目前这是一个新的实验性功能.存在某些已知限制和缺少功能.但我希望这能快速显现和成熟.
链接:
npm installJ E*_*lis 10
在最初询问此问题一年后,JSON Schema仍然是IETF草案文档.在撰写本文时(2011年10月18日),工作组正试图就规范草案4达成一致意见.尽管有一些推测性验证实现(请参阅http://json-schema.org/),但大多数工具供应商都没有在实现JSON Schema开发,编辑或转换的工具上投入太多精力.
JSON Schema不是与XML Schema等效的功能.有一个功能在一个但没有在另一个.
通常,您可以创建从XML到JSON的映射,然后再返回,但XML架构和JSON架构不是这种情况.
也就是说,如果您已将XML文件映射到JSON,则很有可能制作一个JSON模式,该模式以与XSD验证XML的方式几乎相同的方式验证JSON.但它不是直接映射.并且不可能保证它将验证JSON与XSD验证XML完全相同.
因此,除非使两个规范具有100%的功能兼容性,否则将验证系统从XML/XSD迁移到JSON/JSON模式将需要人工干预.
免责声明:我是 jgeXml 的作者。
jgexml具有基于 Node.js 的实用程序xsd2json,它在 XML 模式 (XSD) 和 JSON 模式文件之间进行转换。
与其他选项一样,它不是 1:1 转换,您可能需要手动编辑输出以改进 JSON 模式验证,但它已被用于表示 OpenAPI (swagger) 定义中的复杂 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}.*$"
}
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
96178 次 |
| 最近记录: |