【问题标题】:Generate Json schema from XML schema (XSD) [closed]从 XML 模式(XSD)生成 Json 模式 [关闭]
【发布时间】:2011-04-24 17:39:00
【问题描述】:

有人知道如何从现有的 XML 模式(XSD 文件)生成JSON schema 吗? 有没有可用的工具?

【问题讨论】:

  • 我认为真正的问题是,“是否可以在 JSON Schema 和 XML Schema 之间进行映射?”不是题外话。也许这个问题可以改写。
  • Falco Nogatz 在 2013 年完成了一篇理学士论文,结果是 xsd2json
  • 一种方法是从 XSD 到 Java 类,从 Java 类到 JSON 模式。详情dzone.com/articles/generating-json-schema-xsd

标签: xml json xsd transform jsonschema


【解决方案1】:

免责声明:我是Jsonix 的作者,这是一个强大的开源 XMLJSON 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 匹配生成的 Jsonix 映射。因此,如果您使用 Jsonix 进行 XMLJSON 转换,您应该能够使用生成的 JSON Schema 验证 JSON。它还包含来自原始 XML Schema 的所有必需元数据(如元素、属性和类型名称)。

免责声明:目前这是一项新的实验性功能。有一定的已知limitations and missing functionality。但我希望这会很快显现和成熟。

链接:

【讨论】:

  • JsonSchema 已死。有支持 openAPI 的计划吗?
  • @Lonzak 目前没有计划。但是乍一看 OpenAPI 规范,schema 部分不遵循 JSON Schema 规范吗?
  • 这不起作用,例如,Java 12
【解决方案2】:

JSON Schema 的功能并不等同于 XML Schema。一个有特点,另一个没有。

通常,您可以创建从 XML 到 JSON 的映射,然后再返回,但 XML 模式和 JSON 模式并非如此。

也就是说,如果您已将 XML 文件映射到 JSON,则很有可能创建一个 JSON 模式来验证该 JSON,其方式与 XSD 验证 XML 的方式几乎相同。但这不是直接映射。并且无法保证它验证 JSON 的方式与 XSD 验证 XML 的方式完全相同。

因此,除非这两个规范 100% 兼容,否则将验证系统从 XML/XSD 迁移到 JSON/JSON Schema 将需要人工干预。

【讨论】:

  • 我不明白这个。可以举个例子吗?
  • 假设你有类似 你可以定义一个映射来表示 Json 中的实体,例如: {"type": "man", name: 'Fred', pets: [{type: 'dog', name: 'Rex'}]} 但是,不能保证您可以将 XSD 映射到匹配同一组文档的 Json Schema
【解决方案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}.*$"
    }
  },

【讨论】:

  • 我已经使用npm install -g jgexml 安装了它。然后xsd2jsjon 不在路径中。我试过node C:\Users\Oliver\AppData\Roaming\npm\node_modules\jgexml\xsd2json.js。然而,这才刚刚回来。有命令行实用程序吗?
  • 命名不直观,但testxsd2j.js中有一个示例CLI
  • 不幸的是,它不起作用,收到错误 TypeError: Cannot set property 'additionalProperties' of null。 (例如,Jsonix 在同一个文件上工作得很好)
  • 如果您可以分享输入,请提出 github 问题。
【解决方案4】:

在此处复制您的 XML 架构并将 JSON 架构代码获取到可用于从 XML 架构生成 JSON 架构的online tools

【讨论】:

  • 我看到它可以从 XML 生成 XSD,但无论如何我看不到生成 JSON-Schema。
【解决方案5】:

没错,但是在使用 xmlspy 将 json 转换为 xml 之后,您可以使用 trang 应用程序 (http://www.thaiopensource.com/relaxng/trang.html) 从 xml 文件创建 xsd。

【讨论】:

  • 但方向错了
猜你喜欢
  • 2018-06-30
  • 1970-01-01
  • 2011-08-28
  • 2014-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多