5.Simple Content
前章ではSimple Typeについて説明しました。では、属性を持つSimple Typeはどのように定義すればよいのでしょうか。本章では、型の「拡張」について説明したいとおもいます。
- 5.1 Complex Typeの作成
- 5.2 Simple ContentとComplex Content
- 5.3 拡張と制限
- 5.4 Simple Content
- 5.5 まとめ
5.1 Complex Typeの作成
前章でSimple Typeの作成について説明した際に、既存のSimple Typeを基に新たに作成する、と説明しました。それでは、Complex Typeはどうでしょう。既存の型を基にして新たなComplex Typeを作成することは可能なのでしょうか。もちろん可能です。以下に例を示します。以下のようなSimple Typeの要素があります。
<xsd:element name="USPrice" type="xsd:decimal"/>
この、USPrice要素を変更して、以下のinternationalPrice要素を作成したいと考えます。
<internationalPrice currency="EUR">423.46</internationalPrice>
internaionalPrice要素は、属性を持ちます。よって、これは、Complex Typeです。しかし、子供要素をもちません。内容は、Simple Type ”decimal”と同じです。このように、既存の型、decimalにcurrency属性が追加された、新たなComplex Typeを定義することができます。
<complexType name="InternationalPriceType"> <simpleContent> <extension base="xsd:decimal"> <attribute name=currency type="xsd:string"/> </extension> </simpleContent> </complexType>
上の例では、InternationalPriceTypeという、Complex Typeを新たに作成しています。基となる型はSimple Typeのdecimalです。それでは、Complex Typeの作成について、詳しく見ていきましょう。
5.2 Simple ContentとComplex Content
既存の型より新たなComplex Typeを作成する方法について説明する前に、Content Typeについて説明したいと思います。既存の型よりComplex Typeを作成する際には、作成する型がどのContent Typeなのか、認識する必要があります。Cotent Typeには、以下の2種類があります。
Simple Content |
内容に子供要素を含まない型 |
Complex Content |
内容に子供要素を含む型 |
以下に例を示します。
<items> <item partNum="872-AA"> <productName>Lawnmower</productName> <quantity>1</quantity> <USPrice>148.95</USPrice> <comment>Confirm this is electric</comment> </item> <item partNum="926-AA"> <productName>Baby Monitor</productName> <quantity>1</quantity> <USPrice>39.98</USPrice> <shipDate>1999-05-21</shipDate> </item> </items>
上のXML文書の中では、itemsおよびitem要素は、Complex Typeになります。後の要素はSimple Typeです。itemsおよびitemは子供要素をもちます。よって、2つともComplex ContentのComplex Typeです。
<internationalPrice currency="EUR">423.46</internationalPrice>
上記、internationalPrice要素は、属性を持つためComplex Typeです。また、内容にはテキストしか含みません。よって、internationalPrice要素はSimple ContentのComplex Typeです。