複合型を拡張した複合型では、属性・要素を既存の定義に追加できました。
では、単純型を拡張した複合型はどんなものが定義できるのでしょう。
単純型を拡張した複合型では、
<要素 属性名="属性値">ほげほげ</要素>
の形式のみ定義できます。(属性は複数でもかまいません)
残念ながら、
<要素>ほげほげ<子要素>ふがふが</子要素>げほげほ</要素>
のような形式は定義できません。
<一週間>
<曜日 名="月">うんじゃらげ</曜日>
<曜日 名="火">はんじゃらげ</曜日>
<曜日 名="水">すいすいすい</曜日>
<曜日 名="木">も~りもり</曜日>
<曜日 名="金">きんきらきん</曜日>
<曜日 名="土">ぎんぎらぎん</曜日>
<曜日 名="日">らんららんららん</曜日>
</一週間>
たとえば上記の XML インスタンス文書に対する、XML Schema は下記のようになります。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="一週間">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="曜日" type="曜日型" maxOccurs="7"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="曜日型">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<!-- ここに xsd:element を定義することはできない -->
<xsd:attribute name="名" type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:schema>
<要素 属性名="属性値">ほげほげ</要素> の形式なんて、しょっちゅうでてくるわりには結構面倒な記述をしなければなりません。
ところが、実はこれ以外にも方法はあります。
<xsd:complexType name="曜日型" mixed="true">
<xsd:attribute name="名" type="xsd:string"/>
</xsd:complexType>
これだけでおっけい!!
要は混合内容を使用するということです。
どうみてもこっちのほうが簡単です。
しかも混合内容なので、後から子要素を追加するのも簡単です。
どうしても、子要素を追加させたくなく、属性だけを追加した型を定義するときには、単純型を拡張した複合型定義を使うといいのかもしれません。