针对各种约束验证XML文档

时间:2009-07-15 04:41:56

标签: xml schema xsd

我需要根据各种约束来验证XML文件:元素文本的类型和/或格式,共现,日期比较和日期数学,以及来自数据库的一些用户定义的规则(即元素X可以只包含子元素A,B和C),我不知道如何去做。

此应用程序的当前版本通过Perl强制执行这些约束,因为我觉得Perl代码复制了许多我将使用XSD或RELAX NG开箱即用的功能。 不幸的是,使用其中任何一个都会导致错误消息对最终用户来说是神秘的。将这些神秘的消息映射到友好的东西似乎是不可能的(除了提供行/列号)。

然后是Schematron。它允许我生成友好的消息并检查上述模式langs不能的约束。不幸的是,类型/格式检查和日期数学成为大的XSLT模板黑客。

现在我不知道该怎么做。

Schematron和RELAX NG之间的组合似乎是最好的方法,但RELAX NG产生的错误使得无法向最终用户提供任何信息。

我原本希望使用一个主模式模板,该模板将根据数据库中的自定义规则进行修改。

保持最初的方法是最好的,还是应该继续使用Schematron / RELAX NG并将格式/类型强制执行到XSLT模板中?

1 个答案:

答案 0 :(得分:0)

从实际角度来看,在我看来,你的任务确实不是XML验证之一,也不应该被迫加入其中。

您的描述看起来就像您有很多特定于域的内容,甚至可能是特定情况下对XML文档中包含的数据的特定验证,而不是XML文档本身。因此,我会说,在代码中编写验证器来解析文档并应用复杂的,数据驱动的验证套件。我怀疑您将能够向用户提供更好的反馈,因为您的代码将具有该域的语义知识。

我想你可以使用和XML架构系统作为这种系统的“第一次通过”,但是如果你最终需要解析和加载数据,我通常会发现架构验证没有添加任何内容无论如何,解析的代码必须进行验证。