用于检查XML配置文件的内部一致性的工具,规则或过程

时间:2010-12-09 09:19:40

标签: xml configuration referential-integrity data-integrity consistency

我参与过具有非常复杂的XML配置的项目,面临的一个问题是维护XML的内部一致性。

在这种情况下,我并不是指严格的XML模式一致性,而是指使用的节点之间的更高级别关系。大多数问题是由XML中编码的信息之间的隐式链接以及该信息与代码库的隐式关系引起的。例子可能是:

  • XML节点数据隐式链接到代码中的枚举
  • 相同配置中相关的业务对象(因为它们共享需要保持一致的信息),它们之间没有任何明确的关系
  • 要在运行时编译和解析的XML代码

让我印象深刻的是a)这可能会成为一种增加频率的做法,而b)在某些情况下,我们隐含地创建了一种新的编码语言,这种语言不是经过编译时检查的 - 事实上它几乎没有检查。它运行了。

是否有其他人面临类似的情况,是否有任何工具或方法可以使问题更容易处理?我想要一些与技术无关的一般例子 - 我自己的特定经验是使用C#和配置专有系统。

注意:虽然我在下面给出了答案,但我并不打算将自己作为最终答案。

4 个答案:

答案 0 :(得分:2)

这将在很大程度上取决于您为项目使用的语言/框架/工具。

使用XML进行配置可能确实存在问题,因为它无法进行编译时检查。

例如,当使用Java和Spring Framework时,存在一个名为Spring Tool Suite的Eclipse插件,它可以在XML配置和实际代码之间进行同步检查。

但这只是特定语言和特定框架的一个例子。您应该尝试找出您的方案是否存在类似的东西。

顺便说一句,如果您告诉我们您正在使用的技术,我们可能会为您提供更多帮助。

答案 1 :(得分:2)

你尝试过Schematron吗? http://www.schematron.com/

这是一种更高级别的语言,旨在从语义上验证XML,而不仅仅是语法上的。

另见维基百科:http://en.wikipedia.org/wiki/Schematron

答案 2 :(得分:2)

我使用自动功能测试来确保默认配置的数据完整性。我不知道你描述的问题必然依赖于配置格式是XML。话虽如此,我建议:

  • 您不使用XML作为配置格式。 (谷歌可以告诉你原因)
  • 通过隐式使用枚举或任何其他构造值的紧密耦合在配置中与在代码中一样糟糕。
  • 从配置中获取并执行的代码让我感到畏缩。它是否在配置中以便可以覆盖?如果是这样,那就是错误,未定义行为和潜在安全问题的巨大载体。
  • 业务对象问题听起来也很糟糕。

您可能无法对XML作为配置格式,错误耦合或从配置执行代码执行任何操作。您可以通过创建一系列功能测试来降低风险,确保:

  • 枚举有效
  • 代码是可编译的,可执行的,不包含evals,rpc调用,不调用函数或者您想要添加的任何其他分析检查。

您有时也可以通过提供替代(配置或配置条目)来帮助改变。

答案 3 :(得分:1)

来自@David Peleg的良好链接是Topologi,它提供检查XML的产品,包括“业务规则”检查。