I'm writing a xml schema. I want some node to be unique based upon some inner element. I wrote the below schema but it is not working. I am able to add same book/employee more than once. I want my book name/employee is should be unique and through exception if someone enters duplicate element(node) can someone help me in this? Thanks in advance.
<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>