【发布时间】:2020-05-19 15:03:03
【问题描述】:
我正在尝试指定一个大致像这样开始的架构:
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="baz" />
<xs:choice>
<xs:element name="foo" minOccurs="1" />
<xs:element name="bar" minOccurs="1"/>
</xs:choice>
<xs:element name="bam" />
</xs:sequence>
</xs:complexType>
</xs:element>
非常简单,我们在<choice> 元素之前和之后得到了一个包含一些必需元素的序列。但是,在验证此架构的实例时,我想指定以下行为:
- 如果选择的是
<foo>元素,则验证器应根据 foo 的架构验证<foo>的子元素 - 如果选择的是
<bar>元素,验证器应忽略<bar>的子元素并继续验证序列的其余部分(因此在本例中,在检测到存在 @ 987654327@ 元素,它只会检查序列中的下一个<bam>元素并忽略<bar>和</bar>之间的所有内容) - 很明显,验证器应该强制使用
<choice>标签 - 在这个位置可以有<foo>或<bar>,但不能同时存在
这样做的原因是我试图从我自己的自定义应用程序中验证 XML 文件。我可以访问 <foo> 的 .xsd 文件,但我无法访问 <bar> 的 .xsd 文件,因此我正在尝试验证我可以验证的所有内容并忽略我无法验证的内容。
我可以在模式中添加一些东西来告诉验证器遵守<choice> 标记,然后只关心验证所选元素之一吗?
【问题讨论】:
标签: xml validation schema choice