XSD - 强制存在子标签?

时间:2012-05-16 19:22:44

标签: xsd

这是一个非常简单的问题,但我的谷歌技能尚未得到答案,所以:

XSD可以强制一个元素必须在更高级别的元素中存在吗?我知道你可以允许或禁止“明确设置为零”,但这听起来不一样。

例如:

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

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

1 个答案:

答案 0 :(得分: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 validates

测试无效的XML

<?xml version="1.0"?>
<parentTag>
  <childTag1>
        <!-- ... stuff -->
  </childTag1>
</parentTag>
testfile.xml:2: element parentTag: Schemas validity error : Element 'parentTag': Missing child element(s). Expected is ( childTag2 ).
testfile.xml fails to validate