我正在编写一个xml架构。我希望某个节点基于某些内部元素是唯一的。我写了下面的架构,但它无法正常工作。我可以多次添加同一本书/员工。我希望我的书名/员工应该是唯一的,如果有人输入重复元素(节点)则通过例外 有人可以帮助我吗?提前谢谢。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3schools.com" targetNamespace="http://www.w3schools.com" elementFormDefault="unqualified">
<xs:complexType name="employee">
<xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="employees">
<xs:sequence>
<xs:element name="employees" type="employee" minOccurs="0" maxOccurs="unbounded">
<xs:unique name="uniqueId">
<xs:selector xpath="employee"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="book">
<xs:sequence>
<xs:attribute name="author" type="xs:string" use="required"/>
<xs:attribute name="title" type="xs:string" use="required"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="bookList">
<xs:sequence>
<xs:element name="bookList" type="book" minOccurs="0" maxOccurs="unbounded">
<xs:unique name="uniqueBook">
<xs:selector xpath="book"/>
<xs:field xpath="@title"/>
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="Library">
<xs:complexType>
<xs:sequence>
<xs:element name="bookList" type="bookList"/>
<xs:element name="employees" type="employees"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
答案 0 :(得分:0)
您的架构表明id
元素的employee
属性必须是唯一的,但在您的架构和实例中(作为评论发布),employee
元素都不是有一个id属性;相反,它有一个title
属性。
此外,您的employee
和book
元素在模式中声明为在命名空间中(尽管您的实例中缺少此命名空间),并且在定义选择器时忽略了此命名空间/您的唯一性约束中的字段XPath表达式。