Um elemento complexo contém outros elementos e / ou atributos.
O que é um elemento complexo?
Um elemento é um elemento complexo XML que contém outros elementos e / ou atributos.
Existem quatro tipos de elementos complexos:
- elementos vazios
- elementos que contêm apenas outros elementos
- elementos que contêm apenas texto
- elementos que contêm os dois outros elementos e texto
Note: Cada um destes elementos pode conter atributos bem!
Exemplos de elementos complexos
Um elemento XML complexo, "product" , que está vazio:
<product pid="1345"/>
Um elemento XML complexo, "employee" , que contém apenas outros elementos:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Um elemento complexo XML, "food" , que contém apenas texto:
<food type="dessert">Ice cream</food>
Um elemento XML complexo, "description" , que contém ambos os elementos e texto:
<description>
It happened on <date lang="norwegian">03.03.99</date> ....
</description>
Como definir um elemento complexo
Olhe para este elemento XML complexo, "employee" , que contém apenas outros elementos:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Podemos definir um elemento complexo em um esquema XML de duas maneiras diferentes:
1. O "employee" elemento pode ser declarado diretamente, nomeando o elemento, como este:
<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>
Se você usar o método descrito acima, apenas o "employee" elemento pode utilizar o tipo complexo especificado. Note-se que os elementos filho, "firstname" e "lastname" , estão rodeados pela <sequence> indicador. Isto significa que os elementos filhos devem aparecer na mesma ordem em que são declaradas. Você vai aprender mais sobre indicadores no capítulo XSD indicadores.
2. O "employee" elemento pode ter um atributo type que se refere ao nome do tipo complexo de usar:
<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>
Se você usar o método descrito acima, vários elementos podem se referem ao mesmo tipo complexo, como este:
<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>
Você também pode basear um elemento complexo em um elemento complexo existente e adicionar alguns elementos, como este:
<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>