連載
» 2004年04月29日 00時00分 公開

SEのためのXML Schema入門(6):属性のデータ型、デフォルト値、グループ (1/2)

この連載では、XML Schemaについて解説します。簡単なXMLの構造をXML Schemaにより記述できるようになることを目標に、XML Schemaの概要、要素・属性の定義、Complex TypeやSimple Type、属性グループについて解説していきます。連載を読むに当たり、整形式のXMLに関して十分理解していることを前提とします。

[小野彩子,株式会社 四次元データ]

 本稿でこの連載も最終回になります。前回はユーザー定義型を解説しました。今回は、XML Schemaの属性を定義するより詳しい内容を解説します。

属性に関する基本事項

 前回まではXML Schemaの要素を中心に解説してきました。今回はもう1つのXMLの重要な部品、「属性」について説明します。属性とはその名のとおり、要素に情報を付加するために使用します。XML Schemaでは、要素と同様に属性に関しても

  • 属性値の形式はどのようなものか
  • 必須属性なのか、それとも書かなくてもよい属性なのか
  • 属性を記述しなかった場合、属性の「デフォルト値」は何か

など、細かい制限を設定できます。

 まずは、属性の定義の方法を復習しましょう。今回も、発注データを表すXML文書を例に取り上げます。

<order>
  <orderItem id="4-8443-1780-6" />
</order>
リスト1 発注データXML1

 orderItem要素は、商品番号を表すid属性を持ちます。

図1 発注データXML1のツリー構造 図1 発注データXML1のツリー構造

 属性はxsd:attribute要素を使用して宣言します。

<xsd:element name="orderItem">
  <xsd:complexType>
    <xsd:sequence>  ←空要素を記述
    </xsd:sequence>  ←空要素を記述
    
    <!--属性の宣言を行っている-->
    <xsd:attribute name="id" type="xsd:string"/>
  </xsd:complexType>
</xsd:element>
リスト2 発注データXML1のスキーマ定義

 属性の名前は、要素と同じようにname属性の値に指定します。「id」という名前の属性を宣言するので、name属性の値には「id」と記述します。属性のデータ型は、type属性を使用して指定します。id属性は文字列の形式をしていますので、XML Schemaの基本データ型で「文字列」を表す「xsd:string」を指定します。

 ところで、属性はxsd:complexType要素の中で、子要素について記述した後に宣言しますが、orderItem要素は子要素を持ちません。このような場合でも、xsd:complexType要素の中に空のxsd:sequence要素を記述し、その後に属性の宣言を行います。

ユーザー独自のデータ型を属性に指定する

 前回、要素のデータ型を新たに作成する方法について説明しました。作成したデータ型は、要素だけでなく属性にも使えます。例えば、id属性の値は商品番号を表します。商品番号は「数字1個-数字4個-数字4個-数字1個」という形式です。DTDなどの以前のスキーマ言語では、id属性の値が正しい形式かどうか、検証するプログラムを新たに作成する必要がありました。XML Schemaを使用すれば、「id属性の値は数字1個-数字4個-数字4個-数字1個という形式である」と宣言するだけで、XML パーサが検証を行ってくれます。

 属性のデータ型を指定する方法は、要素とまったく同じです。まずは、商品番号の形式「数字1個-数字4個-数字4個-数字1個」を表す「idType」データ型を作成します(新たにデータ型を作成する方法は「第5回 ユーザー独自のデータ型を作ろう」を参照してください)。idTypeデータ型ができたら、xsd:attributeのtype属性の値に指定します。

<xsd:attribute name="id" type="idType"/>

書かなければいけない? 書かなくてもよい?

 ところで、発注データXML1では「どの商品を発注したか」を表すid属性は非常に重要です。order要素のid属性は必ず指定されていなければいけません。属性が「必ず指定しなければいけないのか、書かなくてもよいのか」をxsd:attribute要素のuse属性で指定します。

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

 id属性は「必ず記述しなければならない」属性ですので、use属性の値には「必須」を表す「required」を指定します。use属性には、ほかにも以下の3種類の値を指定できます。

属性値 内容
required 属性は必ず書かなければならない
optional 属性は書かなくてもよい。もちろん書いてもよい
prohibited 属性は書いてはならない
表 use属性の値

 xsd:attribute要素にuse属性が指定されていなかった場合は、「書いても書かなくてもよい」属性という意味になります。これは、use属性が指定され、値が「optional」である場合と同じ意味になります。

属性のデフォルト値

 今度は、orderItem要素に発注数量を表す「quantity」属性を追加しましょう。

<order>
  <orderItem id="4-8443-1780-6" quantity="3"/>
</order>
リスト3 発注データXML2

 quantity属性は「書かなくてもよい」属性です。ただし、quantity属性が指定されていなかった場合は、「1個」発注した、つまり「quantity="1"」と指定されていると見なして処理することにします。XML Schemaでは、属性が書かれていない場合に使用する、属性の「デフォルト値」を指定できます。属性の「デフォルト値」は、xsd:attribute要素のdefault属性を使って指定します。

<xsd:attribute name="quantity" type="xsd:integer" default="1"/>

 quantity属性は「書かなくてもよい」属性ですので、特にuse属性を指定しません。ただし、「指定しない場合はquantity="1"と見なす」ので、default属性を指定し、値に「1」を記述します。

 このように、xsd:attributeのtype属性、use属性、default属性を組み合わせて指定することにより、いろいろな属性を作成できます。(次ページに続く

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。