XSD Elementos complejos


Los elementos complejos contienen otros elementos y/o atributos.


¿Qué es un elemento complejo?

Un elemento complejo es un elemento XML que contiene otros elementos y/o atributos.

Hay cuatro tipos de elementos complejos:

  • Elementos vacíos
  • Elementos que contienen otros elementos
  • Elementos que solo contienen texto
  • Elementos que contienen elementos y texto

Nota:¡Todos los elementos anteriores pueden contener atributos!


Ejemplos de elementos complejos

El elemento complejo "product" está vacío:

<product pid="1345"/>

El elemento complejo "employee" solo contiene otros elementos:

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

El elemento XML complejo "food" solo contiene texto:

Ice cream

El elemento XML complejo "description" contiene elementos y texto:

<description>
It happened on 03.03.99 ....
</description>


¿Cómo definir elementos complejos?

Considere este elemento XML complejo, "employee", que solo contiene otros elementos:

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

En XML Schema, tenemos dos formas de definir elementos complejos:

1. Mediante la denominación de este elemento, se puede declarar directamente el elemento "employee", de la siguiente manera:

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

Si utiliza el método descrito anteriormente, solo "employee" puede usar el tipo complejo especificado. Observe que sus elementos secundarios, "firstname" y "lastname", están encerrados en el indicador <sequence>. Esto significa que los elementos secundarios deben aparecer en el orden en que se declaran. En la secciónXSD Indicadoresaprenderá más sobre los indicadores.

2. El elemento "employee" puede utilizar el atributo type, cuya función es hacer referencia al nombre del tipo complejo a 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>

Si utiliza el método descrito anteriormente, varios elementos pueden usar el mismo tipo complejo, por ejemplo:

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

También puede basarse en un elemento complejo existente para crear otro elemento complejo y luego agregar algunos elementos, de la siguiente manera:

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