⌘K 切换工具
FORMAT & CONVERT

XML → XSD架构生成器

从XML生成XSD架构定义。

local
xml-xsd

A best-effort schema inferred from one sample. Types default to xs:string.

§01 关于此工具

概述

粘贴一份 XML 文档,得到一份可以当起点用的 XSD(XML Schema Definition)。生成器会遍历 元素树,为每个元素名建立一个 xs:complexType,把子元素列进 xs:sequence, 把属性声明为 xs:string,并给同一父节点下重复出现的子元素标上 maxOccurs="unbounded"。当你接手一个没有架构的 XML 数据源, 而校验或代码生成总得有个起点时,这个工具很有用。

手写 XSD 的成本主要不在语法,而在把一份文档的结构完整地誊一遍; 这个工具替你做掉的正是这部分抄写。

使用方法

  1. 把文档粘贴到 XML 区域。
  2. XSD (inferred) 输出读取生成的架构——每次按键都会重新生成。
  3. 如果输入不是格式良好的 XML,这里会显示 Invalid XML 错误。

示例

  • <books><book id="1"><title>A</title></book></books> 会生成一份包含 booksTypebookType 两个复杂类型的架构,其中 title 元素类型为 xs:stringid 属性也声明为 xs:string

说明

同名元素被假定共用一个类型,命名空间不做分析。请把输出当作脚手架: 对着你真实的契约收紧数据类型、出现次数约束和枚举值。也就是说, 合理的用法是先生成骨架,再逐个把 xs:string 换成真实类型, 并给可能缺席的元素补上出现次数约束。

FAQ
我的 XML 会被发送到服务器吗?
不会。文档用浏览器内置的 DOMParser 解析,架构在本地生成,不上传任何内容,因此私有报文可以放心粘贴。
推断出的架构有多准确?
这是从一份样本尽力推断出的结构:元素名和属性名会被捕获,重复出现的子元素会得到 maxOccurs="unbounded",但所有叶子节点和属性的类型都默认为 xs:string。类型和约束需要你手工细化。
生成的 XSD 能识别可选元素吗?
不能。只有一份样本时没有办法区分必需和可选,所以观察到的每个元素都会出现在 sequence 里。可能缺席的元素,请自己补上 minOccurs="0"。