我正在使用此代码:
<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的另一本书时,验证仍然是成功的。我开始非常绝望了。我不知道出了什么问题。谢谢你的帮助。
答案 0 :(得分:0)
唯一性约束必须指定应该唯一的内容以及必须唯一的范围。在XSD中,他们首先使用选择器和字段元素;它们通过与表示范围的元素相关联来完成第二个(每个标识约束的范围仅限于一个元素)。
通过在您所说的book
元素上放置唯一性约束&#34;任何book
元素中没有两个name / @ id属性可能具有相同的值。&#34;如果您想说的是文档中没有两个book / name / @id属性可能具有相同的值,那么您需要将约束放在文档最外层元素的声明(或任何包含的元素)上所有book
元素。)