[英]XML validation: Concurrent unordered and occurrence requirements in XSD
在XML Schema(XSD 1.0)中,我对四个元素有以下要求:
我创建了一个方案,该方案满足#2和#6之外的所有要求。 在我的架构中,element2和element3可以按任何顺序出现,但是我无法限制element2仅出现一次。 另外,我无法确保parent_element中至少存在1个元素。
在下面查看我的架构,并提出更新建议,以满足上述所有要求。
<xs:element name="parent_element">
<xs:complexType>
<xs:sequence>
<xs:element name="element1" type="type1" minOccurs="0" maxOccurs="1" />
<xs:choice minOccurs="0" maxOccurs="unbounded" >
<xs:element name="element2" type="type1" />
<xs:element name="element3" type="type1" />
</xs:choice>
<xs:element name="element4" type="type2" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
为了满足要求2,我尝试了将maxOccurs="1"
与element2一起使用(内部选择)的技巧,但是它不起作用,并且element2仍然可以按任意顺序多次重复使用element3。
<xs:element name="parent_element">
<xs:complexType>
<xs:sequence>
<xs:element name="element1" type="type1" minOccurs="0" maxOccurs="1" />
<xs:choice minOccurs="0" maxOccurs="unbounded" >
<xs:element name="element2" type="type1" maxOccurs="1" />
<xs:element name="element3" type="type1" />
</xs:choice>
<xs:element name="element4" type="type2" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
要求#4和#6禁止使用XSD 1.0。
XSD 1.1可以通过xs:assert
满足这些要求:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
elementFormDefault="qualified"
vc:minVersion="1.1">
<xs:element name="parent_element">
<xs:complexType>
<xs:sequence>
<xs:element name="element1" minOccurs="0" maxOccurs="1" />
<xs:choice minOccurs="0" maxOccurs="unbounded" >
<xs:element name="element2" />
<xs:element name="element3" />
</xs:choice>
<xs:element name="element4" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:assert test="count(element2) < 2
and (element1 or element2 or element3 or element4)"/>
</xs:complexType>
</xs:element>
</xs:schema>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.