ホーム HTML CSS XML JAVASCRIPT   PHP SQL MORE...   リファレンス 事例集    

XSD 複合型要素

« 前章へ 次章へ »

複合型要素には、他の要素や属性が含まれます。


複合型要素とは何でしょうか ?

複合型要素は、他の要素や属性を含むXML要素です。

4種類の複合型要素があります:

  • 空要素
  • 他の要素だけを含む要素
  • テキストだけを含む要素
  • 他の要素とテキストの両方を含む要素

注:これらの各要素は、属性を含むこともできます !


複合型要素の例

空の複合型 XML 要素、"product":

<product pid="1345"/>

他の要素だけを含む複合型 XML 要素、"employee" :

<employee>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</employee>

テキストだけを含む複合型 XML 要素、"food" :

<food type="dessert">Ice cream</food>

要素とテキストの双方を含む複合型 XML 要素、"description" :

<description>
It happened on <date lang="norwegian">03.03.99</date> ....
</description>


複合型要素の定義方法

他の要素だけを含む、この複合型 XML 要素、"employee" を見てください:

<employee>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</employee>

2つの方法で、XMLスキーマの複合型要素を定義することができます:

1. "employee" 要素は、次のように要素へ名前を付けることにより、直接宣言できます:

<xs:element name="employee">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

上記の方法を使用すれば、"employee" 要素だけが指定の複合型を使用できます。 子要素の "firstname" と "lastname" が<sequence> インジケータで囲まれることに注意してください。 これは、宣言した順序で子要素が出現しなければならないことを意味しています。 XSD インジケータ の章でインジケータに関して更に学習します。

2. "employee" 要素は、使用する複合型の名前を参照するタイプ属性を持つことができます:

<xs:element name="employee" type="personinfo"/>

<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:element name="employee" type="personinfo"/>
<xs:element name="student" type="personinfo"/>
<xs:element name="member" type="personinfo"/>

<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: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>

« 前章へ 次章へ »