Sustitución de elementos XSD
Con esquemas XML, un elemento puede sustituir a otro elemento.
Sustitución de elementos
Digamos que tenemos usuarios de dos países diferentes: Inglaterra y Noruega. Nos gustaría poder permitir que el usuario elija si quiere usar los nombres de los elementos en noruego o los nombres de los elementos en inglés en el documento XML.
Para resolver este problema, podríamos definir un grupo de sustitución en el esquema XML. Primero, declaramos un elemento principal y luego declaramos los otros elementos que indican que son sustituibles por el elemento principal.
<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
En el ejemplo anterior, el elemento "nombre" es el elemento principal y el elemento "navn" es sustituible por "nombre".
Mira este fragmento de un esquema XML:
<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo">
<xs:sequence>
<xs:element ref="name"/>
</xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo"/>
<xs:element name="kunde" substitutionGroup="customer"/>
Un documento XML válido (según el esquema anterior) podría verse así:
<customer>
<name>John Smith</name>
</customer>
o así:
<kunde>
<navn>John Smith</navn>
</kunde>
Sustitución de elementos de bloqueo
Para evitar que otros elementos se sustituyan con un elemento específico, use el atributo de bloque:
<xs:element name="name" type="xs:string" block="substitution"/>
Mira este fragmento de un esquema XML:
<xs:element name="name" type="xs:string" block="substitution"/>
<xs:element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo">
<xs:sequence>
<xs:element ref="name"/>
</xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo" block="substitution"/>
<xs:element name="kunde" substitutionGroup="customer"/>
Un documento XML válido (según el esquema anterior) tiene este aspecto:
<customer>
<name>John Smith</name>
</customer>
PERO ESTO YA NO ES VÁLIDO:
<kunde>
<navn>John Smith</navn>
</kunde>
Uso de grupo de sustitución
El tipo de los elementos sustituibles debe ser el mismo o derivado del tipo del elemento principal. Si el tipo del elemento sustituible es el mismo que el tipo del elemento principal, no tendrá que especificar el tipo del elemento sustituible.
Tenga en cuenta que todos los elementos en el grupo de sustitución (el elemento principal y los elementos sustituibles) deben declararse como elementos globales, de lo contrario, ¡no funcionará!
¿Qué son los Elementos Globales?
¡Los elementos globales son elementos que son hijos inmediatos del elemento "esquema"! Los elementos locales son elementos anidados dentro de otros elementos.