11

A brief search shows that all available (uUnix command line) tools that convert from xsd (XML Schema) to rng (RelaxNG) or rnc (compact RelaxNG) have problems of some sort.

First, if I use rngconv:

$ wget https://msv.dev.java.net/files/documents/61/31333/rngconv.20060319.zip
$ unzip rngconv.20060319.zip
$ cd rngconv-20060319/
$ java -jar rngconv.jar my.xsd  > my.rng

It does not have a way to de-normalize elements so all end up being alternative start elements (it also seems to be a bit buggy).

Trang is an alternative, but it doesn't support xsd files on the input only on the output (why?). It supports DTD, however. Converting to DTD first comes to mind, but a solid xsd2dtd is hard to find as well. The one below:

 $ xsltproc http://crism.maden.org/consulting/pub/xsl/xsd2dtd.xsl in.xsd > out.dtd

Seems to be buggy.

All this is very surprising. For all these years of XML (ab)use, there no decent command line tools for these trivial basic tasks? Are people using only editors? Do those work? I much prefer command line, especially because I'd like to automate these tasks.

Any enlightening comments on this?

4

5 回答 5

4

转换 XSD 是一项非常艰巨的任务;XSD 规范有点像噩梦,而且极其复杂。从一些快速研究来看,从 RelaxNG 到 XSD 似乎很容易,但反过来可能不是真的,甚至是不可能的(这解释了你关于 Trang 的问题)。

我不明白你关于编辑器的问题——如果你问的是大多数人最终是否会手动在 XSD 和 RNG 之间进行转换,那么是的,我希望如此。

最好的建议可能是尽可能避免使用 XSD,或者至少使用 RNG 作为最终文档并从中生成 XSD。您可能还想看看schematron

于 2008-09-23T17:25:11.687 回答
4

没错,trang 在输入端不接受 xsd。然而, Trang可以获取一组应该符合规范的 xml 文件并生成一个 rnc 或 rng 模式,它们都将对其有效。

缺点:

  • 它需要许多兼容的 xml 文件(我想越多越好)
  • 生成的架构可能仍需要进行一些调整。

示例案例:

如果我的兼容 xml 文件隐藏在1.xml 2.xml 3.xml 4.xml 5.xml

以下命令将告诉 trang 输出一个对所有这些都有效的 rnc 模式:

java -jar trang.jar -I xml -O rnc 1.xml 2.xml 3.xml 4.xml 5.xml foo.rnc

结论

如果您有一个很好的 xml 文件测试集满足您的架构(或者您可以轻松创建它们),这可能是最好的选择。

祝你好运。

于 2009-07-07T21:56:31.687 回答
2

有一个在线转换器 ( XSD -> RNG ) 添加到列表中http://relaxng.org/#conversion。我试图转换 maven-v4_0_0.xsd 以验证 emacs 中的 pom.xml 文件,但没有任何运气。该站点还包含您可以使用的 XSL 样式表,但xsltproc不能保证结果的质量......

于 2010-02-20T12:12:18.330 回答
0

再次,关于编辑:我看到没有办法用 Oxygen 来做到这一点,这似乎是一种流行的工具。

于 2008-09-23T18:23:57.723 回答
0

另一种可能性可能是http://www.brics.dk/schematools/,但我还没有尝试过。

于 2008-11-27T12:24:15.743 回答