3. 属性の宣言
前章では、Complex Typeの定義における子供要素の指定の仕方について見ていきました。本章では、Complex Typeの属性宣言の部分について、説明したいと思います。
3.1 属性の宣言
属性の宣言は、attribute要素を使用します。
<attribute name="属性の名前" type="属性値の型"/>
属性の名前は、name属性の値に記述します。名前に使用できる文字は、「要素と属性に使用できる文字」よりコロンを除いたものになります。
属性の型には、Simple Typeの型を指定します。Simple Typeとは内容に子供要素を含まない型です。属性の値には、テキストしか含むことができないので、属性値の型は当然、Complex TypeではなくSimple Typeになります。以上からもわかるように、XML Schemaには「要素用のデータ型」「属性用のデータ型」というものはなく、すべてのデータ型は、共通で指定できます。よって、ある要素のために作成した型を属性値の型として使用することは可能です。Simple Typeについては、次章で詳しく説明します。
さて、Complex Type定義の中で属性の指定を行う場合、属性の指定は、要素の内容モデル(子供要素の構造など)の指定の後に記述することに注意してください。以下に例を示します。
<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>
上の、PurchaseOrderTypeという名前のComplex Typeを定義では、orderDateというdate型の属性を指定しています。
また、要素と同様に、既にある属性を参照することができます。参照する場合は、ref属性を使用します。
<attribute ref="属性の名前"/>
属性にも、schema要素の直下で宣言されているグローバル属性と、型定義の中等で宣言されているローカル属性があります。グローバル属性、ローカル属性には、以下の制限があります。
- グローバル属性の宣言の際に、他の属性を参照することはできません。
- 参照できるのはグローバル属性のみです。
以下に例を示します。
<xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/> <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 ref="po:country"/> </xsd:complexType>
上の例では、まず、countryというNMTOKEN型の属性を宣言しています。その後に、USAddressというComplex Typeの型定義の中で、country属性を参照しています。