【问题标题】:Skip XML validation of one tag within choice tag跳过选择标签中一个标签的 XML 验证
【发布时间】: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>

非常简单,我们在&lt;choice&gt; 元素之前和之后得到了一个包含一些必需元素的序列。但是,在验证此架构的实例时,我想指定以下行为:

  • 如果选择的是 &lt;foo&gt; 元素,则验证器应根据 foo 的架构验证 &lt;foo&gt; 的子元素
  • 如果选择的是 &lt;bar&gt; 元素,验证器应忽略 &lt;bar&gt; 的子元素并继续验证序列的其余部分(因此在本例中,在检测到存在 @ 987654327@ 元素,它只会检查序列中的下一个&lt;bam&gt; 元素并忽略&lt;bar&gt;&lt;/bar&gt; 之间的所有内容)
  • 很明显,验证器应该强制使用 &lt;choice&gt; 标签 - 在这个位置可以有 &lt;foo&gt;&lt;bar&gt;,但不能同时存在

这样做的原因是我试图从我自己的自定义应用程序中验证 XML 文件。我可以访问 &lt;foo&gt; 的 .xsd 文件,但我无法访问 &lt;bar&gt; 的 .xsd 文件,因此我正在尝试验证我可以验证的所有内容并忽略我无法验证的内容。

我可以在模式中添加一些东西来告诉验证器遵守&lt;choice&gt; 标记,然后只关心验证所选元素之一吗?

【问题讨论】:

    标签: xml validation schema choice


    【解决方案1】:

    如果你给bar 一个xs:anyType 的类型,那么它可以有任何内容——实际上内容没有经过验证。

    【讨论】:

      猜你喜欢
      • 2010-10-03
      • 1970-01-01
      • 2019-09-24
      • 2016-10-22
      • 1970-01-01
      • 2017-10-20
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多