XSD唯一约束不起作用(仍然有效)

时间:2016-05-25 10:13:17

标签: xml xpath xsd

我正在使用此代码:

<xsd:complexType name="list">
    <xsd:sequence>
        <xsd:element name="book" type="bookType" maxOccurs="unbounded">
            <xsd:unique name="idUnique">
                <xsd:selector xpath="name"/>
                <xsd:field xpath="@id"/>
            </xsd:unique>
        </xsd:element>
    </xsd:sequence>
</xsd:complexType>

问题在于无论我尝试什么,唯一约束都不起作用。我正在使用命名空间,xpath,整个XSD代码,但仍然没有。我正在尝试将其应用于此XML文件

    <list>
       <book>
           <name id="125695">Book Name</name>
           <releaseDate>2012-08-24</releaseDate>
           <author>...
           ...
       </book>
       <book>...<book>
    </list>

每当我输入具有相同ID的另一本书时,验证仍然是成功的。我开始非常绝望了。我不知道出了什么问题。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

唯一性约束必须指定应该唯一的内容以及必须唯一的范围。在XSD中,他们首先使用选择器和字段元素;它们通过与表示范围的元素相关联来完成第二个(每个标识约束的范围仅限于一个元素)。

通过在您所说的book元素上放置唯一性约束&#34;任何book元素中没有两个name / @ id属性可能具有相同的值。&#34;如果您想说的是文档中没有两个book / name / @id属性可能具有相同的值,那么您需要将约束放在文档最外层元素的声明(或任何包含的元素)上所有book元素。)