ToolConvoyToolConvoyv2.6
DEV

JSON 转 XSD — 从 JSON 生成 XML Schema

从 JSON 数据生成 XML Schema (XSD)。包含 complexType、sequence、restriction,完全在浏览器中运行,无需上传。

● 本地运行 · 在您的标签页中生成页面加载以来工具发出的网络请求:0 次

JSON to XSD

Generate XML Schema (XSD) from JSON data. Generates XSD schema elements with inferred types (xs:string, xs:integer, xs:boolean, etc.). Works entirely in your browser.

XML Schema (XSD) 是基于 XML 的系统所使用的正式契约语言。一个 XSD 文件定义了:合法 XML 文档可以包含哪些元素、它们必须按什么顺序出现、取值必须是什么类型、可以重复多少次。从样例 XML 或 JSON 文档手写一份 XSD,是接入任何要求 schema 校验的系统的第一步 —— SOAP Web 服务、政府数据交换、金融交易格式、合规申报,都是如此。本 JSON 转 XSD 生成器遍历 JSON 结构,输出一份能够校验同源 JSON 转 XML 结果的 XSD。

XSD 生成中「不那么显然」的架构选择是 schema 组合风格。Russian Doll(一个全局元素,所有其他类型都嵌套在内部)最简单,也最常用 —— 它产出一份自包含的 XSD 文件,正好校验样例 JSON 的精确结构。Salami Slice(每个元素都全局,可通过 ref 引用)和 Venetian Blind(类型全局、元素本地)复用性更强,但读起来更复杂、维护成本也更高。对于从样例文档做一次性 schema 生成,Russian Doll 是正确的默认。当生成出的类型需要在多个 schema 之间复用,或 schema 是更大 WSDL / XSD 生态的一部分时,其他风格才是合适的选择。

广告

使用方法

  1. 粘贴你的 JSON

    把 JSON 对象放入输入框。生成器遍历整个结构,并为每个嵌套对象形态产出包含 complexType 定义的 XML Schema 文档。

  2. 选择 schema 风格

    在 Russian Doll(嵌套类型,最常用)、Salami Slice(全局类型 + ref 引用)和 Venetian Blind(全局类型,本地元素)之间切换。默认是 Russian Doll。

  3. 复制或下载 XSD

    把 XSD 复制到剪贴板,或下载为 .xsd 文件。输出符合 XML Schema 1.0 规范,可由 xmllint、Xerces 或任何支持 schema 校验的 XML 解析器验证通过。

常见问题

应该选哪种 schema 风格?

Russian Doll 只有一个全局元素(根),所有其他类型都嵌套在它内部的匿名 complexType 中 —— 最简单、最常用,也最难复用。Salami Slice 把每个元素都设为全局,类型可复用。Venetian Blind 把类型设为全局、元素设为本地 —— 一种折中方案。先从 Russian Doll 开始。

JSON 类型是如何映射到 XSD 类型的?

JSON 字符串映射为 `xs:string`,可附带 minLength/maxLength 约束。数字根据样本中是否含小数点映射为 `xs:integer` 或 `xs:decimal`。布尔值映射为 `xs:boolean`。数组映射为 `xs:complexType`,并在其内部以 `sequence` 排列元素类型。

支持 XML 命名空间吗?

支持 —— 开启「targetNamespace」开关即可输出带可配置命名空间 URI 和 `xmlns:tns` 前缀的 XSD。生成的 XML 实例必须使用相同的命名空间才能通过校验。

可选元素是如何处理的?

在部分数组成员中缺失的元素会在 schema 中标注为 `minOccurs="0"`,即可选。每个数组成员中都存在的元素标注为 `minOccurs="1"`(必选)。开启「all optional」开关可以让所有元素都变为可选。

能生成枚举约束吗?

可以 —— 开启「enumerations」开关,工具会检测字符串字段中反复出现的固定取值,并生成带 `xs:enumeration` 取值列表的 `xs:restriction`。例如样本中 status 字段反复出现 'active'、'pending'、'closed',就会被映射成受限字符串。

限制说明

  • 不支持 XSD 1.1 特性输出符合 XML Schema 1.0 规范。XSD 1.1 的断言(assertions)、条件类型分配(conditional type assignment)和开放内容(open content)均不支持。如需这些特性,请手动后处理。
  • 不生成 key/keyref 约束schema 不会从 JSON 数据中推断主键或外键关系。如果你的 schema 需要引用完整性,请手动添加 `xs:key` 和 `xs:keyref` 约束。
  • 类型宽度依赖样本maxLength 和 minLength 约束根据样本中观察到的最长和最短值推断。如果你的 API 可能返回更长的字符串,请手动调整 maxLength。

平台说明

macOS
生成的 XSD 可用 xmllint(macOS 自带)和任何支持 schema 校验的 XML 编辑器验证。在编写 API 文档时,本浏览器工具适合一次性 schema 生成。
Windows
XSD 可用 Visual Studio 的 XML Schema Explorer 和 XMLSpy 验证。当手头没有完整 IDE 时,本工具适合一次性生成。
Linux
命令行场景下,可用 `xjc`(JAXB)和 `xsdata` 生成 XML Schema。当手头没有 Java 或 Python 工具链时,本浏览器工具是一次性生成的最佳选择。
Web
完全在客户端运行。生成即点即得。
广告
广告