Xsd到rnc(或rng)的转换(unix命令行)

简单search显示,从xsd(XML Schema)转换为rng(RelaxNG)或rnc(紧凑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 

它没有办法去规范元素,所以最终成为替代开始元素(它也似乎有点错误)。

Trang是一种替代方法,但是它只在输出上不支持xsd文件(为什么?)。 但是,它支持DTD。 首先想到转换为DTD,但是很难find一个稳定的xsd2dtd。 下面的一个:

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

似乎是越野车。

这一切都是非常令人惊讶的。 对于这些XML(ab)使用这些年来,没有体面的命令行工具这些微不足道的基本任务? 人们只使用编辑器吗? 做那些工作? 我更喜欢命令行,特别是因为我想自动执行这些任务。

对此有什么启发性的评论?

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

我不明白你对编辑的问题 – 如果你问是否大多数人最终都是手工在XSD和RNG之间转换,那么是的,我希望如此。

最好的建议可能是避免使用XSD,或者至少使用RNG作为权威性文档,并从中生成XSD。 你可能也想看看schematron 。

诚然,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 

结论

如果你有一个很好的符合你的schema的xml文件测试集(或者你可以很容易地创建它们),这可能是最好的选择。

祝你好运。

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

再次,关于编辑:我看到,没有办法做到这一点与氧气这似乎是一个流行的工具。

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