①XMLスキーマで属性の定義

XMLスキーマの書き方について、学んだ事を書いていきます。


XMLでは項目の他に、属性を定義する事ができます。
XMLスキーマでも、属性の定義ルールを記載して、チェックする事ができます。


簡単なサンプルを作ってみます。


■Attribute.xml

<?xml version="1.0"  encoding="UTF-8"?>
<greeting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Attribute.xsd" attribute="Hello World!!">
  Hello World!!
</greeting>


タグに属性として、「attribute="Hello World!!"」を追加しました。


■Attribute.xsd

<?xml version="1.0"  encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="greeting" type="greetingType" />
  <xsd:complexType name="greetingType">
    <xsd:simpleContent>
      <xsd:extension base="xsd:string">
        <xsd:attribute name="attribute" type="xsd:string" use="required" />
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
</xsd:schema>


属性を定義する場合は、複合型で定義する必要があります。

<xsd:element name="greeting" type="greetingType" />

の「type="greetingType"」で、タグの型定義は、greetingType型を参照すると宣言します。
greetingType型は、

<xsd:complexType name="greetingType"></xsd:complexType>

で定義します。


内では、

<xsd:extension base="xsd:string">

で文字列型を継承し、

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

で属性を定義しています。
これで、タグは、文字列型の項目値と属性を持つタグになりました。


のuse属性で、属性の必須有無を指定しています。

属性値 内容
required 属性は必須
optional 属性は任意(書かなくても良い)


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


エラーは出ませんね。


Attribute.xmlタグのattribute属性を削除して、検証してみます。
■Attribute.xml

<?xml version="1.0"  encoding="UTF-8"?>
<greeting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Attribute.xsd">
  Hello World!!
</greeting>


「Attribute.xsd」では、タグのattribute属性は必須属性なので、検証エラーになります。