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

8

Relax NG主页列出了Sun RELAX NG Converter,该工具似乎可以将XSD文件转换为relaxng格式,但该链接已失效,关于二次来源的博客文章也似乎已过时。

我不感兴趣使用基于Web的转换器。

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

3个回答

5

旧版的Sun RELAX NG转换器现在与(Sun)'多模式验证器'- msv一起捆绑。您可以使用该术语在发行包存储库中搜索。

例如,Fedora(例如17)已经包含了它。

在Fedora上安装

# yum install msv-rngconv msv-manual

在 Fedora 上的使用

$ rngconv my.xsd > my.rng

测试结果:

$ xmllint --relaxng my.rng --noout some.xml

转换为紧凑语法:

$ trang -I rng -O rnc my.rng my.rnc

(trang也可以通过主要的Fedora软件包仓库获取)
另一种方式(可能在将内容添加到紧凑语法文件后):
$ trang -I rnc -O rng my.rnc my.rng

Msv似乎非常强大 - 我使用了一个相当大的xsd文件进行测试,其中包含继承、广泛的模式和另一个xsd文件的包含。


奇怪的是,在Debian Jessie上,trang似乎无法再从rng转换为rnc了。 - helcim
@helcim,也许trang对于Debian来说不够自由了:D。开个玩笑,我的trang示例中输入/输出格式选项(-I/-O)的顺序混乱了,现在已经修复了。也许这才是你真正遇到的问题? - maxschlepzig
我得到了以下异常信息: Exception in thread "main" java.lang.NoSuchMethodError: com.thaiopensource.relaxng.parse.sax.SAXParseable.<init>(Ljavax/xml/transform/sax/SAXSource;Lcom/thaiopensource/resolver/xml/sax/SAXResolver;Lorg/xml/sax/ErrorHandler;)V at com.thaiopensource.relaxng.input.parse.sax.SAXParseInputFormat.makeParseable(SAXParseInputFormat.java:25) at com.thaiopensource.relaxng.input.parse.ParseInputFormat.load(ParseInputFormat.java:40) at com.thaiopensource.relaxng.translate.Driver.run(Driver.java:135) at com.thaiopensource.relaxng.translate.Driver.main(Driver.java:44) - helcim

5

0

3
提出Trang的一个问题是它不接受XSD输入。 - C. M. Sperberg-McQueen
1
@Rintze,是的,我已经尝试过了-但就像Sperberg所写的一样-不幸的是,它不接受xsd作为输入-只接受输出。我第一次也读错了。 - maxschlepzig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接