从XML模式生成Json模式(XSD)
最初问这个问题一年后,JSON Schema仍然是IETF草案文档。截至撰写本文时(2011年10月18日),工作组正试图就规范草案4达成一致。虽然有几个推测性验证实现(请参阅http://json-schema.org/),但大多数工具供应商并未投入太多精力实施JSON模式开发,编辑或转换工具。
最新的IETF草案文件于2013年8月到期,似乎没有人再追求这一努力。 – 2014-03-28 23:17:53
我认为这是旧的,但即使在历史背景下,这也不能回答所问的问题。 – vossad01 2017-08-25 16:37:45
是的,但在将json转换为xml和xml后,您可以使用trang应用程序(http://www.thaiopensource.com/relaxng/trang.html)从xml文件创建xsd。
但这是错误的方向 – vipw 2012-10-05 09:39:55
JSON Schema不打算与XML Schema等同使用。有一个功能,但没有在其他功能。
一般来说,您可以创建一个从XML到JSON的映射,然后再返回,但XML模式和JSON模式并非如此。这就是说,如果你已经将XML文件映射到JSON,那么很可能制作一个JSON Schema来验证JSON,几乎和XSD验证XML一样。但它不是一个直接映射。而且不可能保证它将验证JSON与XSD验证XML完全相同。由于这个原因,除非这两个规范是100%兼容的特性,否则将验证系统从XML/XSD迁移到JSON/JSON Schema需要人工干预。
我不明白这一点。你能举个例子吗? – Fenil 2016-07-07 14:18:02
比方说,你有什么样 您可以定义的映射来表示JSON中的实体,例如: {“类型” :“man”,name:'Fred',pets:[{type:'dog',name:'Rex'}]} 但是,不能保证您可以构建XSD到Json Schema的映射,同一套文件 – 2016-07-08 02:14:13
免责声明:我是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模式是从原始的XML Schema的。这不完全是1:1的转变,但非常接近。
生成的JSON模式匹配生成的Jsonix映射。因此,如果您使用JSONix进行XML < - > JSON转换,您应该能够使用生成的JSON Schema来验证JSON。它还包含源于XML Schema的所有必需元数据(如元素,属性和类型名称)。
声明:目前这是一个新的实验性功能。有一定知道limitations and missing functionality。但是我期待这种体现和成熟非常快。
链接:
免责声明:我jgeXml的作者。
jgexml具有基于Node.js的实用程序xsd2json
,它在XML模式(XSD)和JSON模式文件之间进行转换。
与其他选项一样,这不是1:1的转换,您可能需要手动编辑输出以改进JSON模式验证,但它已被用于表示OpenAPI中的复杂XML模式(招摇)定义。
"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}.*$"
}
},
我认为真正的问题是“是否可以在JSON模式和XML模式之间进行映射?”不是无关紧要的。也许这个问题可能会被重写。 – 2014-08-15 19:34:39
Falco Nogatz在2013年做了一篇BSc论文,导致了[xsd2json](https://github.com/fnogatz/xsd2json)。 – supervacuo 2014-11-04 18:01:09