XML XSD Schema - Enforce Unique Attribute Values in Schema

拈花ヽ惹草 提交于 2019-11-27 18:42:34

@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>

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

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>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!