我有一个项目,我正在使用 RelaxNG ( jing ) 来验证 xml。我喜欢 RelaxNG 的语法,但我拥有的大多数工具都使用 XML 模式(实际上,我认为除了 jing 之外我没有其他工具)。当大多数支持似乎都围绕 XML 模式时,我是否使用 RelaxNG 犯了设计和未来支持错误?我是否应该坚持使用 RelaxNG 并让其他人学习它(必要时踢和尖叫,j/k)?由于工具支持,我应该切换到 xml 模式吗?
谢谢。
答案有点陈词滥调:这取决于。
你可能会问什么?在您的用户可能会使用的工具上。如果你依赖你的用户,如果缺乏好的工具将他们赶走,你可能会失去他们。由于根据我的经验,XML 模式使用非常广泛,因此您可能需要重新考虑继续使用 Relax NG 的决定。它比 XML 模式更好也更容易理解,但这并不意味着它会让您的项目成功。
如果您想冒险一点,请继续使用 Relax NG。在您开发的每一步中,尝试使用Trang之类的工具将 Relax NG 转换为 XML 模式。以防万一您有一天认为Relax NG 不值得,并且您知道您有一个合理的备份。
编写稍微有限的 RELAX NG,然后使用 Trang 自动转换为 XSD(我们从未接触或查看)对我们来说非常有效。
我同意这完全取决于您需要使用模式的目的。这里还有一点:如果您只需要验证,是的,只需使用 RelaxNG:它非常适合此目的。
但是,如果您打算进行数据绑定(如 JAXB)或其他类型的代码生成任务,那么 XML Schema 是(不幸的是......)更好的选择,因为它比 RelaxNG 更倾向于 object-to/from-xml 方法. 相反,对于 XML 验证来说并不是那么好;特别是考虑到增加的复杂性。事实上,人们可以将 XML Schema 称为一种类型系统,而不是 XML 的模式。
这一切都取决于你必须说服谁。您的分析非常正确:RelaxNG 是一种更好的验证语言,但它的工具支持要少得多。那么你真正需要什么工具呢?
schematron 也是另一个合理的选择,具有强大的基于 xpath 的验证......
然而,我的团队通常在 Relax/NG compact 中构建所有内容(为了美观的可读性)并根据需要转换为 XSD(例如,用于基于 lib 的验证),否则忽略 XSD。
:)
这行得通。