在W3C的XML Schema语言(XSD)中,使用模式和约束来允许一个元素在任何顺序中出现,但限制其出现的次数。这在许多情况下都非常有用,例如确保符合数据规范或规则,即使这些元素在不同的层出现。在某些情况下,您可能需要在没有明确约束的情况下考虑允许重复元素,例如在提供多个选项时使用。
一个可能的解决方案是使用约束来限制一个元素出现次数,同时使用唯一性约束来确保每个实例都是唯一的。例如:
<xs:simpleType name="allowedElements">
<xs:restriction base="xs:string">
<xs:enumeration value="a, b, c"/>
<xs:enumeration value="b, c, a, d, e"/>
<xs:enumeration value="{ a, b, c } ,{ d, e, a } ,{ a, e, a }"/>
<!--...-->
<xs:enumeration value="[a-f][0-9]+"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="restrictedElement">
<xs:sequence>
<!--...-->
<xs:element name="customElement" type="xs:string" minOccurs="0" maxOccurs="unbounded" xsd:annotation-prohibited="prohibited">
<xs:uniqueValue constrained="allowedElements" />
</xs:element>
</xs:sequence>
<xs:attribute name="targetAttribute">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="[A-F0-9]+"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
上面的示例中:
"allowedElements"
枚举类型将允许的元素集用逗号分隔,并限制出现的元素数量。minOccurs="0"
和maxOccurs="unbounded"
约束元素在任何顺序的任何次数的出现。<customElement>
元素中。xsd:uniqueConstraint="allowedElements" />
确保每个<customElement>
元素的实例都符合allowedElements
约束。这种组合模式可以帮助您确保元素在任何顺序中出现,同时限制其出现的次数且唯一。
领取专属 10元无门槛券
手把手带您无忧上云