[英]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.