跨元素的唯一属性值

时间:2019-07-12 23:28:56

标签: xml xsd xsd-validation

我知道当一个元素存在多个(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,但是没有运气。即使vinNumbercar的{​​{1}}匹配,示例XML仍会验证

truck

0 个答案:

没有答案