XML Schemaで文字列パターンを定義するXMLテクニック集(9)(3/3 ページ)

» 2004年01月14日 10時00分 公開
[山田祥寛@IT]
前のページへ 1|2|3       

XML Schemaで属性グループを定義する

アイコン

共通する属性のグループを複数個所に記述する場合には、属性グループを別の場所で定義しておき、それを参照できると便利です。<xsd:attributeGroup>要素を使えば属性グループの定義と参照が可能になります。

カテゴリ XML Schema
関連要素 <xsd:attributeGroup>
関連記事 XML Schemaで要素モデルを定義する

 別稿「XML Schemaで要素モデルを定義する」では、<xsd:group>要素を利用して要素モデル(グループ)を定義・参照する方法について紹介しました。このように、要素グループをモデル化することによって、複数個所で共通的に使用される要素モデルを簡潔に記述できるようになると同時に、スキーマに変更があった場合のコード修正を容易にします。

 では、要素グループではなく、属性グループを指定したい場合にはどのようにしたらよいのでしょうか。本稿では、複数個所から参照(共有)可能な属性グループを定義する<xsd:attributeGroup>要素の用法について紹介します。

 まずは具体的なサンプルを見てみることにしましょう。

books_attrs.xsd

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="books">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="book" type="book_type"
          minOccurs="0" maxOccurs="unbounded" />
      </xsd:sequence>
      <xsd:attribute
          name="name" type="xsd:string" use="required" />
    </xsd:complexType>
  </xsd:element>
  <xsd:attributeGroup name="bookAttrs">
    <xsd:attribute
      name="isbn" type="xsd:string" use="required" />
    <xsd:attribute
      name="cdrom" type="xsd:boolean" use="optional" />
  </xsd:attributeGroup>

  <xsd:complexType name="book_type">
    <xsd:sequence>
      <xsd:element name="title" type="xsd:string" />
      <xsd:element name="author" type="xsd:string" />
      <xsd:element name="published" type="xsd:string" />
      <xsd:element name="price" type="xsd:positiveInteger" />
      <xsd:element name="publishDate" type="xsd:date" />
      <xsd:element name="category" type="xsd:string" />
      <xsd:element name="keywords" type="xsd:string" />
    </xsd:sequence>
    <xsd:attributeGroup ref="bookAttrs" />
  </xsd:complexType>
</xsd:schema>


 別稿「XML Schemaで要素モデルを定義する」と比べてみると、<xsd:attributeGroup>要素の用法がほとんど<xsd:group>要素のそれと変わらないことが分かるはずです。

(1)属性グループを定義する

 属性グループを定義する場合の基本的な構文は、以下のとおりです。

<xsd:attributeGroup name="属性グループ名">
  属性群の定義
</xsd:attributeGroup>


 属性グループを定義する場合には、<xsd:attributeGroup>要素の配下に<xsd:attribute>要素のほか、<xsd:attributeGroup>、<xsd:anyAttribute>要素などを含めることが可能です。<xsd:attributeGroup>要素を追加することで、複層的に属性グループを定義、拡張できるというわけです。<xsd:anyAttribute>要素については、あらためて別稿で紹介します。

(2)定義済みの属性グループを参照する

 定義済みの属性グループを参照するには、<xsd:complexType>要素などの配下に以下のように記述します。

<xsd:attributeGroup ref="属性グループ名" />


 ref属性には(1)で定義したname属性に対応する属性グループ名を指定する必要があります。


 この操作によって、上のサンプルでは、<xsd:attributeGroup name="…">で指定された属性グループ「bookAttrs」(isbn、cdrom属性)が<book>要素(複雑型“book_type”)に追加されました。定義された属性グループに対して、さらに属性ノードを追加したい場合には、<xsd:attributeGroup ref="…" />に続けて<xsd:attribute>要素などを記述することもできます。

 実際に、妥当性検証を行いたい場合には、別稿「XML SchemaでXML文書の妥当性を検証する」のサンプルを参考にしてみるとよいでしょう。変更個所は、XMLSchemaCache.addメソッドの第2引数(XML Schemaのファイル名)のみです。スキーマ文書を書いてみるだけでは、スキーマ文書そのものの妥当性を判断できませんが、パーサの処理を介することでスキーマの正否を確認できます。

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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