XML Schema達人への道
基礎1:宣言と型定義
(株)日本ユニテック
奥井 康弘
お詫び
[xsd:allの指定]の部分で誤りがあり、2003年2月3日に訂正いたしました。読者の方々には大変ご迷惑をおかけいたしました。内容をご確認ください。 |
<この記事はDigital
Xpress 2001 Vol.5(10-11月号)に掲載されたものです>
さて、今回から本格的にXML Schema(スキーマ)のお話をいたしましょう。このXML Schema、今年の5月にW3Cの正式な勧告になったことで、今後実装が進み利用する機会も出てくると考えられます。「難しい」と言われるXML
Schemaですが、ひとつひとつ勉強を積み重ねて行けば攻略も可能です!!さあ、みんなで一緒にXML Schemaを勉強しましょう!
<<前ページ「要素宣言」の方法
型に名前を付けて参照する
さて、XML Schemaでは、同じ型定義があったときに、型を独立して定義し名前を付けることができます。そして、その名前を使ってデータ型を呼び出したのと同じようにxsd:elementのtype属性で参照を行います。
たとえば、itemの内容である型を名前をつけて、それを参照する方法を取ると次のようになります。
<xsd:element name="item" type="itemType"/>
<xsd:complexType name="itemType">
<xsd:sequence>
<xsd:element ref="name"/>
<xsd:element ref="price"/>
</xsd:sequence>
</xsd:complexType>
このようにしておけば、同じ型を使う要素宣言が複数ある場合に、名前付きの型定義を参照するだけで済みますので、XML Schema作成の効率を上げることができます。他のxsd:elementの中で型を定義するので名前の付かない型定義を匿名の型定義と呼びます。
属性を宣言する
では、DTDとの対比で説明するXML Schemaの機能として、属性宣言(attribute declaration)について説明しましょう。先ほどの例でmenu要素に店の名前をrestaurant属性として入れることにします。DTDでは、次のような属性リスト宣言を行いました。
<!ATTLIST menu restaurant CDATA #IMPLIED>
この指定では、CDATA型で指定しても指定しなくてもよい属性としてrestaurant属性を宣言しています。
XML Schemaでは、属性はxsd:attributeを使って宣言します。データ型は要素で説明したのと同じXML
Schema Part2のビルトインデータ型を使用します。指定してもしなくてもよいというのは、use属性で"option"と指定します。DTDにあった#REQUIREDの場合これが"required"となります。
<!ATTLIST menu restaurant CDATA #IMPLIED>
↓
<xsd:attribute name="restaurant" type="xsd:string"
use="option"/>
さて、DTDではmenu要素に属する属性であるということが分かりましたが、xsd:attributeには、そのような情報がありません。どの要素の属性かというのは、xsd:attributeの書く位置で判断されます。つまり、menu要素の属性であることを示すには、その複合型定義の中に要素の出現指定の後に属性宣言を書きます。したがって、この場合次のような指定になります。
DTDでは、#IMPLIEDの部分に明示的にデフォルト値を入れることができましたが、それはdefault属性で行います。もしrestaurant属性を書かない場合に"XPress亭"であることにしたい場合は、次のような指定になります。
<xsd:element name="menu">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="item"
maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="restaurant"
type="xsd:string" use="option" default="Xpress亭"/>
</xsd:complexType>
</xsd:element>
属性を宣言するxsd:attributeの書き方
●データ型をtype属性で指定する
●use属性で必須(required)かオプション(optional)かを指定する
●デフォルト値があればdefault属性で指定する
●ある要素に属する属性はその要素宣言のxsd:complexTypeの最後に指定する
今回は、DTDからの"直訳"型のXML Schema指定として要素宣言、型定義、属性宣言の3つについて説明しました。次回は、型宣言をもう少し詳しく説明し、XML
Schemaならではの考え方について説明します。ではまたお会いしましょう。
>>続く記事「型宣言」について
関連サービス
XMLスキーマの策定、作成業務
関連キーワード: XMLスキーマ
関連キーワード: 型定義

|