XML Schema 7章 Mixed Content、Anonymous Type
- 7.1 Mixed Content
- 7.2 Mixed Contentの問題点
- 7.3 Anonymous Type
- 7.4 まとめ
7.3 Anonymous Type
本章まで、XML Schemaの型について説明してきました。XML Schemaでは要素の内容や属性値の「型」を作成することが出来ます。「型」に名前を付けて、要素や属性を宣言する際に、type属性の値として参照します。これにより、作成した型は複数の要素や属性の型として再利用することが出来ます。
ところで、スキーマを記述していくうちに、用途が限定されている型を作成することがあります。このような型にも、いちいち名前を付けて、別に定義するのは、少し面倒です。そのようなために、XML Schemaでは、定義された型を使用せずに、要素や属性を宣言する方法を用意しています。これをAnonymous Type(匿名型)といいます。
Complex Typeの要素の場合は、以下のように要素を宣言します。
<element name="要素の名前"> <complexType> 要素の内容モデル 属性の定義 </complexType> </element>
Simple Typeの要素の場合は、以下のように宣言します。
<element name="要素の名前"> <simpleType> 要素の内容モデル </simpleType> </element>
属性も、Simple Typeの要素と同様に、以下のように宣言できます。
<attribute name="要素の名前"> <simpleType> 属性値の型 </simpleType> </attibute>
以下に例を示します。
<xsd:element name="item" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="productName" type="xsd:string"/> <xsd:element name="quantity"> <xsd:simpleType> <xsd:restriction base="xsd:positiveInteger"> <xsd:maxExclusive value="100"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="USPrice" type="xsd:decimal"/> <xsd:element ref="po:comment" minOccurs="0"/> <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/> </xsd:sequence> <xsd:attribute name="partNum" type="po:SKU" use="required"/> </xsd:complexType> </xsd:element>
上の例では、itemという名前の要素を宣言しています。item要素を宣言しているelement要素の開始タグにtype属性はありません。さらに、element要素は空要素ではなく、complexType要素を子供要素としてもちます。よって、item要素の型は、Anonymous Typeとして、指定されています。item要素がどのような型なのかは、element要素の中に直接記述されています。item要素の子供要素のquantity要素の型も、同様にAnonymous Typeです。
7.4 まとめ
- 子供要素もテキストも含むような要素の型はMixed ContentのComplex Typeである
- Mixed ContentのComplex Typeは、mixed属性により定義する
- Mixed Contentに関しては、テキストの出現順番や、テキストの型を規定できないという問題点がある
- 型は、Anonymous Typeとして、要素宣言や属性宣言内で定義することも出来る