验证XSD的正确性

时间:2015-02-05 04:00:55

标签: xsd xsd-validation

我正在尝试验证非常大的架构的正确性。基本上我正在使用XSOM解析器使用以下代码

XSOMParser parser = new XSOMParser(); 
parser.setErrorHandler( .. );
parser.parse( IOUtils.toInputStream( xsdAsString ) );
但是,这不会验证我的架构中的所有错误。我使用Oxygen编辑器作为我的xml编辑器,当我在编辑器中打开我的模式时,我发现模式中的错误比我从XSOM解析器获得的错误多得多。有谁知道两种检查之间有什么区别?另外,有没有更正确的方法来验证我的架构?

2 个答案:

答案 0 :(得分:1)

如果不了解XSOM的完整性和规范的一致程度,而不是the web site上可以找到的,那么就不可能回答“这两种检查之间有什么区别?”的问题。有用地。

通常,同一规范的不同实现将检测不同的错误并提供不同的错误消息;这个一般规则也适用于XSD。

在XSD的情况下,某些实现者发现规范的某些部分很难理解,因此实现的互操作性是不完美的。此外,一些实现发现它们可以正常使用违反规范所强加的约束或模式的模式。规范中的许多详细规则明确地受到实现如何工作的非常具体的概念的驱动,即使规范不承认这一点并且没有记录这些概念。对于以不同方式工作或使用不同数据结构的实现,检查其中一些约束是纯粹的make-work,它对软件的核心功能没有任何贡献;如果他们的目标是使用模式做有用的工作,而不是检查模式的一致性,那么如果某些实现者不愿意这样做也就不足为奇了。 (请注意:这些是可能适用于XSOM的一般性评论。)

Oxygen对模式的验证使用Saxon或Xerces J(在用户选项中),根据我的经验,这两者在检查模式以确定一致性问题时往往相对彻底。如果他们不同意模式的一致性,您将必须决定哪一个正确解释了规范。当然,如果您的目标是尝试最大化您使用架构的能力将使用不同的处理器,您将对其进行编辑,直到您测试的软件都没有报告任何错误,理论上如果广泛使用的处理器报告错误但对于规范是错误的,您可以正确地了解模式与规范的一致性,或者具有可以与该处理器一起使用的模式。

答案 1 :(得分:-2)

没有办法保证您的XSD在语法上是正确的,遵循专有工具以外的所有XSD规则,这些规则本身并不能保证。

似乎最常被推动为"标准"至少在我工作的行业中。