0

这是一个非常简单的问题,但我的谷歌技能还没有给我答案,所以:

XSD 可以强制一个元素必须存在于更高级别的元素中吗?我知道您可以允许或禁止“显式设置为零”,但这听起来不是一回事。

例如:

<parentTag>
    <childTag1>
        ... stuff
    </childTag1>
    <childTag2>   <!-- FAIL VALIDATION IF a childTag2 isn't in parentTag!!! -->
        ... stuff
    </childTag2>
</parentTag>

如果是这样,语法是什么?

4

1 回答 1

2

默认情况下,XSD 中的元素必须存在。如果未指定,则子元素的minOccurs属性设置为 1。

也就是说,您必须通过设置显式地使元素可选minOccurs="0"

示例架构

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="parentTag">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="childTag1" minOccurs="0"/> <!-- This element is optional -->
      <xs:element name="childTag2"/> <!-- This element is required -->
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema>

测试有效的 XML(使用 xmllint)

<?xml version="1.0"?>
<parentTag>
  <childTag1>
        <!-- ... stuff -->
  </childTag1>
  <childTag2>
        <!-- ... stuff -->
  </childTag2>
</parentTag>
testfile.xml 验证

测试无效的 XML

<?xml version="1.0"?>
<parentTag>
  <childTag1>
        <!-- ... stuff -->
  </childTag1>
</parentTag>
testfile.xml:2:元素 parentTag:架构有效性错误:元素“parentTag”:缺少子元素。预期是( childTag2 )。
testfile.xml 无法验证
于 2012-05-16T19:53:34.150 回答