Elementos Compostos do XSD

Elemento composto contém outros elementos e/ou atributos.

O que é um elemento composto?

Elemento composto é um elemento XML que contém outros elementos e/ou atributos.

Existem quatro tipos de elementos composto:

  • Elementos vazios
  • Elementos que contêm outros elementos
  • Elementos que contêm apenas texto
  • Elementos que contêm elementos e texto

Notas:Os elementos mencionados podem conter atributos!

Exemplos de elementos composto

O elemento composto, "product", está vazio:

<product pid="1345"/>

O elemento composto, "employee", contém apenas outros elementos:

<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>

O elemento composto, "food", contém apenas texto:

<food type="dessert">Sorvete</food>

O elemento composto, "description", contém elementos e texto:

<description>
Ocorreu em <date lang="norwegian">03.03.99</date> ....
</description>

Como definir um elemento composto?

Veja este elemento XML composto, "employee", que contém apenas outros elementos:

<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>

No XML Schema, temos duas maneiras de definir elementos compostos:

1. Ao nomear este elemento, você pode declarar diretamente o elemento "employee", assim:

<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" pode usar o tipo composto especificado. Observe que seus elementos filhos, "firstname" e "lastname", estão envolvidos no indicador <sequence>. Isso significa que os elementos devem aparecer na ordem em que foram declarados. Você verá Indicadores XSD Esta seção ensina mais sobre os indicadores.

2. O elemento "employee" pode usar a propriedade type, que serve para referenciar o nome do tipo composto a ser usado:

<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 usar o mesmo tipo composto, por exemplo:

<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 adicionar elementos sobre um elemento composto existente, com base em algum elemento composto, assim:

<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>