⑨XMLスキーマで一意キーとなる属性を定義

すっかり忘れていました・・・w
XMLスキーマの書き方について、学んだ事を書いていきます。


XMLスキーマで一意キーとなる属性を定義してみます。
簡単なサンプルを作ってみます。


■Unique.xml

<?xml version="1.0"  encoding="UTF-8"?>
<itemList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Unique.xsd">
 <item id="1"/>
 <item id="2"/>
 <item id="3"/>
</itemList>


■Unique.xsd

<?xml version="1.0"  encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="itemList" type="itemListType">
    <xsd:unique name="itemId">
      <xsd:selector xpath="item" />
      <xsd:field xpath="@id" />
    </xsd:unique>
  </xsd:element>

  <xsd:complexType name="itemListType">
    <xsd:sequence>
      <xsd:element name="item" type="itemType" minOccurs="0" maxOccurs="unbounded" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="itemType">
    <xsd:attribute name="id" type="xsd:string" use="required" />
  </xsd:complexType>

</xsd:schema>


「itemListType」、「itemType」を定義しました。
タグの子要素は、タグです。
タグは、「id属性」を持っていて、
で、「id属性」はユニークである事を指定しています。

<xsd:element name="itemList" type="itemListType">
    <xsd:unique name="itemId">
      <xsd:selector xpath="item" />
      <xsd:field xpath="@id" />
    </xsd:unique>
  </xsd:element>


Eclipseで、XMLスキーマ検証してみます。
XMLファイルを開いて、右クリックメニューの「検証」で、XMLスキーマ検証します。


エラーは出ませんね。


Unique.xmlタグのid属性を書き換えて、同じid属性がある状態にしてみます。
■Unique.xml

<?xml version="1.0"  encoding="UTF-8"?>
<nameList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Unique.xsd">
  <itemList>
   <item id="1"/>
   <item id="2"/>
   <item id="1"/>
  </itemList>
</nameList>


「Unique.xsd」では、id属性はユニークであると指定しているので、エラーになりますね。