有没有工具可以从XML实例文档生成XSD模式?

152

我正在寻找一种工具,可以将一个XML实例文档转换成相应的XSD模式。

我知道生成的XSD模式与手动创建的模式相比存在局限性(它可能无法处理可选或重复元素,或数据约束),但至少可以作为快速起点。

10个回答

69

Microsoft XSD推断工具 是一个好的,免费的解决方案。许多XML编辑工具,例如XmlSpy(由@Garth Gilmour提到)或OxygenXML Editor也具有该功能。然而它们相当昂贵。BizTalk Server也有一个XSD推断工具。

编辑:我刚刚发现了.net XmlSchemaInference 类,所以如果您在使用.net,您应该考虑使用它。


1
哇,几个月后你向我指出了一个快速进行XDR到XSD转换的好方法!谢谢! - bethlakshmi
6
我很难找到这个工具(xsd.exe)的下载链接,但是我发现它已经在我的系统中了,位于C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin。如果有帮助的话,我想分享一下。 - oob
2
如果有人没有安装Visual Studio,这里提供xsd的另一个下载链接:http://juliankay.com/development/download-xsd-exe/ - M.D.
5
在Windows 7上,目录似乎发生了变化,其中包括xsd.exe。我发现它在许多Microsoft SDKs目录中(因此似乎不再必须依赖于Visual Studio?),其中包括这个目录: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools。 为了避免出现“路径中有非法字符”的错误,我必须在包含xml文件的目录中运行它,但这可能是由于我的文件名太长所致。 - Yahoo Serious
在2021年,我可以通过在此处搜索C:\ Program Files(x86)\ Microsoft SDKs \ Windows来找到我的Windows-10上的xsd.exe! - joedotnot
显示剩余2条评论

60
你可以使用一个开源跨平台的选项:来自Apache XMLBeans 的inst2xsd。我发现它非常有用且易于使用。
只需下载、解压缩并运行即可(需要Java)。

3
哇塞,这比那些PowerShell的狗屁玩意好多了!特别是因为我没有XSD文件! - Chloe
IntelliJ 的免费社区版也具有这样的功能:http://www.jetbrains.com/idea/webhelp/generating-xml-schema-from-instance-document.html - Nick
3
运作得非常好:cd <xml_bean_bin_directory>;./inst2xsd -design ss -simple-content-types smart -enumerations 4 <input_file.xml> -outDir <output_Directory> - diaryfolio
1
https://archive.apache.org/dist/xmlbeans/binaries/ - magnetik
4
请注意,XMLBeans已经转移到了http://attic.apache.org/,这是退役的Apache项目的主页。换句话说,它自2012年以来没有更新过。 - Magnilex
显示剩余3条评论

57

Trang 是最佳选择。它是开源且跨平台的(需要使用Java)。

以下是从 Trang 网站上摘录的内容:

Trang 可以在不同的XML模式语言之间进行转换,支持以下语言:

  • RELAX NG(XML语法)
  • RELAX NG 紧凑语法
  • XML 1.0 DTDs
  • W3C XML Schema

任何一种支持的模式语言编写的模式都可以转换为其他支持的模式语言,但仅支持将 W3C XML Schema 输出为格式,不支持输入。

Trang 还可以根据一个或多个示例 XML 文档推断出模式。

下载链接


1
Trang也是集成到OxygenXML中的工具,用于从一个或多个XML文档中进行XSD推断。在这里的第一次尝试中,它似乎运行良好。 - redcalx
5
如果你只需要从 XML 文件生成 XSD,我认为 trang 是最好、最快和最简单的工具。 - kriver
4
Trang的文档有些简略。要生成一个模式,请运行“$ trang file.xml schema.xsd”。 - Joe Mornin
1
在Windows上运行:java -jar trang.jar file.xml schema.xsd - Alexey Obukhov
1
在我的 XML 示例中出现了相同形式的子结构,Trang 在检测到重复并生成我所需的最小 XSD 方面做得非常好。非常棒! - Tomislav Nakic-Alfirevic

19

在VS2010中,如果您将一个XML文件加载到编辑器中,请单击XML菜单>>创建架构。


3
而在更高版本中 - Jay Jay Jay

13

这里还有一个名为XML Schema Learner的工具,可以在Github上获得。

它可以接受多个xml文件并从所有这些文件中提取出一个通用的XSD模式


1
请注意,此工具是用PHP编写的,因此设置起来并不简单。 - 79E09796
6
使用sudo apt-get install php5-cli安装CLI PHP,然后运行./learn --help命令。我并不真正看出它与用Java、Python或Ruby编写的工具有什么区别 :) - edorian
1
刚在Windows下尝试了一下,使用PHP 5.4非常顺利,无需安装。PHP和XML Schema学习者只需解压缩并使用完整路径执行即可 ;) - vak
关于locality字段的小注释:如果一个字段名在XML中被多次引用,且这些引用指向不同的元素,则需要更大的locality值,例如root/itemroot/something/item指向不同类型,则至少需要--locality 2 - Shadi

11

如果您已经安装了.NET,那么一个生成XSD模式和类的工具已经默认包含在其中。


对于我来说,XSD工具安装在以下结构下。这可能会因为您的安装目录而有所不同。

C:\Program Files\Microsoft Visual Studio 8\VC>xsd
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 2.0.50727.42]
Copyright (C) Microsoft Corporation. All rights reserved.

xsd.exe -
   Utility to generate schema or class files from given source.

xsd.exe <schema>.xsd /classes|dataset [/e:] [/l:] [/n:] [/o:] [/s] [/uri:]
xsd.exe <assembly>.dll|.exe [/outputdir:] [/type: [...]]
xsd.exe <instance>.xml [/outputdir:]
xsd.exe <schema>.xdr [/outputdir:]

通常情况下,此工具生成的类和模式效果相当不错,尤其是如果您将要在 .Net 语言中使用它们。

我通常会取得我需要的 XML 文档,使用 /o:<your path> 标志将其通过 XSD 工具转换为模式(xsd),然后使用 /classes /L:VB (或 CS) /o:<your path> 标志将 xsd 文件重新传回工具,以获取可导入并用于日常 .Net 项目中的类。


7
如果你只需要XSD,LiquidXML有一个免费版本可以生成XSD,并且它还有一个GUI界面,所以你可以根据需要调整XSD。无论如何,现在我都是手写我的XSD,但这都要归功于这个应用程序。 http://www.liquid-technologies.com/

5
如果你在Java领域工作,IntelliJ IDEA也具有广泛的XML支持,包括XSD生成和从XSD生成示例XML,并且通过插件可以获取XSLT调试器。如果你计划之后使用类似JAXB等工具,这将特别方便。

2
这也可以在Idea的免费社区版中使用。 - lbalazscs

4
这是一个旧的讨论串,我认为这个链接可能有用:刚刚找到了这个工具:xsd-gen 从XML生成XML Schema,它正好满足了我的需求。

4
Altova XmlSpy非常擅长这个 - 你可以在这里找到一个概述: 这里

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接