Los grupos de sustitución son una característica
de esquema XML que proporciona un medio para sustituir un elemento por otro en un
mensaje XML. Un grupo de sustitución es una lista de elementos globales que pueden
aparecer en lugar de otro elemento global, denominado elemento de cabecera.
Un grupo de sustitución se define estableciendo la propiedad
Grupo de sustitución en un elemento global
(el elemento miembro) de forma que apunte a otro elemento
global (el elemento de cabecera). Este añade el elemento miembro al
grupo de sustitución del elemento de cabecera.
Nota: Si está generando diccionarios desde el conjunto de mensajes y desplegándolos
en
WebSphere Message Broker, deberá leer el tema
Restricciones de esquema en el modelo de mensaje
y tener en cuenta la sección relacionada con los grupos de sustitución.
Consejo: Si los mensajes no se devuelven nunca como XML o si tiene
un modelo de mensaje simple, deberá tener en cuenta la posibilidad de utilizar
un tipo complejo o un grupo
con la Composición establecida en Elección, en lugar de utilizar grupos de sustitución.
Elementos
- Elementos de cabecera
- Un elemento de cabecera es simplemente un elemento que se puede sustituir. Cuando se
analiza un mensaje, puede aparecer uno de los elementos miembros en lugar del
elemento de cabecera sin producir un error de validación.
- Elementos abstractos
- Un elemento abstracto es un elemento de cabecera que se debe sustituir. El
atributo 'abstracto' del elemento así lo indica. Normalmente, los elementos abstractos tienen otros elementos
en el grupo de sustitución - de lo contrario, no sirven de mucho. Siempre que aparezca un elemento abstracto en una definición de mensaje, deberá aparecer
en su lugar un miembro del grupo de sustitución.
Atributos
- Atributo bloque en elementos
- El atributo bloque en un elemento limita
el conjunto de elementos globales que pueden sustituir el elemento. El atributo bloque puede tomar cualquier subconjunto de los
valores restricción, extensión,
sustitución
o todo.
- Si el atributo bloque contiene restricción,
un elemento que esté basado en una restricción del tipo del elemento no
podrá sustituir el elemento.
- Si el atributo bloque contiene extensión, un elemento que esté basado en una
extensión del tipo del elemento no podrá sustituir el elemento.
- Si el atributo bloque contiene sustitución, un elemento que sea miembro
del grupo de sustitución del elemento no podrá sustituir el elemento.
- Si el atributo bloque contiene
todo, se aplicarán todas las limitaciones
indicadas más arriba.
- Atributo final en elementos
- El atributo final en un elemento limita
el conjunto de elementos globales que pueden ser miembros del grupo de sustitución del elemento. El atributo final puede tomar cualquier
subconjunto de los valores restricción, extensión o todo.
- Si el atributo final contiene restricción, un elemento que esté basado en
una restricción del tipo del elemento no podrá estar en el grupo de sustitución
del elemento.
- Si el atributo final contiene extensión, un elemento que esté basado
en una extensión del tipo del elemento no podrá estar en el grupo de sustitución
del elemento.
- Si el atributo final contiene
todo, se aplicarán las dos limitaciones
indicadas más arriba.
- Atributo bloque en tipos complejos
- El atributo bloque en un tipo complejo
limita el conjunto de otros tipos que pueden sustituir a dicho tipo. El atributo bloque puede tomar los valores restricción, extensión
o todo. Los significados de estos
valores son los mismos que los mostrados más arriba para el atributo bloque
en un elemento. Un elemento que es miembro de un grupo de sustitución sólo puede
sustituir el elemento de cabecera si el tipo es compatible con el atributo bloque
del tipo del elemento de cabecera.
- Atributos bloque y
final por omisión
- Se puede establecer un valor por omisión para los atributos
bloque
y final a nivel de archivo de
definición de mensajes. Si se ha establecido un valor por omisión para uno de estos
atributos o para ambos y no se ha establecido a nivel de objeto el atributo
bloque o final pertinente, se utilizará el
valor por omisión para dicho objeto. Puede alterar temporalmente el valor por omisión
a nivel de objeto.