如何将XML模式(XSD)转换为RELAXNG?

如何将XML模式(XSD)转换为RELAXNG?,xsd,converter,relaxng,Xsd,Converter,Relaxng,列出了Sun RELAX NG Converter,它显然能够将XSD文件转换为relaxng文件,但链接已断开,而且a似乎也过时了 我对基于web的转换器不感兴趣 顺便说一句,我要转换的XML模式使用继承。您尝试过吗?(我不知道它是如何处理继承的) 有关将XSD转换为RELAXNG的一般性讨论,请参见。看起来Sun RELAX NG转换器的名称是rngconv,但仍隐藏在某些地方:川口康介的RELAX NG转换器(又名Sun RELAX NG转换器)目前在和(感谢KK提供的信息)提供。旧的Su

列出了Sun RELAX NG Converter,它显然能够将XSD文件转换为relaxng文件,但链接已断开,而且a似乎也过时了

我对基于web的转换器不感兴趣

顺便说一句,我要转换的XML模式使用继承。

您尝试过吗?(我不知道它是如何处理继承的)


有关将XSD转换为RELAXNG的一般性讨论,请参见。看起来Sun RELAX NG转换器的名称是rngconv,但仍隐藏在某些地方:

川口康介的RELAX NG转换器(又名Sun RELAX NG转换器)目前在和(感谢KK提供的信息)提供。

旧的Sun RELAX NG转换器现在与(Sun)-msv捆绑在一起。使用该术语,您可以在分发包存储库中搜索

例如,软呢帽(如17)包括它

安装在Fedora上 软呢帽的用法 测试结果:

$ xmllint --relaxng my.rng --noout some.xml
转换为紧凑语法:

$ trang -I rng -O rnc my.rng my.rnc
(trang也可通过Fedora主软件包存储库获得)

另一种方式(可能是在向压缩语法文件添加内容之后):


Msv似乎非常强大-我用一个相当大的xsd文件测试了它,该文件使用继承、扩展模式并包含另一个xsd文件。

建议Trang的一个问题是它不接受xsd输入。@Rintze,是的,我试过了-但它就像Sperberg写的一样-不幸的是,它不接受xsd作为输入-就像输出一样。我第一次也误读了它。奇怪的是,Debian上的trang Jessie似乎再也不能从rng转换为rnc了。@helcim,也许对于Debian来说,
trang
已经不够自由了:D。开玩笑的是,我的trang示例包含了输入/输出格式选项顺序的混乱(
-I
/
-O
)现在已经修好了。也许这才是你真正的问题?我得到了:线程“main”java.lang.NoSuchMethodError中的异常:com.thaiopensource.relaxng.parse.sax.saxpassessable。(Ljavax/xml/transform/sax/SAXSource;Lcom/thaiopensource/resolver/xml/sax/SAXResolver;Lorg/xml/sax/ErrorHandler;)V在com.thaiopensource.relaxng.input.parse.sax.SAXParseInputFormat.makeParseable(SAXParseInputFormat.java:25)在com.thaiopensource.relaxng.input.parse.ParseInputFormat.load(ParseInputFormat.java:40)在com.thaiopensource.relaxng.translate.Driver.run(Driver.java:135)在com.thaiopensource.relaxng.translate.Driver.main(Driver.java:44)上
$ xmllint --relaxng my.rng --noout some.xml
$ trang -I rng -O rnc my.rng my.rnc
$ trang -I rnc -O rng my.rnc my.rng