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>