有没有办法使用 XSD 文件仅验证 XML 文件的一部分而忽略 XML 文件的其他内容。我只想使用 XSD 文件验证 XML 文件中的几个标签。我的 XML 文件包含许多标签,但 xsd 仅包含少数标签的元素。
有可能以某种方式实现这一目标吗?
原则上,有两种方法(至少)可以实现这一点。
首先,您原则上可以告诉验证器您要验证文档中的哪些元素;XSD 规范不需要验证从文档根目录开始。在实践中,命令行验证器几乎从不提供运行时选项来启动除根以外的任何地方的验证。我认为验证库更有可能提供该功能。它们经常(或至少有时)提供允许您传入验证应该开始的元素以及必要的模式信息的函数。
如果您的验证器不允许您有选择地验证,您可以编写一个模式,其中包含您要验证的那些元素和属性的声明,并在“宽松验证模式”下在文档根目录上调用一个验证器——这意味着,本质上是“如果您在架构中找到文档中某个元素的声明,则根据其声明验证该元素,否则接受它(假装它匹配其父声明中的宽松通配符)并继续前进。” 因此,验证器将忽略您未提供声明的元素并验证您提供声明的元素。(请注意,符合 XSD 的处理器不需要提供 lax-validation 模式,并且规范中对 lax 验证的定义有点未指定,
一个丑陋的技巧是通过省略您不想验证的内容,从主文档构建一个“可验证”文档,然后验证那个文档。我不赞同这种方法,但至少这是一个答案。
在实践中实现这一点的最简单方法可能是使用 XQuery 中的 validate 表达式进行验证(或在 XSLT 中使用验证的副本)。这使您可以一次选择要验证的元素并执行验证。
不利的一面可能是,如果文档无效,XQuery 中的 validate 被定义为致命错误,因此实现可能只是在第一个错误上停止,而不是专注于尽可能多地为您提供有关无效性的信息。在这个阶段,您需要了解它是如何在特定处理器中实现的和/或如何配置该处理器。