この連載では、XML Schemaについて解説します。簡単なXMLの構造をXML Schemaにより記述できるようになることを目標に、XML Schemaの概要、要素・属性の定義、Complex TypeやSimple Type、属性グループについて解説していきます。連載を読むに当たり、整形式のXMLに関して十分理解していることを前提とします。
本稿でこの連載も最終回になります。前回はユーザー定義型を解説しました。今回は、XML Schemaの属性を定義するより詳しい内容を解説します。
前回まではXML Schemaの要素を中心に解説してきました。今回はもう1つのXMLの重要な部品、「属性」について説明します。属性とはその名のとおり、要素に情報を付加するために使用します。XML Schemaでは、要素と同様に属性に関しても
など、細かい制限を設定できます。
まずは、属性の定義の方法を復習しましょう。今回も、発注データを表すXML文書を例に取り上げます。
<order> |
リスト1 発注データXML1 |
orderItem要素は、商品番号を表すid属性を持ちます。
属性はxsd:attribute要素を使用して宣言します。
<xsd:element name="orderItem"> |
リスト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> |
リスト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属性を組み合わせて指定することにより、いろいろな属性を作成できます。(次ページに続く)
Copyright © ITmedia, Inc. All Rights Reserved.