目次へ

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については、後ほど詳しく見ていきます。)

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp