我正在尝试为 xml 设置一个 xsd,并确保元素没有重复的子元素值。下面是一个无效的 xml 示例。
<NonSectorSpecific>
<ElementTypes>
<item>
<Type>textarea</Type>
</item>
<item>
<Type>select</Type>
</item>
<item>
<Type>select</Type>
</item>
</ElementTypes>
</NonSectorSpecific>
我已经创建了 xsd,它可以正确验证架构,但不能因为 Type 元素的键无效而引发异常。
<xs:schema
targetNamespace="http://internal.gug.icmemo.com/test"
elementFormDefault="qualified"
xmlns="http://internal.gug.icmemo.com/test"
xmlns:o="http://internal.gug.icmemo.com/test"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xs:element name="Configuration">
<xs:complexType>
<xs:sequence>
<xs:element name="NonSectorSpecific">
<xs:complexType>
<xs:sequence>
<xs:element ref="ElementTypes" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="PKElementType">
<xs:selector xpath="NonSectorSpecific/ElementTypes/item/Type"/>
<xs:field xpath="."/>
</xs:unique >
</xs:element>
<xs:complexType name="ElementType">
<xs:sequence>
<xs:element name="Type" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="ElementTypes">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="item" type="ElementType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
老实说,我已经很久没有使用 XMl 了,而且似乎找不到太多关于处理元素值(而不是属性)处的键的在线文档。