【发布时间】:2009-07-15 04:41:55
【问题描述】:
我需要针对各种约束验证 XML 文件:元素文本的类型和/或格式、共现、日期比较和日期数学,以及来自数据库的一些用户定义规则(即元素 X 可以仅包含子元素 A、B 和 C),我不知道该怎么做。
这个应用程序的当前版本通过 Perl 强制执行这些约束,因为我觉得 Perl 代码复制了许多我可以使用 XSD 或 RELAX NG 开箱即用的功能。 不幸的是,使用其中任何一个都会导致错误消息对最终用户来说是神秘的。将这些神秘的信息映射到友好的东西似乎是不可能的(除了提供行/列号)。
然后是 Schematron。它允许我生成友好的消息并检查上述模式语言不能的约束。不幸的是,类型/格式检查和日期数学成为大型 XSLT 模板黑客。
现在我不知道该怎么办了。
Schematron 和 RELAX NG 之间的组合似乎是最好的方法,但是 RELAX NG 产生的错误使得无法向最终用户提供任何信息。
我曾希望使用一个主架构模板,该模板将根据数据库中的自定义规则进行修改。
是保持原始方法最好,还是应该继续使用 Schematron/RELAX NG 并将格式/类型强制转换为 XSLT 模板?
【问题讨论】:
-
错误不是“由 RELAX NG 提供的”,它们是由特定的实现提供的。你用的是哪一个?