XSD 复合要素

複合要素は他の要素及び/または属性を含んでいます。

複合要素とは何ですか?

複合要素とは、他の要素及び/または属性を含むXML要素です。

複合要素には4種類あります:

  • 空要素
  • 他の要素を含む要素
  • テキストのみを含む要素
  • 要素とテキストを含む要素

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

複合要素の例

複合要素「product」は空です:

<product pid="1345"/>

複合要素「employee」は、他の要素のみを含んでいます:

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

複合要素「food」は、テキストのみを含んでいます:

<food type="dessert">アイスクリーム</food>

複合要素「description」は、要素とテキストを含んでいます:

<description>
それは <date lang="norwegian">03.03.99</date> に起こりました...
</description>

複合要素はどう定義しますか?

この複合XML要素「employee」を見てください。他の要素を含んでいます:

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

XML Schemaでは、複合要素を定義する方法が2種類あります:

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"要素はtype属性を使用できます。この属性の役割は、使用する複合タイプの名前を参照することです:

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