XSD で型の拡張と制限を定義するための形式のニュアンスを理解するのに苦労しています。W3Schools リファレンスによると:
simpleContent
「テキストのみの複合型またはコンテンツとしての単純型の拡張または制限」を定義し、要素を含まないcomplexContent
混合コンテンツまたは要素のみを含む複合型の「拡張または制限」を定義します
XSD が拡張機能と制限をこれらのコンテナーの 1 つに含める必要がある理由、さらに、拡張機能と制限のみがそれを必要とする理由は明らかではありません。すべての「コンテンツ」をコンテナーで定義する必要がある場合は、もう少し理にかなっていますが、そうではありません。基本型では、コンテンツ (sequence
など) は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>
代わりにこのように書くことができないのはなぜですか?
<xs:complexType name="fullpersoninfo">
<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:complexType>
それともこのように?
<xs:complexType name="fullpersoninfo" extends="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:complexType>
このように定義されたのには何らかの理由があるに違いないと思いますが、その理由についての手がかりは見つかりません。