简短的搜索显示,从xsd(XML Schema)转换为rng(RelaxNG)或rnc(compact RelaxNG)的所有可用(uUnix命令行)工具都存在某种问题.
首先,如果我使用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
Run Code Online (Sandbox Code Playgroud)
它没有一种方法来对元素进行去标准化,因此最终都成为替代的起始元素(它似乎也有点儿错误).
Trang是另一种选择,但它只在输出上支持输入上的xsd文件(为什么?).但它支持DTD.首先想到转换为DTD,但是很难找到稳定的xsd2dtd.以下一个:
$ xsltproc http://crism.maden.org/consulting/pub/xsl/xsd2dtd.xsl in.xsd > out.dtd
Run Code Online (Sandbox Code Playgroud)
似乎是越野车.
这一切都非常令人惊讶.对于这些XML(ab)使用的这些年来,没有适合这些简单基本任务的命令行工具?人们只使用编辑吗?那些工作吗?我更喜欢命令行,特别是因为我想自动执行这些任务.
对此有何启发性评论?
转换 XSD 是一项非常艰巨的任务;XSD 规范有点像噩梦,而且极其复杂。从一些快速研究来看,从 RelaxNG 到 XSD 似乎很容易,但反过来可能不是真的,甚至不可能(这解释了你关于 Trang 的问题)。
我不明白你关于编辑器的问题 - 如果你问大多数人是否最终会手动在 XSD 和 RNG 之间进行转换,那么是的,我希望如此。
最好的建议可能是尽可能避免 XSD,或者至少使用 RNG 作为最终文档并从中生成 XSD。您可能还想看看schematron。