使用XSD文件仅验证XML文件的一部分

时间:2012-09-26 11:27:32

标签: c xml xsd

是否有办法使用XSD文件仅验证XML文件的一部分,并忽略XML文件的其他内容。我想使用XSD文件验证XML文件中的几个标签。我的XML文件包含许多标记,但xsd仅包含少数标记的元素。

是否有可能以某种方式实现这一目标?

3 个答案:

答案 0 :(得分:1)

原则上,有两种方法(至少)实现这一目标。

首先,您原则上可以告诉验证者您要验证文档中的哪些元素; XSD规范不需要验证从文档根目录开始。实际上,命令行验证器几乎从不提供运行时选项来启动除根之外的任何地方的验证。我认为验证库更有可能提供该功能;他们经常(或至少有时)提供函数,允许您传入验证应该开始的元素,以及必要的架构信息。

如果您的验证器不允许您有选择地验证,您可以编写一个模式,其中只包含您要验证的元素和属性的声明,并在“宽松验证模式”下调用文档根目录上的验证器 - 这意味着,基本上“如果您在模式中找到文档中元素的声明,则根据其声明验证元素,否则接受它(假设它与其父元素的声明中的宽松通配符匹配)并继续。”因此,验证器将忽略您不提供声明的元素,并验证您为其提供声明的元素。 (请注意,符合XSD处理器不需要提供宽松的验证模式,并在规范不严验证的定义是一点点得以确认,但我相信大多数可用的处理器都支持它,做同样的事情在宽松的模式。)< / p>

答案 1 :(得分:0)

丑陋的黑客将通过省略您不需要验证的文件来构建一个“可验证的”文档,并验证该文档。我并不支持这种方法,但至少它是一个答案。

答案 2 :(得分:0)

在实践中实现这一目标的最简单方法可能是使用XQuery中的validate表达式进行验证(或在XSLT中使用验证进行复制)。这允许您选择要验证的元素,并一次性执行验证。

缺点可能是如果文档无效,XQuery中的验证被定义为致命错误,因此实现可能只是停留在第一个错误上,而不是专注于尽可能多地提供有关无效性的信息。在此阶段,您需要了解它在特定处理器中的实现方式和/或如何配置该处理器。