Tipos complejos y tipos simples
Después de definir el modelo de contenido de un elemento, puede decidir si desea volver a utilizar ese elemento en otra parte del esquema. Esto puede ocurrir, por ejemplo, si quiere definir un modelo de contenido para direcciones en EE UU y en Reino Unido. Algunos de los componentes de estos formatos son comunes, como la calle y la ciudad. Otros componentes, sin embargo, no lo son. Por tanto, una estrategia para solventar esas diferencias sería reutilizar loc componentes comunes en los dos modelos de contenido (EE UU y Reino Unido) y completar después cada modelo con los componentes específicos de este (como el código ZIP en EE UU y el código postal en Reino Unido). Para ello podemos crear los componentes comunes como un tipo complejo global (o crear cada uno de esos componentes comunes como elemento global) y reutilizar el tipo complejo global (o los elementos globales) en el modelo de contenido de cada tipo de dirección.
En esta sección aprenderá a trabajar con tipos complejos globales. Un tipo complejo es una definición de tipo para elementos que contienen otros elementos y/o atributos. Primero creará un tipo complejo en el nivel global y después lo extenderá para poder utilizarlo en un modelo de contenido. Más adelante aprenderá a trabajar con elementos globales.
Crear un tipo complejo global
El elemento básico Address que definió en la sección anterior (que contiene los elementos Name, Street y City) puede volver a utilizarse pero con varios formatos. Por tanto, crearemos un tipo complejo a partir de esta definición de elemento y así podremos utilizarlo de nuevo.
Para crear un tipo complejo global:
1.En la vista del modelo de contenido, haga clic con el botón derecho en el elemento Address.
2.En el menú contextual seleccione Convertir en... | complexType global. Se crea un tipo complejo global llamado AddressType y se le asigna este tipo al elemento Address del modelo de contenido de Company. El contenido del elemento Address es el modelo de contenido de AddressType, que aparece dentro de un recuadro amarillo. Observe que ahora el tipo de datos del elemento Address es AddressType.
3.Haga clic en el icono "Mostrar nodos globales" para volver a la vista general del esquema, donde podrá ver todos los componentes globales del esquema.
4.En el ayudante de entrada "Componentes" haga clic en los iconos de expansión de las opciones element y complexType para ver las construcciones de esquema correspondientes.
La vista general del esquema ahora muestra dos componentes globales: el elemento Company y el tipo complejo AddressType. El ayudante de entrada "Componentes" también muestra el tipo complejo AddressType.
5.Haga clic en el icono "Vista del modelo de contenido" de AddressType para ver su modelo de contenido (ver imagen siguiente). Observe qué forma tiene el contenedor del tipo complejo.
6.Haga clic en el icono "Mostrar nodos globales" para volver a la vista general del esquema.
Extender la definición de un tipo complejo
Ahora vamos a usar el componente global AddressType para crear dos tipos de direcciones para sendos países. Pero antes debemos definir un tipo complejo nuevo basado en el componente básico AddressType y después extenderemos esa definición.
Para ello siga estas instrucciones
1.Cambie a la vista general del esquema. (Si se encuentra en la vista del modelo de contenido, haga clic en el icono "Mostrar nodos globales" .)
2.Haga clic en el icono "Anexar" situado en la esquina superior izquierda de la vista. Aparecerá este menú:
3.Seleccione la opción ComplexType. Aparece una línea nueva en la lista de componentes y el cursor se coloca en el campo pertinente para que pueda escribir el nombre del componente.
4.Escriba US-Address y pulse la tecla Entrar. (Si en lugar de un guión escribe un espacio, el nombre del elemento aparecerá en color rojo. Esto indica que utilizó un carácter no válido.)
5.Haga clic en el icono "Vista del modelo de contenido" de US-Address para ver el modelo de contenido del tipo complejo nuevo. El modelo de contenido está vacío (ver imagen siguiente).
6.En el ayudante de entrada "Detalles", haga clic en el cuadro combinado base y seleccione la opción AddressType.
Ahora la vista del modelo de contenido muestra el modelo de contenido de AddressType como modelo de contenido de US-Address (ver imagen siguiente). |
7.Ya podemos extender el modelo de contenido del tipo complejo US-Address con un elemento para el código postal. Para ello, haga clic con el botón derecho en el componente US-Address y en el menú contextual seleccione la opción Agregar secundario | Sequence. Aparece un compositor de secuencia nuevo fuera del recuadro de AddressType (ver imagen siguiente). Esto indica que se trata de una extensión del elemento.
8.Haga clic con el botón derecho en el compositor de clasificador secuencia y seleccione Agregar secundario | Element.
9.Llame a este elemento Zip y pulse la tecla Tabulador. El cursor aparecerá en el campo de valor del descriptor de tipo.
10.Seleccione la opción xs:positiveInteger del menú desplegable y pulse la tecla Entrar para confirmar.
Ahora tiene un tipo complejo llamado US-Address, que está basado en el tipo complejo AddressType y que se extiende con un elemento para el código postal.
Tipos simples globales
De la misma manera que el tipo complejo US-Address está basado en el tipo complejo AddressType, también puede basar elementos en un tipo simple. Las ventajas son las mismas que para los tipos complejos globales: el tipo simple se puede volver a utilizar. Para poder volver a utilizar un tipo simple, antes debe definirlo como tipo simple global. En este tutorial definirá como tipo simple el modelo de contenido de un elemento para los estados de EE UU. Este tipo simple se utilizará como base para otro elemento.
Crear un tipo simple global
Para crear un tipo simple global antes debe anexar un tipo simple nuevo a la lista de componentes globales, darle un nombre y definir su tipo de datos.
Para crear un tipo simple global:
1.Cambie a la vista general del esquema. (Si se encuentra en la vista del modelo de contenido, haga clic en el icono "Mostrar nodos globales" .)
2.Haga clic en el icono "Anexar" y seleccione la opción SimpleType del menú contextual que aparece.
3.Llame US-State a este tipo simple que acaba de crear.
4.Pulse la tecla Entrar para confirmar. Se crea el tipo simple US-State y aparece en la lista de tipos simples del ayudante de entrada "Componentes" (haga clic en el icono de expansión de simpleType para verlo).
5.En el ayudante de entrada "Detalles" (ver imagen siguiente), coloque el cursor en el campo de valor de restr y escriba xs:string o seleccione xs:string del menú desplegable del campo de valor de restr.
Esto crea un tipo simple llamado US-State, que tiene el tipo de datos xs:string. Este componente global ya se puede usar en el modelo de contenido de US-Address.
Usar un tipo simple global en un modelo de contenido
Puede usar un tipo simple global en un modelo de contenido para definir el tipo de un componente. En nuestro ejemplo usaremos US-State para definir un elemento llamado State en el modelo de contenido de US-Address.
Para ello haga lo siguiente:
1.En la vista general del esquema, haga clic en el icono "Vista del modelo de contenido" situado junto al componente US-Address.
2.Haga clic con el botón derecho en el compositor de secuencia situado en la parte inferior y seleccione Agregar secundario | Element.
3.Llame a este elemento nuevo State.
4.Pulse la tecla Tabulador y el cursor se coloca en el campo de valor del descriptor de tipo.
5.Seleccione la opción US-State en el menú desplegable de este cuadro combinado.
Ahora el elemento State está basado en el tipo simple US-State.
Crear otro tipo complejo basado en AddressType
Ahora vamos a crear un tipo complejo global que contendrá direcciones en el Reino Unido (UK). El tipo complejo se basa en AddressType y se extiende para ajustarse al formato de las direcciones postales del Reino Unido.
Para ello haga lo siguiente:
1.En la vista general del esquema cree un tipo complejo global llamado UK-Address que debe basarse en AddressType (base=AddressType).
2.En la vista del modelo de contenido de UK-Address añada un elemento llamado Postcode que debe ser de tipo xs:string. Así debe ser el modelo de contenido de UK-Address:
Nota: | en esta sección aprendió a crear tipos complejos y tipos simples globales, que se pueden usar en definiciones de modelos de contenido. La ventaja de usar tipos globales es que se pueden volver a utilizar en múltiples definiciones. |