XML Schema 2章 Complex Type
- 2.1 XML Schema サンプル
- 2.2 要素の宣言
- 2.3 Complex Typeの定義
- 2.4 子供要素
- 2.5 sequence, choice, all
- 2.6 minOccursとmaxOccurs
- 2.7 モデルグループ
- 2.8 いろいろなComplex Type
- 2.9 まとめ
2.2 要素の宣言
新規に要素を宣言する場合、XML Schemaではelement要素により、要素の宣言を行います。
<element name="要素の名前" type="要素の型" />
要素の名前は、name属性の値に記述します。名前に使用できる文字は、「要素と属性に使用できる文字」よりコロンを除いたものになります。
さて、型です。XML Schemaでは要素の内容や要素に付随する属性、属性値に関する制限はすべて、「型」により指定します。以下に例を示します。
<xsd:complexType name="PurchaseOrderType"> <xsd:sequence> <xsd:element name="shipTo" type="po:USAddress"/> <xsd:element name="billTo" type="po:USAddress"/> <xsd:element ref="po:comment" minOccurs="0"/> <xsd:element name="items" type="po:Items"/> </xsd:sequence> <xsd:attribute name="orderDate" type="xsd:date"/> </xsd:complexType> <xsd:complexType name="USAddress"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="state" type="xsd:string"/> <xsd:element name="zip" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/> </xsd:complexType>
po.xmlを見てみると、shipTo要素とbillTo要素は、5つの子供要素(name、street、city、state、zip)とひとつの属性(country)を持つことがわかります。このように、子供要素や属性の構造が全く等しいです。このような場合、shipTo要素とbillTo要素で重複して内容の記述をするのは、冗長です。上の例では、shipTo要素とbillTo要素に共通の「型」をUSAddressという名前で定義しています。USAddress型は、complexType要素で、定義されています。shipTo、billTo、2つの要素はPurchaseOrderType型の定義の中で新たに宣言されています。2つの要素の型は、等しくUSAddressです。このように、要素の内容に関しても「型」として、名前を付けて定義できることにより、スキーマ内でも再利用が可能です。(さらに、これら型は、Namespaceを使用することにより、他のスキーマからも参照可能です。Namespaceについては、後ほど詳しく見ていきます。)