如何通过XSD保证至少存在一个子元素?

How to ensure at least one child element exists via XSD?

location 元素包含在XML?

<xs:element name="location" nillable="true" minOccurs="0">
  <xs:complexType>
    <xs:group ref="cs:locationGroup"></xs:group>
  </xs:complexType>
</xs:element>

locationGroup的定义:

<xs:group name="locationGroup">
  <xs:all>
    <xs:element name="locality" minOccurs="0"/>
    <xs:element name="wkt" minOccurs="0"/>
  </xs:all>
</xs:group>

我的XSD版本是1.0.

对于如此少量的可能子元素,只需定义 xs:choice 个允许的组合:

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

  <xs:element name="location">
    <xs:complexType>
      <xs:group ref="locationGroup"></xs:group>
    </xs:complexType>
  </xs:element>

  <xs:group name="locationGroup">
    <xs:choice>
      <xs:sequence>
        <xs:element name="locality"/>
        <xs:element name="wkt" minOccurs="0"/>
      </xs:sequence>
      <xs:sequence>
        <xs:element name="wkt"/>
        <xs:element name="locality" minOccurs="0"/>
      </xs:sequence>
    </xs:choice>
  </xs:group>
</xs:schema>

注意这个方法

  • 需要 localitywkt 之一或两者都存在
  • 当两者都存在时允许任何顺序
  • 适用于 XSD 1.0(和 1.1)

根据要求。