简短搜索显示,从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
它没有办法对元素进行去标准化,所以最终都成为了替代的起始元素(它似乎也有点儿错误)。
Trang是另一种选择,但它不支持输出上的输入上的xsd文件(为什么?)。但它支持DTD。首先想到转换为DTD,但是很难找到稳定的xsd2dtd。下面的那个:
$ xsltproc http://crism.maden.org/consulting/pub/xsl/xsd2dtd.xsl in.xsd > out.dtd
似乎是错误的。
这一切都非常令人惊讶。对于这些XML(ab)使用的这些年来,没有适合这些简单基本任务的命令行工具?人们只使用编辑吗?那些工作吗?我更喜欢命令行,特别是因为我想自动完成这些任务。
对此有何启发性评论?
答案 0 :(得分:4)
转换XSD是一项非常艰巨的任务; XSD规范有点噩梦,非常复杂。从一些快速research,开始,似乎很容易从RelaxNG转到XSD,但反过来可能不正确甚至可能(这解释了你关于Trang的问题)。
我不明白你关于编辑的问题 - 如果你问大多数人是否最终手动在XSD和RNG之间转换,那么是的,我希望如此。
最好的建议可能是尽可能避免使用XSD,或者至少使用RNG作为权威文档并从中生成XSD。您可能还想查看schematron。
答案 1 :(得分:2)
是的,trang不接受输入端的xsd。 Trang 可以但是需要一组符合规范的xml文件,并生成一个rnc或rng模式,这些模式都是有效的。
缺点:
示例案例
如果我的兼容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文件符合你的架构(或者你可以很容易地创建它们),这可能是最好的选择。
祝你好运。
答案 2 :(得分:2)
在http://relaxng.org/#conversion
列表中添加了一个在线转换器(XSD -> RNG)。我试图转换maven-v4_0_0.xsd来验证emacs中的pom.xml文件,但没有任何运气。该网站还包含可与xsltproc
一起使用的XSL样式表,无法保证结果的质量......
答案 3 :(得分:0)
再次,关于编辑:我发现使用Oxygen无法做到这一点,这似乎是一种流行的工具。
答案 4 :(得分:0)
另一种可能性可能是http://www.brics.dk/schematools/,但我还没有尝试过。