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

» 2004年04月29日 00時00分 公開
[小野彩子株式会社 四次元データ]
前のページへ 1|2       

属性をグループにまとめる

 さて、1つの要素に属性がたくさんあると、要素の宣言部分が複雑になります。例えば、orderItem要素を定義する部分を確認してみましょう。

<xsd:element name="orderItem">
  <xsd:complexType>
    <xsd:sequence></xsd:sequence>
    <xsd:attribute name="id" type="idType" use="required"/>
    <xsd:attribute name="quantity" type="xsd:integer"
                   default="1"/>
  </xsd:complexType>
</xsd:element>
リスト4 複雑な属性の定義

 orderItem要素の属性の数はこのサンプルでは2つだけですが、たくさんあった場合非常に読みにくくなります。このようなときは、「属性グループ」を使用し、属性の定義部分を別の個所に記述します。

 1:    <xsd:element name="orderItem">
 2:      <xsd:complexType>
 3:        <xsd:sequence></xsd:sequence>
 4:        <xsd:attributeGroup ref="orderItemAttributes"/>
 5:      </xsd:complexType>
 6:    </xsd:element>
 7:
 8:    <xsd:attributeGroup name="orderItemAttributes">
 9:      <xsd:attribute name="id" type="idType" use="required"/>
10:      <xsd:attribute name="quantity" type="xsd:integer"
                                       default="1"/>
11:    </xsd:attributeGroup>
リスト5 属性グループを使用した定義

 まず、8〜11行目で属性グループを宣言しています。属性グループとは、1つあるいは複数の属性をグループにまとめたものです。属性グループは「xsd:attributeGroup」要素を使って宣言します。属性グループの名前をname属性の値に記述します。ここでは、name属性の値の「orderItemAttributes」という名前の属性グループを宣言しています。

 どのような属性グループなのかは、xsd:attributeGroup要素の内容(開始タグと終了タグの間)に記述します。orderItemAttributes属性グループは、orderItem要素の属性、id属性とquantity属性を含むグループですので、2つの属性宣言を記述します。これで、属性グループは完成です。

 最後に、「orderItem要素は、orderItemAttributes属性グループで宣言されている属性を持つ」ということを書きます。これまでは、子要素の宣言の後に属性を1つずつ宣言していました。その代わりに属性グループを指定します。属性グループを指定する場合もxsd:attributeGroup要素を使用します。「どの属性グループを指定しているか」はref属性の値に書きます。今回は「orderItemAttributes属性グループ」を指定しますので、ref属性の値には「orderItemAttributes」と記述します。

 これだけでは、「属性グループってそんなに便利なの?」と感じる人がいるかもしれません。しかし、「属性グループ」を作成することにより、属性の宣言が再利用可能になるのです。例えば、orderItem以外で、id属性とquantity属性を持つ要素を定義したい場合があります。その場合、属性グループがなかったら要素を宣言するたびにid属性とquantity属性を宣言しなければいけません。ところが、「属性グループ」を一度作成してしまえば、ほかの要素宣言から何回でも参照できます。「属性の定義」を「グループ」にまとめて再利用することにより、スキーマをより簡単に作成できるのです。

 ほかにも、データ型や要素宣言など、XML Schemaでは一度作成したものを再利用する仕組みがいろいろ用意されています。積極的に再利用して、効率的にXML Schemaを作成しましょう。最後に、発注リストXMLのスキーマ文書全体を紹介します。

 1:  <?xml version="1.0"?>
 2:  <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 3:
 4:    <xsd:element name="order">
 5:      <xsd:complexType>
 6:        <xsd:sequence>
 7:          <xsd:element ref="orderItem" maxOccurs="10"/>
 8:        </xsd:sequence>
 9:      </xsd:complexType>
10:    </xsd:element>
11:
12:    <xsd:element name="orderItem">
13:      <xsd:complexType>
14:        <xsd:sequence></xsd:sequence>
15:        <xsd:attributeGroup ref="orderItemAttributes"/>
16:      </xsd:complexType>
17:    </xsd:element>
18:
19:    <xsd:attributeGroup name="orderItemAttributes">
20:      <xsd:attribute name="id" type="idType" use="required"/>
21:      <xsd:attribute name="quantity" type="xsd:integer"
                        default="1"/>
22:    </xsd:attributeGroup>
23:
24:    <xsd:simpleType name="idType">
25:      <xsd:restriction base="xsd:string">
26:        <xsd:pattern value="\d{1}-\d{4}-\d{4}-\d{1}"/>
27:      </xsd:restriction>
28:    </xsd:simpleType>
29:
30:  </xsd:schema>
リスト6 発注リストXML2のスキーマ定義

連載を終えて

 6回にわたりXML Schemaについて解説してきましたが、いかがだったでしょうか。この連載をきっかけにして、SEの皆さんがXMLを開発の現場に生されることを願っています。(連載完結)

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

AI for エンジニアリング
「サプライチェーン攻撃」対策
1P情シスのための脆弱性管理/対策の現実解
OSSのサプライチェーン管理、取るべきアクションとは
Microsoft & Windows最前線2024
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

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

メールマガジン登録

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