在XML模式中处理指令验证

时间:2012-01-03 13:51:30

标签: xml xsd xml-validation processing-instruction

我认为合理简单,我找不到任何明确的东西(除了缺乏明确的之外的事实)

是否有任何方法可以合并到模式中,处理指令节点在文档中的某个位置的要求,也可能验证处理指令目标?

例如:

<node>
    <?my-instruction data ?>
</node>

将验证,而:

<node></node>

不会吗?

而且,更好的是:

<node>
    <?my-other-instruction data ?>
</node>

也不会(因为我可以提供my-instruction所需的目标

如上所述,我无法在主题上找到任何明确的(或根本不存在),所以我不得不假设这是不受支持的。其他人已经提到PI用于“带外”数据和处理指令,因此在验证中不需要包含它们是合理的。会很好。

3 个答案:

答案 0 :(得分:4)

XSD完全忽略实例文档中的处理指令。

我不确定为什么你很难找到这个。搜索“处理指令”的规范给出了一个命中,即3.1.4中的句子“上述定义意味着注释和处理指令,即使在文本中,也会被忽略所有·验证·目的。”

事实上,在XSD 1.1中,我们对于断言是否可以看到注释和处理指令存在争议。最后的决定是默认情况下它们不可见,但处理器可以提供一个开关来使它们可见。在Saxon 9.4中,您可以在命令行上使用--assertionsCanSeeComments:on来设置此开关。使用此开关集,您可以在模式中编写断言来测试是否存在处理指令 - 但是您不能将它们合并到复杂类型的语法中,这使得限制它们必须出现的确切位置变得棘手。

答案 1 :(得分:2)

我在XML Schema 1.1规范中找到的对处理指令的唯一引用见3.1.4节:

  

上述定义意味着评论和处理说明,   即使在文本中,也会被忽略所有·验证·目的。

这似乎意味着处理指令无法在XML Schema中表示。

答案 2 :(得分:1)

XML Schema仅用于验证元素和属性,并且在非常有限的范围内验证其内容(枚举或数据类型)。

没有规定检查其他节点类型,例如注释或处理指令。

还有XML Schema的替代方法可用于验证。例如,Schematron可让您查看内容。