- 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.4 子供要素
Complex Type型は、element要素で宣言・指定されている要素が、子供要素として含まれます。
<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="Items"/> </xsd:sequence> <xsd:attribute name="orderDate" type="xsd:date"/> </xsd:complexType>
上の例では、PurchaseOrderTypeという名前のComplex Typeを定義しています。complexType要素の内容には、4つのelement要素が含まれています。よって、PurchaseOrderTypeは4種類の子供要素を含む方であることがわかります。
子供要素を指定する場合は、新たに宣言する場合と、既存の要素を参照する場合があります。既存の要素を参照する際は、ref属性を使用します。
<element ref="要素の名前"/>
PurchaseOrderTypeの定義の3つの要素、shipTo、billTo、itemsは新たに宣言されている要素です。新規に要素が宣言された場合は、name属性が存在します。対して、3つ目の要素は、既に宣言されているcomment要素を参照しています。 参照している場合、ref属性が存在します。
要素には、2種類あります。schema要素の直下で宣言されているものと、Complex Type定義の中で宣言されているものです。前者をグローバル要素といいます。後者をローカル要素といいます。po.xsdでは、purchaseOrderおよびcommentの2つの要素がグローバル要素になります。それ以外のshipTo等の要素はすべてローカル要素です。グローバル要素、ローカル要素には、以下の制限があります。
- ルート要素は必ず、グローバル要素として宣言しなければなりません。
- グローバル要素の宣言の際に、他の要素を参照することはできません。
- 参照できるのはグローバル要素のみです。
DTDには、ローカル、グローバルという考え方はなく、要素はすべてグローバル要素になります。ローカル要素は、XML Schemaにより新たに導入された考え方です。グローバル、ローカルといった考え方は、Namespaceと関係しています。詳細は、Namespaceのところで詳しく説明します。