24

我有一个项目,我正在使用 RelaxNG ( jing ) 来验证 xml。我喜欢 RelaxNG 的语法,但我拥有的大多数工具都使用 XML 模式(实际上,我认为除了 jing 之外我没有其他工具)。当大多数支持似乎都围绕 XML 模式时,我是否使用 RelaxNG 犯了设计和未来支持错误?我是否应该坚持使用 RelaxNG 并让其他人学习它(必要时踢和尖叫,j/k)?由于工具支持,我应该切换到 xml 模式吗?

谢谢。

4

5 回答 5

18

答案有点陈词滥调:这取决于。

你可能会问什么?在您的用户可能会使用的工具上。如果你依赖你的用户,如果缺乏好的工具将他们赶走,你可能会失去他们。由于根据我的经验,XML 模式使用非常广泛,因此您可能需要重新考虑继续使用 Relax NG 的决定。它比 XML 模式更好也更容易理解,但这并不意味着它会让您的项目成功。

如果您想冒险一点,请继续使用 Relax NG。在您开发的每一步中,尝试使用Trang之类的工具将 Relax NG 转换为 XML 模式。以防万一您有一天认为Relax NG 不值得,并且您知道您有一个合理的备份。

于 2011-02-14T17:05:03.627 回答
7

编写稍微有限的 RELAX NG,然后使用 Trang 自动转换为 XSD(我们从未接触或查看)对我们来说非常有效。

于 2011-02-18T23:18:12.763 回答
6

我同意这完全取决于您需要使用模式的目的。这里还有一点:如果您只需要验证,是的,只需使用 RelaxNG:它非常适合此目的。

但是,如果您打算进行数据绑定(如 JAXB)或其他类型的代码生成任务,那么 XML Schema 是(不幸的是......)更好的选择,因为它比 RelaxNG 更倾向于 object-to/from-xml 方法. 相反,对于 XML 验证来说并不是那么好;特别是考虑到增加的复杂性。事实上,人们可以将 XML Schema 称为一种类型系统,而不是 XML 的模式。

于 2011-02-14T20:03:14.093 回答
4

这一切都取决于你必须说服谁。您的分析非常正确:RelaxNG 是一种更好的验证语言,但它的工具支持要少得多。那么你真正需要什么工具呢?

于 2011-02-14T23:38:57.937 回答
2

schematron 也是另一个合理的选择,具有强大的基于 xpath 的验证......

然而,我的团队通常在 Relax/NG compact 中构建所有内容(为了美观的可读性)并根据需要转换为 XSD(例如,用于基于 lib 的验证),否则忽略 XSD。

:)

这行得通。

于 2013-03-07T17:27:14.447 回答