跳过 XML 选择标签内的一个标签验证
Skip XML validation of one tag within choice tag
我正在尝试指定一个大致如下开始的模式:
<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>
的子元素并继续验证序列的其余部分(所以在在这个例子中,在检测到有一个 <bar>
元素后,它只会检查序列中的下一个 <bam>
元素并忽略 <bar>
和 </bar>
之间的所有内容)
- 显然,验证器应强制执行
<choice>
标记 - 此位置可以有 <foo>
或 <bar>
,但不能同时有
原因是我试图从我自己的自定义应用程序中验证 XML 文件。我可以访问 <foo>
的 .xsd 文件,但无法访问 <bar>
的 .xsd 文件,所以我正在尝试验证我所做的一切可以验证并忽略我不能的。
我是否可以向架构中添加一些内容,告诉验证器遵守 <choice>
标记,但随后只关心验证所选元素之一?
如果您给 bar
一个 xs:anyType
类型,那么它可以包含任何内容 - 实际上内容没有经过验证。
我正在尝试指定一个大致如下开始的模式:
<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 的模式 验证 - 如果选择的是
<bar>
元素,验证器应该 忽略<bar>
的子元素并继续验证序列的其余部分(所以在在这个例子中,在检测到有一个<bar>
元素后,它只会检查序列中的下一个<bam>
元素并忽略<bar>
和</bar>
之间的所有内容) - 显然,验证器应强制执行
<choice>
标记 - 此位置可以有<foo>
或<bar>
,但不能同时有
<foo>
的子元素
原因是我试图从我自己的自定义应用程序中验证 XML 文件。我可以访问 <foo>
的 .xsd 文件,但无法访问 <bar>
的 .xsd 文件,所以我正在尝试验证我所做的一切可以验证并忽略我不能的。
我是否可以向架构中添加一些内容,告诉验证器遵守 <choice>
标记,但随后只关心验证所选元素之一?
如果您给 bar
一个 xs:anyType
类型,那么它可以包含任何内容 - 实际上内容没有经过验证。