XML Schema complexType要素

定義と使用法

complexType要素は複雑なタイプの定義を行います。複雑なタイプの要素は、他の要素および/または属性を含むXML要素です。

要素情報

出現回数 スキーマ内では無制限;要素内では一度のみ。
親要素 element、redefine、schema
内容 annotation、simpleContent、complexContent、group、all、choice、sequence、attribute、attributeGroup、anyAttribute

文法

<complexType
id=ID 
name=NCName 
abstract=true|false 
mixed=true|false
block=(#all|リストの(extension|restriction))
final=(#all|リストの(extension|restriction))
任意の属性
>
(annotation?,(simpleContent|complexContent|((group|all| 
choice|sequence)?,((attribute|attributeGroup)*,anyAttribute?))))
</complexType>

(? 符号は complexType 要素内で宣言され、要素は0回または1回出现します、* 符号は要素が0回または複数回出现する場合を宣言します。)

属性

id

選択可能。この要素のユニークな ID を規定します。

name

選択可能。要素の名前を規定します。

abstract

選択可能。インスタンスドキュメントで複雑なタイプを使用できるかどうかを規定します。この値が true である場合、要素は直接この複雑なタイプを使用することができず、この複雑なタイプから派生した複雑なタイプを使用する必要があります。デフォルト値は false です。

mixed

選択可能。この複雑なタイプの子要素間に文字データが出现することを許可するかどうかを規定します。デフォルト値は false です。

  • simpleContent 要素が子要素である場合、mixed 属性は許可されません。
  • complexContent 要素が子要素である場合、この mixed 属性は complexContent 要素の mixed 属性でオーバーライドされます。

block

選択可能。指定された派生タイプを持つ複雑なタイプがこの複雑なタイプに代わりになるのを防ぐ。この値は #all またはリストを含むことができ、リストは extension または restriction のサブセットです:

  • extension - この複雑なタイプに代わりになるのを防ぐために拡張で派生された複雑なタイプを防ぎます。
  • restriction - この複雑なタイプに代わりになるのを防ぐために制限で派生された複雑なタイプを防ぎます。
  • #all - すべての派生された複雑なタイプがこの複雑なタイプに代わりになるのを防ぎます。

final

選択可能。この complexType 要素から派生された指定されたタイプを防ぐ。この値は #all またはリストを含むことができ、リストは extension または restriction のサブセットです。

  • extension - 拡張を通じて派生を防ぎます。
  • restriction - 制限を通じて派生を防ぎます。
  • #all - 全ての派生(拡張と制限)を防ぎます。

任意の属性

オプション。非スキーマ命名空間を持つ他の属性を指定します。

例1

以下の例では、名前が「note」の複雑なタイプの要素があります:

<xs:element name="note">
    <xs:complexType>
      <xs:sequence>
	<xs:element name="to" type="xs:string"/>
	<xs:element name="from" type="xs:string"/>
	<xs:element name="heading" type="xs:string"/>
	<xs:element name="body" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
</xs:element>

例2

以下の例では、複雑なタイプ「fullpersoninfo」が、3つの追加の要素(address、city、country)を使用して、派生されたタイプを拡張し、別の複雑なタイプ「personinfo」から派生しています:

<xs:element name="employee" type="fullpersoninfo"/>
<xs:complexType name="personinfo">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
</xs:complexType>
<xs:complexType name="fullpersoninfo">
  <xs:complexContent>
    <xs:extension base="personinfo">
      <xs:sequence>
        <xs:element name="address" type="xs:string"/>
        <xs:element name="city" type="xs:string"/>
        <xs:element name="country" type="xs:string"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

上記の例では、上の「employee」要素は「firstname」、「lastname」、「address」、「city」および「country」の要素を順序で含む必要があります。