如何通过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>
注意这个方法
- 需要
locality
或 wkt
之一或两者都存在
- 当两者都存在时允许任何顺序
- 适用于 XSD 1.0(和 1.1)
根据要求。
当 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>
注意这个方法
- 需要
locality
或wkt
之一或两者都存在 - 当两者都存在时允许任何顺序
- 适用于 XSD 1.0(和 1.1)
根据要求。