Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RelaxNG与XML模式_Xml_Xsd_Relaxng - Fatal编程技术网

RelaxNG与XML模式

RelaxNG与XML模式,xml,xsd,relaxng,Xml,Xsd,Relaxng,我有一个使用RelaxNG()验证xml的项目。我喜欢RelaxNG的语法,但我使用的大多数工具都是XML模式(事实上,除了jing之外,我认为我没有其他工具可以做到这一点)。当大多数支持似乎围绕XML模式时,我使用RelaxNG是否犯了设计和未来支持错误?我是否应该坚持放松,让其他人学习放松(必要时踢踢和尖叫,j/k)?由于工具支持,我应该切换到xml模式吗 谢谢。答案有点陈词滥调:视情况而定 你可能会问,关于什么?在您的用户可能正在使用的工具上。如果你依赖你的用户,你可能会失去他们,如果缺乏

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


谢谢。

答案有点陈词滥调:视情况而定

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


如果你想冒一点风险,可以使用RELAXNG。在开发的每一个步骤中,尝试使用类似的工具将RELAXNG转换为XML模式。以防有一天你认为RELAXNG不值得,并且你知道你有一个合理的备份。

我同意这完全取决于你需要使用模式做什么。 这里还有一点:如果你所需要的只是验证,是的,只需使用RelaxNG即可:它对这个目的很好


但如果您计划执行数据绑定(如JAXB)或其他类型的代码生成任务,那么XML模式(不幸的是…)是更好的选择,因为它更倾向于对象到XML或从XML到XML的方法,而不是RelaxNG。相反,对于XML验证来说并不是那么好;特别是考虑到增加的复杂性。事实上,人们可以称XML模式为类型系统,而不是XML模式。

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

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

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

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

:)


这很有效。

回答得好。jing的另一个问题是支持级别。jing/trang的一些代码已经好几年没有更新了。值得指出的是,jing和trang现在正在重新开发中。此外,jing中的bug很少;詹姆斯·克拉克犯的错误比一般程序员少。Trang在XSD输出方面有问题,但在其他方面也是非常正确的。“如果它不改变,它就死了”这一指标不适合这种代码质量。@JohnCowan我不禁怀疑XSD输出中的这些问题是由XSD造成的,而不是其他任何东西。我应该补充一点,我们总是确保根据XSD验证至少一个文档(jing将这样做,在封面下使用Xerces)以确保Trang没有生成带有UPA冲突或其他XSD错误的XSD,因为它有时会这样做。libxml2(例如xmllint命令行工具)支持RelaxNG。我们使用schematron作为附加模式,而不是替换RELAX NG或XSD。schematron非常适合提供场景(称为阶段),我们使用它来指定特定的内容条件。例如,如果您必须处理某些重要属性可能在某些情况下丢失的情况,则必须允许在主(RELAX NG或XSD)模式中使用该属性,但可能会提供Schematron阶段的“丢失内容”和另一个“存在内容”确保您的示例在这些不同的场景中正常运行。