XML スキーマの複合要素
XSD 複合要素
複合要素には、他の要素や属性が含まれます。
h2>複合要素とは何ですか?
複合要素は、他の要素や属性を含む XML 要素です。
複合要素には 4 つのタイプがあります:
空の要素
他の要素を含む要素
テキストのみを含む要素
要素とテキストの両方を含む要素
注: 上記のすべての要素には属性を含めることができます。
複合要素の例
複合要素「product」は空です:
<product pid="1345"/>
複合要素「employee」には他の要素のみが含まれています:
<従業員>
<名>ジョン</名>
<lastname>Smith</lastname>
</employee>
<名>ジョン</名>
<lastname>Smith</lastname>
</employee>
テキストのみを含む複合 XML 要素「food」:
<food type="dessert">Icecream</food>
複合 XML 要素、「description」には要素とテキストが含まれます:
<description>
それは <date lang="norwegian">03.03.99</date> に発生しました ....
</説明>
それは <date lang="norwegian">03.03.99</date> に発生しました ....
</説明>
複合要素を定義するにはどうすればよいですか?
他の要素のみを含む複合 XML 要素「employee」を見てください:
<employee>
<名>ジョン</名>
<lastname>Smith</lastname>
</employee>
<名>ジョン</名>
<lastname>Smith</lastname>
</employee>
XML スキーマでは、複合要素を定義する 2 つの方法があります:
1 この要素に名前を付けることで、「employee」要素のステートメントを直接変更できます。 、次のようにします:
<xs:element name="employee">
<xs:complexType>
<xs:シーケンス>
<xs:要素名="firstname" type="xs:string"/>
<xs:要素名="姓" タイプ="xs:文字列"/>
</xs:シーケンス>
</xs:complexType>
</xs:element>
<xs:complexType>
<xs:シーケンス>
<xs:要素名="firstname" type="xs:string"/>
<xs:要素名="姓" タイプ="xs:文字列"/>
</xs:シーケンス>
</xs:complexType>
</xs:element>
上記の方法を使用すると、指定された複合タイプは「従業員」のみが使用できます。その子要素である「firstname」と「lastname」がインジケーター <sequence> で囲まれていることに注意してください。これは、子要素が宣言された順序で出現する必要があることを意味します。インジケーターの詳細については、「XSD インジケーター」セクションで説明します。
2. "employee" 要素は、使用される複合タイプの名前を参照するために使用される type 属性を使用できます:
<xs:element name="employee" type="personinfo"/> ;
<xs:complexType name="personinfo">
<xs:シーケンス>
<xs:要素名="firstname" type="xs:string"/>
<xs:要素名="姓" タイプ="xs:文字列"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="personinfo">
<xs:シーケンス>
<xs:要素名="firstname" type="xs:string"/>
<xs:要素名="姓" タイプ="xs:文字列"/>
</xs:sequence>
</xs:complexType>
上記の方法を使用すると、次のように、複数の要素で同じ複合タイプを使用できます:
<xs:element name= "従業員" type="個人情報"/>
<xs:要素名="学生" type="個人情報"/>
<xs:要素名="メンバー" type="個人情報"/> ;
<xs:complexType name="personinfo">
<xs:シーケンス>
<xs:要素名="firstname" type="xs:string"/>
<xs:要素名="姓" タイプ="xs:文字列"/>
</xs:sequence>
</xs:complexType>
<xs:要素名="学生" type="個人情報"/>
<xs:要素名="メンバー" type="個人情報"/> ;
<xs:complexType name="personinfo">
<xs:シーケンス>
<xs:要素名="firstname" type="xs:string"/>
<xs:要素名="姓" タイプ="xs:文字列"/>
</xs:sequence>
</xs:complexType>
次のように、既存の複合要素の上に複合要素をベースにして、いくつかの要素を追加することもできます:
<xs:element name="employee" type="fullpersoninfo"/> :complexType name="人物情報">
<xs:シーケンス>
<xs:要素名="firstname" type="xs:string"/>
<xs:要素名="姓" タイプ="xs:文字列"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="fullpersoninfo">
<xs:complexContent>
<xs:extensionbase="personinfo">
<xs:シーケンス>
<xs:要素名="アドレス" type="xs:string"/>
<xs:要素名="都市" タイプ="xs:文字列"/>
<xs:要素名="国" type="xs:string"/>
</xs:シーケンス>
</xs:拡張子>
</xs:complexContent>
</xs:complexType>
<xs:シーケンス>
<xs:要素名="firstname" type="xs:string"/>
<xs:要素名="姓" タイプ="xs:文字列"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="fullpersoninfo">
<xs:complexContent>
<xs:extensionbase="personinfo">
<xs:シーケンス>
<xs:要素名="アドレス" type="xs:string"/>
<xs:要素名="都市" タイプ="xs:文字列"/>
<xs:要素名="国" type="xs:string"/>
</xs:シーケンス>
</xs:拡張子>
</xs:complexContent>
</xs:complexType>