问题 使用Schematron / XSD在C#中进行XML验证


我一直在寻找一种方法来对XML文档进行更高级的业务规则验证。到目前为止,Schematron似乎能够做到,我需要什么。

我一直在四处寻找,我发现的少数几个图书馆已经很老了,而且似乎不再支持了。 Schematron在2002年只是“热门”吗? 有没有可以在C#中进行验证的库 - 或者我该怎么做?

或者是否有其他人可以进行高级验证并拥有C#库并且是标准化的?


3023
2018-04-24 20:57


起源

我知道这是一个 旧 问题,但是:你有没有找到解决方案?我现在处于这种情况 - 我使用XSD进行模式验证,但我想使用像Schematron这样的方法来处理业务规则。在我开始研究“制作我自己的XSLT验证器”之前,我实际上并不知道它,如果存在Schematron(或其他)的实际实现,我宁愿使用现有的验证器。


答案:


对于它的价值,这是我的经验......

我有时希望模式可以在业务规则验证方面做得更多。但是,根据我的经验,模式可用于定义数据协定(格式,类型等)......  执行业务规则。试图让它更多的东西会遇到各种各样的问题,这可能就是为什么Schematron似乎已经因其受欢迎程度而黯然失色(可能是我无法备份的坏假设)。

为了解决这个问题,通常可以采用双通法:

  • 使用模式验证验证xml结构/数据类型等。
  • 对xml应用业务规则检查(在正常的c#代码中)。

我理解你是否想要采用一体化的方法进行验证,但是从长远来看,尝试使用模式会导致更多的麻烦。最后,通过隔离代码,您最终可以更好地控制业务规则检查。


13
2018-04-24 21:24



它值得很多!我自己有一些相同的想法,但问题不在于我需要一个一体化的方法 - 我需要一个可以在许多应用程序之间共享的“验证包” - 其中很多我不是附属的。因此,对XML的业务规则验证需要某种开放标准。 - asgerhallas
这正是我在几个月之后搞乱Schematron后所做的事情。 - scope_creep
值得注意的是Schematron现在是ISO标准。 - scope_creep