Elementos complejos XSD
Un elemento complejo contiene 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 clases de elementos complejos:
- elementos vacios
- elementos que contienen solo otros elementos
- elementos que contienen solo texto
- elementos que contienen tanto otros elementos como texto
Nota: ¡Cada uno de estos elementos también puede contener atributos!
Ejemplos de elementos complejos
Un elemento XML complejo, "producto", que está vacío:
<product pid="1345"/>
Un elemento XML complejo, "empleado", que contiene solo otros elementos:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Un elemento XML complejo, "comida", que contiene solo texto:
<food type="dessert">Ice cream</food>
Un elemento XML complejo, "descripción", que contiene elementos y texto:
<description>
It happened on <date lang="norwegian">03.03.99</date> ....
</description>
Cómo definir un elemento complejo
Mire este elemento XML complejo, "empleado", que contiene solo otros elementos:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Podemos definir un elemento complejo en un esquema XML de dos maneras diferentes:
1. El elemento "empleado" se puede declarar directamente al nombrar el elemento, así:
<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 usa el método descrito anteriormente, solo el elemento "empleado" puede usar el tipo complejo especificado. Tenga en cuenta que los elementos secundarios, "firstname" y "lastname", están rodeados por el indicador <sequence>. Esto significa que los elementos secundarios deben aparecer en el mismo orden en que se declaran. Aprenderá más sobre los indicadores en el capítulo Indicadores XSD.
2. El elemento "empleado" puede tener un atributo de tipo que haga referencia al nombre del tipo complejo a utilizar:
<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 hacer referencia al mismo tipo complejo, 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>
También puede basar un tipo complejo en un tipo complejo existente y agregar algunos 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>