有人知道如何从现有的XML模式(XSD文件)生成JSON模式吗?有没有可用的工具?
有人知道如何从现有的XML模式(XSD文件)生成JSON模式吗?有没有可用的工具?
Answers:
免责声明:我是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 Schema验证JSON。它还包含来自原始XML模式的所有必需元数据(例如元素,属性和类型名称)。
免责声明:目前,这是一个新的实验性功能。存在某些已知限制和功能缺失。但我希望这会很快显现并成熟。
链接:
npm install
schema
部分内容是否遵循JSON Schema规范?
JSON Schema不应与XML Schema等效。其中一个具有功能,而另一不具有。
通常,您可以创建从XML到JSON的映射,然后再返回,但是对于XML模式和JSON模式则不是这种情况。
就是说,如果您已将XML文件映射到JSON,则很有可能设计出一种JSON模式,以与XSD验证XML几乎相同的方式来验证JSON。但这不是直接映射。并且不可能保证它将与XSD验证XML完全相同地验证JSON。
因此,除非使两个规范100%兼容,否则将验证系统从XML / XSD迁移到JSON / JSON Schema将需要人工干预。
免责声明:我是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}.*$"
}
},
npm install -g jgexml
。那么xsd2jsjon
是不是在路径。我试过了node C:\Users\Oliver\AppData\Roaming\npm\node_modules\jgexml\xsd2json.js
。但是,这刚刚返回。有命令行实用程序吗?
testxsd2j.js