XMLデータの構文ルールを記述するXML Schemaでは、要素の配下にテキストデータ以外にも子要素を持つ場合、「複雑型要素」を使います。子要素の順序や登場回数を記述する方法を解説します。
カテゴリ | XML Schema | |
関連要素 | <xsd:complexType>、<xsd:sequence> | |
関連記事 | XML Schemaで単純型要素を定義する | |
XML Schemaにおいては、要素型を「配下にテキストしか持たない」か「子要素や属性を持つか」によって区別します。前者を単純型要素(Simple Type)、後者を複雑型要素(Complex Type)といいます。
これはただ単に「概念」の違いだけではなく、構文においても違いがあります。
くどくど説明するよりも、まずは具体的な例を見てみましょう。以下は、ルート要素<books>の配下に複数の<book>要素を持ち、さらにその配下に個々の書籍属性を表す複数の子要素から構成されるbook.xmlとそのスキーマデータのbook.xsdです。
[book.xml] |
[book.xsd] |
要素配下に要素(もしくは属性)を含む場合には、<xsd:element>要素配下に<xsd:complexType>要素を記述します。<xsd:complexType>要素は子要素や属性の情報、また、その登場順や回数を定義します。
<xsd:complexType>要素の<xsd:sequence>要素は、その配下の要素(<xsd:element>)が順番に登場することを意味します。例えば、下記のようなXML Schemaであれば、<title>、<author>、<published>、<price>、<publishDate>要素が順番に記述されなければなりません。
<xsd:sequence> |
また、<xsd:element>要素では要素の登場回数やカスタムの要素型を参照することができる点に注目してください。以下の部分がそれです。
<xsd:sequence> |
minOccurs属性は最小登場回数を、maxOccures属性は最大登場回数を表します。つまり、minOccures属性が0の場合はその要素が任意(登場しなくてもよい)であることを表しますし、1以上の場合には必須であることを示します。maxOccurs属性はminOccurs属性よりも等しいか大きくなければなりませんが、等しい場合、指定要素はきっちり指定回数だけ登場しなければならないことを意味します。もしも0回以上、1回以上というように上限を設けたくない場合には、特殊な値としてmaxOccures属性に“unbounded”を指定します。
上記のtype属性は参照する要素型を表します。この場合、
<xsd:complexType name="book_type"> |
に対応します。つまり、<xsd:complexType>要素によって定義しておいたデータ型(子要素の並び順や個々のデータ型)を、<xsd:element>要素は引用することができるというわけです。このような参照の機能によって、XML Schemaでは、同様の構成を持つ複雑型要素を簡潔に定義することが可能となります。
Copyright © ITmedia, Inc. All Rights Reserved.