Los indicadores se utilizan para definir cómo los elementos pueden ser organizados dentro de un esquema. Son componentes clave para modelar la estructura de los documentos XML, permitiendo especificar la secuencia, la elección, y la agrupación de elementos, así como la ocurrencia de los mismos. Los indicadores más comunes incluyen xs:sequence, xs:choice, y xs:all, cada uno ofreciendo un modelo de organización distinto para los elementos dentro de un tipo complejo.
El indicador xs:sequence se utiliza para definir un grupo de elementos que deben aparecer en un orden específico dentro del documento XML. Cada elemento dentro de un xs:sequence puede tener su propio indicador de cardinalidad (por ejemplo, minOccurs y maxOccurs), lo que permite controlar cuántas veces puede aparecer un elemento
El indicador xs:choice permite que uno de los elementos del grupo sea seleccionado. Es útil cuando se quiere ofrecer varias opciones dentro de un documento, pero solo se permite una elección entre ellas.
El indicador xs:all se utiliza para definir un grupo de elementos que pueden aparecer en cualquier orden en el documento XML. A diferencia de xs:sequence, el orden de los elementos no importa. Sin embargo, cada elemento solo puede ocurrir una vez como máximo.
Los indicadores de cardinalidad minOccurs y maxOccurs se pueden aplicar a elementos dentro de xs:sequence, xs:choice, y a veces dentro de xs:all (con limitaciones), para definir cuántas veces pueden aparecer esos elementos. Por defecto, estos valores son 1, indicando que el elemento debe aparecer exactamente una vez, pero pueden ser ajustados para permitir más flexibilidad.
Los indicadores de grupo xs:group y xs:attributeGroup son indicadores de grupo que permiten definir conjuntos de elementos y atributos, respectivamente, que pueden ser reutilizados en múltiples definiciones de tipos complejos. Esto ayuda a evitar la redundancia y facilita el mantenimiento del esquema al permitir la actualización de la estructura del documento en un solo lugar.
El elemento xs:group se utiliza para definir un grupo de elementos que pueden incluirse en múltiples definiciones de tipo complejo. Esto permite reutilizar la definición de parte de la estructura del documento en varios tipos, lo que hace que el esquema sea más fácil de mantener y actualizar.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Definición de grupo de elementos -->
<xs:group name="informacionContacto">
<xs:sequence>
<xs:element name="telefono" type="xs:string"/>
<xs:element name="email" type="xs:string"/>
</xs:sequence>
</xs:group>
<!-- Uso del grupo en un tipo complejo -->
<xs:complexType name="Persona">
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:group ref="informacionContacto"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
De manera similar, xs:attributeGroup se utiliza para definir un conjunto de atributos que pueden ser reutilizados en múltiples definiciones de tipo complejo. Esto es útil para agrupar atributos comunes que se aplican a varias entidades en el esquema.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Definición de grupo de atributos -->
<xs:attributeGroup name="atributosIdentificacion">
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="fechaRegistro" type="xs:date"/>
</xs:attributeGroup>
<!-- Uso del grupo de atributos en un tipo complejo -->
<xs:complexType name="Empleado">
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
</xs:sequence>
<xs:attributeGroup ref="atributosIdentificacion"/>
<xs:attribute name="departamento" type="xs:string"/>
</xs:complexType>
</xs:schema>