XML XSD Schema - Enforce Unique Attribute Values in Schema
@BatteryBackupUnit has the right idea, but the syntax is more like:
<xs:element name="Values"> <xs:complexType> <xs:sequence> <xs:element ref="Add" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:unique name="UniqueAddKey"> <xs:selector xpath="Add" /> <xs:field xpath="@Key" /> </xs:unique></xs:element>
More on Michael Kay's answer: If your schema (XSD) declares a namespace, you must include this in your selection.xpath. If you are using Microsoft Visual Studio 2010, you may find a namespace automatically declared.
<xs:schema id="MyData" targetNamespace="http://tempuri.org/MyData.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/MyData.xsd" xmlns:mstns="http://tempuri.org/MyData.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema"> ... <xs:unique name="UniqueAddKey"> <xs:selector xpath="mstns:Add" /> <xs:field xpath="@Key" /> </xs:unique></xs:schema>
you can achieve this by using xs:unique
<xs:element name="Instrument"> <xs:complexType> <xs:all> <xs:unique name="ModuleId"> <xs:selector xpath="./*" /> <xs:field xpath="@id" /> </xs:unique> </xs:all> </xs:complexType></xs:element>
The above example will enforce a unique attribute "id" for all Instrument Elements.there's also xs:key, which can be used to establish a Primary Key - Foreign Key relationship:http://www.datypic.com/books/defxmlschema/chapter17.html