我知道当一个元素存在多个(Unique value across elements in XSD)时如何检查该元素的值的唯一性
但是,如何检查元素中属性值的唯一性?例如,在下面的示例中,我想检查以确保vinNumber
的值始终是唯一的。
下面的示例应该失败。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="inventory"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:inventory="inventory"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="garage">
<xs:complexType>
<xs:sequence>
<xs:element ref="inventory:vehicle" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="vehicle">
<xs:complexType>
<xs:choice>
<xs:element ref="inventory:car"/>
<xs:element ref="inventory:truck"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="car">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="vinNumber" use="required" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="truck">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="vinNumber" use="required" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
和XML
<?xml version="1.0" encoding="UTF-8"?>
<garage xmlns="inventory"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="inventory file:test.xsd">
<vehicle>
<car vinNumber="12345">Honda Civic</car>
</vehicle>
<vehicle>
<truck vinNumber="12345">Ford F150</truck>
</vehicle>
</garage>
我尝试添加xs:unique
,但是没有运气。即使vinNumber
和car
的{{1}}匹配,示例XML仍会验证
truck