Transformación de UML en XSD

Tabla de contenido

Visión general

Esta transformación acepta a un paquete UML como origen y genera un esquema XML convirtiendo las clases apropiadas del paquete en elementos del esquema. El esquema generado se almacena en una carpeta denominada esquema, en un proyecto que especifique como destino de la transformación. El archivo que contiene el esquema tiene el mismo nombre que el paquete y su extensión es .xsd.

Por ejemplo, imagine que tiene un paquete UML denominado Orden de compra que contiene una clase denominada Dirección. Cuando ejecute esta transformación con este paquete como origen, se creará el siguiente esquema XML.

Si escoge un modelo UML (que tenga un paquete como mínimo) como origen, esta transformación genera un esquema XML para cada paquete del modelo que tiene un estereotipo <<XSDProfile::schema>> o una palabra clave schema. La transformación genera un esquema XML para cada paquete, si establece el valor de la propiedad de la transformación, Paquetes no marcados del proceso, en verdadero.

Tabla de contenido

Exploración de modelos de ejemplo

El software hace un paquete con un conjunto de modelos UML de ejemplo que puede utilizar como orígenes para la transformación de UML en XSD. Cuando haya instalado la transformación de UML en XSD, deberá copiar los ejemplos del directorio de instalación en el espacio de trabajo. Por ejemplo, si ha instalado el software en RSA/eclipse, los ejemplos estarán en la carpeta RSA/eclipse/plugins/com.ibm.xtools.transform.samples.uml2.xsd/examples. Haga lo siguiente para copiar los ejemplos en el espacio de trabajo:

  1. Cree un proyecto simple: Archivo > Nuevo > Proyecto... , seleccione Simple > Proyecto y pulse Siguiente.
  2. Ponga un nombre al proyecto (por ejemplo, uml2xsd.examples) y pulse Finalizar.
  3. Copie el directorio <dir_instalación>/rsa/eclipse/plugins/com.ibm.xtools.transform.uml2.xsd/examples donde <install-dir> es la ubicación en la que instaló Rational Software Development Platform.
  4. Abra uno o más modelos. Si efectúa una doble pulsación en los modelos y paquetes, se abrirán los diagramas asociados que muestran los modelos, el esquema generado y las diferentes propiedades de estereotipo y de transformación que se utilizan para generar el esquema.

NOTA: Al abrir un modelo de ejemplo puede que aparezca un diálogo que indica que el modelo está utilizando una versión antigua del perfil XSD y le pregunta si desea migrar al nuevo perfil. Pulse para migrar a la nueva versión del perfil.

Tabla de contenido

Ejecución de la transformación

Para ejecutar la transformación:

  1. En su espacio de trabajo, cree un modelo UML que contenga uno o más paquetes. Cree varias clases UML en cada uno de los paquetes.
  2. Opcionalmente, haga lo siguiente:

    Estos pasos son necesarios si desea crear un modelo UML de un esquema XML seguro. Para obtener más información sobre el modelado del esquema XML en UML, consulte el apartado Modelado de esquema XML en UML: Buenas prácticas.

  3. Cambie a la perspectiva Modelado, si no está ya en esta perspectiva.
  4. Pulse el botón derecho del ratón sobre el modelo o un paquete, a continuación, pulse Transformar > Ejecutar transformación > UML en XSD.
  5. En la ventana Ejecutar transformación, en la página Destino, especifique el proyecto en el que desea escribir los archivos de salida del esquema XSD.
  6. Pulse Ejecutar.

La transformación genera el esquema XSD y lo coloca en el proyecto especificado, en una carpeta denominada esquema. Utilice una vista de navegador para inspeccionar el esquema generado.

Tabla de contenido

Utilización del modelo de plantilla XSD

También puede crear un modelo UML utilizando el modelo de plantilla XSD. Esto tiene la ventaja de que la biblioteca del modelo necesaria, XSDDataTypes, ya está importada y el Perfil XSD se aplica a los paquetes.

  1. Crear un modelo UML.
    1. Archivo > Nuevo > Proyecto >Proyecto UML.
    2. En el diálogo Proyecto de modelado UML, especifique el nombre de proyecto y pulse Siguiente.
    3. En el diálogo resultante, seleccione   Modelo XSD  y proporcione un nombre adecuado para el modelo. (En su versión de RSA/RSM, es posible que vea dos instancias de modelo XSD en el panel Plantillas. Este defecto se ha arreglado en las versiones posteriores de RSA/RSM. Si escoge uno de los dos elementos "Modelo XSD", funcionará correctamente.)
    4. Pulse Finalizar.
  2. El modelo UML recién creado se basa en una plantilla de modelo e importará las bibliotecas de modelo necesarias. Ahora debe crear uno o más paquetes; para hacerlo:
    1. Abra el paquete, Bloque de construcción del modelo XSD.
    2. Pulse control y arrastre el paquete ${schema.name} y suéltelo en el modelo raíz.   De este modo, se creará un paquete con el Perfil de transformación XSD que ya se le aplicó.
    3. Utilice Buscar/Reemplazar para cambiar el nombre del paquete ${schema.name} por otro más apropiado.
    4. Rellene el paquete con las clases UML necesarias.
  3. Cambie a la perspectiva Modelado, si no está ya en esta perspectiva.
    1. Pulse el botón derecho del ratón sobre el modelo o un paquete, a continuación, pulse Transformar > Ejecutar transformación > UML en XSD.
    2. En la ventana Ejecutar transformación, en la página Destino, especifique el proyecto en el que desea escribir los archivos de salida del esquema XSD.
    3. Pulse Ejecutar.

La transformación genera el esquema XSD y lo coloca en el proyecto especificado, en una carpeta denominada esquema. Utilice una vista de navegador para inspeccionar el esquema generado.

Tabla de contenido

Detalles sobre la transformación

Origen de la transformación

Esta transformación acepta un modelo UML que contenga, como mínimo, un paquete o uno o más paquetes UML como origen.

Destino de la transformación

Esta transformación acepta un proyecto como destino.

Tabla de contenido

Propiedades de la transformación

Esta transformación define las siguientes propiedades de transformación:

Propiedad Descripción
Espacio de nombres de destino Espacio de nombres de destino del esquema generado por la transformación. El valor de esta propiedad es una cadena de caracteres, por ejemplo, http://www.ibm.com/SampleXSDTransformation.
Prefijo del espacio de nombres de destino Prefijo para el espacio de nombres de destino del esquema generado por la transformación. El valor de esta propiedad es una cadena de caracteres, por ejemplo, sxt.
Procesar clase UML sin estereotipo o palabra clave

Esta propiedad determina si la transformación procesa una clase UML si la clase no tiene ningún estereotipo o palabra clave asociada.

El valor de esta propiedad puede ser verdadero o falso. Por omisión, su valor está establecido en verdadero y la transformación procesa todas las clases de un paquete de nivel superior. (Actualmente, la transformación no maneja paquetes anidados.)

Si no necesita aplicar la transformación a todas las clases de un paquete, debe establecer su valor en falso y aplicar los estereotipos adecuados del Perfil XSD o palabras clave a las clases que desea transformar.

Procesar paquete UML sin estereotipo o palabra clave

Esta propiedad determina si la transformación procesa un paquete UML si el paquete no tiene ningún estereotipo o palabra clave asociada.

El valor de esta propiedad puede ser verdadero o falso. Por omisión, su valor está establecido en verdadero y la transformación procesa todos los paquetes de nivel superior. (Actualmente, la transformación no maneja paquetes anidados.)

Si no necesita aplicar la transformación a todos los paquetes de nivel superior de un modelo, debe establecer su valor en falso y aplicar el estereotipo adecuado <<esquema>> del Perfil XSD o la palabra clave esquema a los paquetes que desea transformar.

Convertir una clase anidada en tipo anónimo implícitamente

Esta propiedad determina si la transformación convierte una clase anidada en un tipo anónimo cuando no hay una asociación explícita entre la clase de anidación y la clase anidada.

El valor de esta propiedad puede ser verdadero o falso. Por omisión, su valor está establecido en falso y la transformación convierte una clase anidada en un tipo anónimo sólo si tiene una asociación de la clase de anidación. Si su valor está establecido en verdadero, todas las clases anidadas se convierten en tipos anónimos con los tipos XSD correspondientes a las clases anidadas que contienen elementos cuyos tipos son estos tipos anónimos.

La generación de tipos anónimos implícitamente estableciendo el valor de su propiedad en verdadero tiene varias limitaciones y, por lo tanto, es recomendable utilizarlo muy ocasionalmente.

Tabla de contenido

Perfil XSD

El modelado de un esquema XML seguro en UML que la transformación de UML en XSD soporte utiliza un pequeño subconjunto de construcciones UML para representar los elementos del esquema XML. Este subconjunto incluye los siguientes elementos de UML: clase, propiedad, generalización, asociación y dependencia. Para representar los elementos del esquema XML, por ejemplo, tipo simple, tipo completo, atributo y elemento, grupos reutilizables, etc. utilizando este subconjunto, debe aplicar el Perfil XSD al modelo UML de origen y marcarlo con estereotipos de este perfil y establecer las propiedades de los estereotipos en valores apropiados.

El siguiente diagrama de clase muestra el modelo UML del perfil XSD.

La tabla que sigue describe los estereotipos y sus propiedades.

Estereotipo Extensión de metaclase Propiedades Comentarios
annotation Comment kind
language
source

El comentario se convierte en información de la aplicación o en una anotación de documentación.

La propiedad kind determina el tipo de anotación: documentation y appinfo. Las propiedades language y source especifican el lenguaje natural de la documentación y el origen de más documentación respectivamente.

attribute Property (de clase) form
use

La propiedad de UML se convierte en un atributo en un tipo complejo o en un grupo de atributos si es de tipo simple y su multiplicidad es [0..1].

La propiedad de estereotipo form determina si el nombre de atributo debe ser calificado en el documento de instancia. Su valor puede ser uno de los siguientes qualified unqualified, o default. Si es default, el valor toma como valor por omisión attributeFormDefault de schema, que toma como valor por omisión unqualified.

La propiedad use determina si el atributo es opcional u obligatorio. Su valor puede ser uno de los siguientes optional, prohibited o required.  Por omisión, su valor es optional. El valor prohibited se omite en la implementación actual.

attributeGroup Class
La clase se convierte en un grupo de atributos.
complexType Class anonymous
block
final
modelGroup
maxOccurs
minOccurs
mixed

La clase se convierte en un tipo complejo.

La propiedad anónimo determina si se crea una declaración de tipo complejo de nivel superior en el esquema. Su valor puede ser verdadero o falso. Si es verdadero, no se genera ninguna declaración de tipo ni se convierte ninguna referencia a esta clase en una declaración de atributo o elemento con el tipo anónimo como tipo del atributo o el elemento. Por omisión, su valor es falso.

La propiedad block determina si se debe bloquear la sustitución de tipos. Puede tener uno de los siguientes valores: #all, extension restriction o una separada por espacios en blanco de extension y restriction. El valor #all evita todos los tipos derivados de la sustitución de este tipo, extension evita las extensiones de este tipo a partir de la sustitución para este tipo, y restriction evita las restricciones de este tipo a partir de la sustitución para este tipo. La lista, "extension restriction", tiene el mismo efecto que #all. Si no se especifica la propiedad block, el valor pasa a ser por omisión la propiedad blockDefault  de schema.

La propiedad final determina si se pueden derivar otros tipos de este. Su valor puede ser #all o una lista de  (extension o restriction).  Si su valor es #all, se inhabilita la derivación de cualquier tipo. Para un control más específico, el valor se puede establecer en una lista separada por espacios en blanco de cualquiera de las palabras clave restriction o extension . Por omisión es finalDefault de schema.

La propiedad modelGroup determina el modelo de contenido del tipo. El valor de modelGroup puede ser all, choice o sequence. El valor por omisión es sequence.

Restricción: Si el valor de modelGroup es all, el valor de anonymous debe establecerse en false. De lo contrario, puede producirse una infracción de la restricción.

Los valores de minOccurs y maxOccurs determina el número máximo y mínimo de veces que se puede producir sequence o el grupo choice en el tipo complejo. Para un grupo de modelo all, maxOccurs debe ser 1 y minOccurs puede ser sólo 0 o 1.

La propiedad boolean mixed especifica si el tipo complejo admite contenido mixto. Por omisión, su valor es falso.

element Property (de clase) block
final
form
nillable

La propiedad se convierte en un elemento.

La propiedad final sólo se aplica a los elementos globales y no a elementos locales. Determina si se pueden derivar otros tipos de este. Su valor puede ser #all o una lista de  (extension | restriction).  Si su valor es #all, se inhabilita la derivación de cualquier tipo. Para un control más específico, el valor se puede establecer en una lista separada por espacios en blanco de cualquiera de las palabras clave restriction o extension . Por omisión es finalDefault de schema.

La propiedad de estereotipo form determina si el nombre de elemento debe ser calificado en el documento de instancia. Su valor puede ser uno de los siguientes qualified unqualified, o default. Si es default, el valor toma como valor por omisión elementFormDefault de schema, que toma como valor por omisión unqualified.

La propiedad boolean nillable determina si se puede utilizar xsi:nil en la instancia para este elemento. Por omisión, su valor es falso.

enumeration Class anonymous

La clase se convierte en una enumeración XSD si tiene una relación de generalización con otra clase que representa un tipo simple.

La propiedad anonymous determina si se crea la declaración de tipo simple de nivel superior con facetas superiores en el esquema. Su valor puede ser verdadero o falso. Si es verdadero, no se genera ninguna declaración de tipo ni se convierte ninguna referencia a esta clase en una declaración de atributo o elemento con el tipo anónimo como tipo del atributo o el elemento. Por omisión, su valor es falso.

global Class

Una clase con este estereotipo se convierte en una declaración de atributo o elemento de nivel superior. La clase sólo debe tener una propiedad. Si la propiedad tiene un estereotipo o palabra clave <<attribute>>, la clase se convierte en un atributo de nivel superior. De lo contrario, se convierte en un elemento de nivel superior.

El nombre del elemento o el atributo es el mismo que el de la propiedad y el tipo es el  de la propiedad.

listOf Dependency
El cliente de la dependencia se convierte en una lista XSD cuyo tipo de elemento es el proveedor de la dependencia. Sólo puede existir una dependencia de este tipo entre dos clases que representan un tipo simple.
modelGroup Class anonymous
modelGroup

La clase se convierte en un grupo de modelo reutilizable con un modelo de contenido sequence.

La propiedad anónimo determina si se crea una declaración de grupo de nivel superior en el esquema. Su valor puede ser verdadero o falso. Si es verdadero, no se genera ninguna declaración de grupo. Cualquier referencia a esta clase se convierte en un grupo de modelos anidados. Si el valor es falso, una referencia a la clase se convierte en una referencia de grupo de modelos. Por omisión, su valor es falso.

La propiedad modelGroup determina el modelo de contenido del grupo. El valor de modelGroup puede ser all, choice o sequence. El valor por omisión es sequence.

Restricción : Si el valor de modelGroup es all, el valor de anónimo debe establecerse en false. De lo contrario, puede producirse una infracción de la restricción.

schema Package attributeFormDefault
blockDefault
elementFormDefault
finalDefault
targetNamespace
targetNamespacePrefix

El paquete y su contenido se convierten en un esquema XSD. El nombre del paquete pasa a ser el nombre del esquema (archivo).

La propiedad attributeFormDefault especifica si las declaraciones de atributos locales deben utilizar nombres calificados. Su valor puede ser qualified o unqualified. El valor por omisión es unqualified.

La propiedad   blockDefault establece el valor por omisión para el atributo block que se utiliza en el tipo complejo y las declaraciones de elemento. El atributo block determina si se debe bloquear la sustitución de elementos o la sustitución de tipos. Puede tener los valores siguientes: #all o una lista separada por espacios en blanco de uno o varios de los siguientes (extension, restriction o substitution).

La propiedad elementFormDefault especifica si las declaraciones de elementos locales deben utilizar nombres calificados. Su valor puede ser qualified o unqualified. El valor por omisión es unqualified.

La propiedad   finalDefault establece el valor por omisión para el atributo final que se utiliza en el tipo complejo, el tipo simple y las declaraciones de elemento. El atributo final determina si se debe impedir la derivación de tipos. Puede tener los valores siguientes: #all o una lista separada por espacios en blanco de (extension, restriction, substitution, list o union).

Si establece los valores de targetNamespace y targetNamespacePrefix, estos valores sobrescribirán los que haya establecido para las propiedades de transformación correspondientes, Target Namespace y Target Namespace Prefix respectivamente.

simpleType Class anonymous
final
fractionDigits
length
maxExclusive
maxInclusive
maxLength
minExclusive
minInclusive
minLength
pattern
totalDigits
whiteSpace

La clase se convierte en un tipo simple si tiene una generalización con un tipo de datos XSD incorporados, otro tipo simple o un tipo de enumeración XSD.

El valor de la propiedad anonymous puede ser verdadero o falso. Si es verdadero, la clase se trata como un tipo anónimo y no se genera ninguna declaración de tipos de nivel superior.

La propiedad final determina si se pueden derivar otros tipos de este. Su valor puede ser #all o una lista de  (extension, restriction, list o union).  Si su valor es #all, se inhabilita la derivación de cualquier tipo. Para un control más específico, el valor se puede establecer en una lista separada por espacios en blanco de cualquiera de las palabras clave restriction, extension, list o union.

El resto de las propiedades representan la facetas que define el esquema XSD. Mediante estas facetas, puede especificar un rango válido de valores, restringir la longitud y la precisión de  valores, especificar una expresión regular con la que deben coincidir los valores válidos o especificar el proceso de espacios en blanco de los tipos simples que se derivan por restricción de los tipos XSD incorporados. Para obtener más detalles, consulte la tabla Significado de las facetas.

Tenga en cuenta que no todas las facetas son aplicables a todos los tipos simples. Por ejemplo, para los tipos simples que se derivan de string, normalizedString y token, las facetas aplicables son length, minLength, maxLengthpattern y whitespace. Para obtener más detalles, consulte la tabla Tipos simples y facetas aplicables.

unionOf Dependency
El cliente de la dependencia se convierte en una unión XSD con el proveedor de la dependencia como uno de sus miembros. Una clase que representa a un tipo simple puede tener más de una dependencia de este tipo con clases (tipo simple) diferentes.
wildcard Property (de clase) processContents
namespace

La propiedad de UML se convierte en un comodín del elemento. Si la propiedad tiene la palabra clave attribute o el estereotipo <<attribute>>, además de wildcard, se convierte en un comodín del atributo.

La propiedad processContents determina la rigurosidad con que se deben validar los atributos o elementos de sustitución. Si es omitir, el procesador del esquema no realiza validaciones. Si es laxo, el procesador del esquema validará atributos o elementos para los cuales pueda encontrar declaraciones y plantear errores, si no son válidos. Si es estricto, el procesador del esquema tratará de encontrar un documento de esquema asociado al espacio de nombres y validar todos los atributos o elementos. Por omisión, su valor se establece en estricto.

La propiedad namespace especifica el espacio de nombres en el que estarán los elementos o atributos de sustitución. El valor permitido es uno de estos  (##any, ##other, list of anyURI, ##targetNamespace o ##local). Si es ##any, los atributos o elementos de sustitución pueden estar en cualquier espacio de nombres, o no estar en ningún espacio de nombres. Si es ##other, los atributos o elementos de sustitución pueden estar en cualquier espacio de nombres distinto al espacio de nombres de destino del documento, pero deben estar en un espacio de nombres. Si el documento de esquema  no tiene espacio de nombres de destino, los atributos o elementos de sustitución pueden tener cualquier espacio de nombres, pero deben tener uno. De lo contrario, puede ser una lista de valores separados por espacios en blanco que incluye algunos o todos los elementos siguientes: ##targetNamespace, #local o espacios de nombres específicos. ##targetNamespace indica que los elementos o atributos de sustitución deben estar en el espacio de nombres de destino del documento de esquema y ##local indica que los elementos o atributos de sustitución no deben estar en ningún espacio de nombres.

Tabla de contenido

Palabras clave

Si el esquema que está modelando no necesita especificar los elementos en detalle, es recomendable utilizar las palabras clave en lugar de los estereotipos. En la siguiente tabla se describen las palabras clave que soporta la transformación de UML en XSD.

Palabra clave Aplicable a elemento de UML Comentarios
annotation Comment El comentario se convierte en una anotación "appinfo" o "documentation".
attribute Property (de Clase) La propiedad se convierte en un atributo de un tipo complejo si la multiplicidad de la propiedad es [0..1].
attributeGroup Class La clase se convierte en un grupo de atributos.
complexType Class La clase se convierte en un tipo complejo.
element Property La propiedad se convierte en un elemento de un tipo complejo.
enumeration Class La clase se convierte en una enumeración XSD si tiene una relación de generalización con otra clase que representa un tipo simple.
global Class

Una clase con esta palabra clave se convierte en una declaración de atributo o elemento de nivel superior. La clase sólo debe tener una propiedad. Si la propiedad tiene un estereotipo <<attribute>> o una palabra clave attribute, la clase se convierte en un atributo de nivel superior. De lo contrario, se convierte en un elemento de nivel superior.

El nombre del elemento o el atributo se deriva del nombre de la propiedad y el tipo se deriva del  tipo de la propiedad.

listOf Dependencia entre dos clases que representan dos tipos simples El cliente de la dependencia se convierte en una lista XSD cuyo tipo de elemento es el proveedor de la dependencia. Sólo puede existir una dependencia de este tipo entre dos clases que representan un tipo simple.
modelGroup Class La clase se convierte en un grupo de modelo reutilizable con un modelo de contenido sequence.
schema Package

El paquete y su contenido se convierten en un esquema XSD. El nombre del paquete pasa a ser el nombre del esquema (archivo).

Si utiliza la palabra clave schema, debe especificar el espacio de nombres de destino y el prefijo de espacio de nombres de destino estableciendo las propiedades de transformación, Target Namespace y Target Namespace Prefix respectivamente, en los valores apropiados.

simpleType Class La clase se convierte en un tipo simple si tiene una generalización con un tipo de datos XSD incorporados u otro tipo simple.
unionOf Dependencia entre dos clases que representan dos tipos simples El cliente de la dependencia se convierte en una unión XSD con el proveedor de la dependencia como uno de sus miembros. Una clase que representa a un tipo simple puede tener más de una dependencia de este tipo con clases (tipo simple) diferentes.
wildcard Property

La propiedad de UML se convierte en un comodín del elemento. Si la propiedad tiene la palabra clave attribute, además de wildcard, se convierte en un comodín del atributo.

Tabla de contenido

Biblioteca de modelo: Tipos de datos incorporados XSD

Se incorporan cuarenta y cuatro tipos simples en la recomendación del esquema XML. Estos tipos simples representan tipos de datos comunes como cadenas de caracteres, números, valores de fecha y hora, además de tipos de herencia para los tipos de atributo en XML 1.0. XSD también proporciona doce facetas de restricción que puede utilizar para especificar un rango de valores válido de los tipos simples, restringir la longitud y la precisión de sus valores, enumerar una lista de valores válidos o especificar una expresión regular con la que deben coincidir los valores válidos.

Puede derivar tipos simples nuevos de los tipos incorporados u otros tipos simples restringiéndolos mediante el establecimiento de las facetas en los valores adecuados. Para ello, es necesario tener la representación de los tipos incorporados disponible en los modelos UML.

Los tipos simples incorporados se modelan como clases y pasan a estar disponibles en una biblioteca de modelo denominada XSDDataTypes. Debe importar la biblioteca XSDDataTypes en el modelo para acceder a estos tipos. Para importar la biblioteca de modelo XSDDataTypes en Explorador de modelos, pulse el botón derecho del ratón sobre la raíz del modelo (el mismo modelo), seleccione Importar biblioteca de modelo... y escoja XSDDataTypes en la lista desplegable.

Para definir tipos simples nuevos (tipos simples definidos por el usuario) debe especificarlos desde las clases adecuadas del modelo XSDDataTypes y utilizar las propiedades del estereotipo <<simpleType>> para restringir el valor de los tipos definidos. Por ejemplo:

Puede restringir el valor máximo de Quantity en, por ejemplo, 100 estableciendo la propiedad maxInclusive de <<simpleType>> en 100.

Tabla de contenido

Reglas de correlación de UML a XSD

El objetivo del modelado del esquema XML en UML es crear una representación visual de un esquema XML y, a continuación, generar el esquema utilizando una transformación de UML en XSD. El análisis muestra que la mayoría de las funciones fundamentales del esquema XML se pueden representar mediante elementos de modelo UML. La tabla siguiente muestra un subconjunto de la correlación entre los conceptos presentes en UML y los conceptos correspondientes en la definición de esquema XML (XSD).

Conceptos de UML Conceptos del esquema XML
Paquete Espacio de nombres único con un prefijo
Clase Tipos y grupos reutilizables
  • Tipo complejo y declaración de elemento coincidente
  • Tipo simple
  • Grupo de atributos, grupo de modelos con nombre y grupo de sustitución
Enumeración Restricción de un tipo simple de cadena de caracteres XSD con facetas de enumeración iguales a los literales de enumeración UML. Tenga en cuenta que lo que sucede con una clase UML que tiene el estereotipo <<enumeration>> del perfil XSD aplicado es diferente. La utilización de una clase UML estereotipada permite enumeraciones XSD más generales.
Propiedades de una clase Elementos y atributos de un tipo complejo
Asociación (Agregación) Elemento hijo de un elemento contenido (tipo complejo)
Generalización Derivación de tipos
  • Derivación por extensión de tipo complejo
  • Derivación por restricción de tipo complejo
  • Derivación por restricción de tipo simple
Identidad del objeto Campos de clave especificados por el usuario o mecanismo de identidades explícito (todavía no se ha implementado).

Regla de correlación: Paquete -> Esquema XSD

Elemento de UML Elemento XSD Comentarios
Paquete con estereotipo <<schema>> Esquema con un espacio de nombres de destino y un prefijo de espacio de nombres de destino El contenido de un paquete convierte un esquema en un archivo .xsd. El nombre del archivo del esquema es el mismo que el del paquete.

Las propiedades del estereotipo <<schema>>, attributeFormDefault y elementFormDefault, se pueden utilizar para especificar los atributos attributeFormDefault y elementFormDefault del esquema generado.

Si utiliza la palabra clave schema, en lugar del estereotipo, debe proporcionar el espacio de nombres de destino y su prefijo estableciendo los valores de las   propiedades de transformación, Target Namespace y Target Namespace Prefix respectivamente.

Reglas de correlación: Clase -> Tipo complejo, Propiedad -> Elemento y Propiedad -> Atributo

Elemento de UML Elemento XSD Comentarios
Clase con estereotipo <<complexType>> Tipo complejo Si la propiedad del estereotipo, modelGroup, no se establece en uno de los valores posibles, all choice o sequence, el tipo complejo se genera con un grupo de modelos sequence.
Clase con palabra clave complexType Tipo complejo El tipo complejo se genera con un grupo de modelos sequence.
Clase sin palabra clave o estereotipo Tipo complejo Un tipo complejo sólo se genera si el valor de la propiedad de transformación Process unmarked class está establecido en verdadero. De lo contrario, la clase se omite. Si se genera un tipo complejo, su grupo de modelos se establece en sequence.
Propiedad Elemento del tipo complejo
Propiedad con estereotipo <<attribute>> o palabra clave attribute. Atributo del tipo complejo

La propiedad sólo se convierte en un atributo si el tipo de la propiedad es un tipo simple y tiene una multiplicidad de [0..1]. De lo contrario, se convierte en un elemento.

Si proporciona un valor por omisión, la propiedad se convierte  en un atributo opcional con un valor por omisión. Si convierte la propiedad en de sólo lectura y proporciona un valor por omisión, se convierte en un atributo con el valor fijo por omisión. En ambos casos, debe establecer la multiplicidad de la propiedad en [0..1].

Puede utilizar la propiedad use del estereotipo <<attribute>> para que el atributo sea opcional u obligatorio. Si establece el valor de use en required, además de proporcionar un valor por omisión y pasar la propiedad a sólo lectura, el valor por omisión y la especificación de sólo lectura se omitirán.

Regla de correlación: Clase con <<global>>  -> Elemento o atributo global

Elemento de UML Elemento XSD Comentarios
Una clase con un estereotipo <<global>> o una palabra clave "global" que contiene una propiedad. Elemento o atributo global (de nivel superior).

La clase sólo debe tener una propiedad. Si la propiedad tiene un estereotipo <<attribute>> o una palabra clave attribute, la clase se convierte en un atributo de nivel superior. De lo contrario, se convierte en un elemento de nivel superior.

El nombre del elemento o el atributo se deriva del nombre de la propiedad y el tipo se deriva del  tipo de la propiedad.


Regla de correlación: Relaciones de generalización entre clases <<globales>>  -> Grupo de sustitución

Elemento de UML Elemento XSD Comentarios
Relaciones de generalización entre clases que tienen el estereotipo <<global>> aplicado. Un grupo de sustitución compuesto de elementos globales representados por las clases con estereotipos <<global>>. Para formar un grupo de sustitución de elementos globales, sus tipos (clases) deben estar en una relación de generalización equivalente.

En el ejemplo que sigue, el elemento global vestido es el principal del grupo de sustitución y los elementos globales, camisa y pantalón, son los miembros. Recuerde que los tipos de estos elementos están en una relación de generalización que es equivalente a la relación de generalización entre los elementos globales.


Regla de correlación: Clase -> Tipo simple

Elemento de UML Elemento XSD Comentarios
Clase con un estereotipo <<simpleType>> o una palabra clave simpleType

Tipo simple definido por el usuario.

Restricción de un tipo simple incorporado o de otro tipo simple definido por el usuario.

Debe tener una relación de generalización con un tipo simple incorporado o con otro tipo simple definido por el usuario o un tipo de enumeración XSD.

Regla de correlación: Clase -> Enumeración XSD

Elemento de UML Elemento XSD Comentarios
Clase con estereotipo <<enumeration>> o palabra clave enumeration Enumeración XSD.
Un tipo simple con una faceta de enumeración especificada.
Debe tener una relación de generalización con un tipo simple incorporado o con otro tipo simple definido por el usuario.

Regla de correlación: Enumeración UML -> Enumeración XSD

Elemento de UML Elemento XSD Comentarios
Enumeración UML Enumeración XSD, un tipo simple con base de restricción xsd:string y una faceta de enumeración especificada No necesita ninguna generalización con otro tipo simple.

Reglas de correlación: Clase -> Grupos reutilizables: grupo de modelos y grupo de atributos

Elemento de UML Elemento XSD Comentarios
Clase con estereotipo <<modelGroup>> Grupo de modelos con nombre Si la propiedad del estereotipo, modelGroup, no se establece en uno de los valores posibles, all, choice o sequence, el grupo de modelos se genera con un grupo de modelos sequence.
Clase con palabra clave modelGroup Grupo de modelos con nombre El grupo de modelos con nombre se genera con un grupo de modelos sequence.
Clase con estereotipo <<attributeGroup>> o con palabra clave attributeGroup Grupo de atributos Cada propiedad de la clase se convierte en un miembro del grupo de atributos, siempre que sea de un tipo que se pueda convertir en un tipo simple y tenga una multiplicidad [0..1]. De lo contrario, la propiedad se omite.

Dado que las propiedades sólo se pueden convertir en atributos XSD, no es estrictamente necesario aplicar el estereotipo <<attribute>> a las propiedades. Sin embargo, si desea especificar propiedades adicionales (como required, form, etc.) para los atributos, debe aplicar el estereotipo <<attribute>> y establecer las propiedades del estereotipo en los valores adecuados.

Regla de correlación: Derivación de clases

Elemento de UML Elemento XSD Comentarios
La clase A deriva de otra clase B.

Un tipo complejo B que es una extensión de contenido compleja del tipo complejo A.

La clase A o clase B pueden tener un estereotipo <<complexType>> o palabra clave complexType.

Ni la clase A ni la B pueden tener un grupo de modelos "all" o un modelo de contenido. El intento de ampliar las clases con grupos de modelos "all" lleva a la infracción de la restricción.

La clase B no puede tener el estereotipo <<modelGroup>> o <<attributeGroup>> ni una palabra clave modelGroup o attributeGroup. Es decir, un tipo complejo no puede ampliar un grupo de modelos o un grupo de atributos.

La clase A deriva de otra clase B con un estereotipo <<simpleType>> o una  palabra clave simpleType.

Un tipo complejo B que es una extensión de contenido simple de un tipo simple. Todas las propiedades de la clase B pasan a ser un atributo de la extensión de contenido simple.

El único objetivo de derivar de un tipo simple es añadir atributos. Por lo tanto, el tipo de una propiedad de clase B debe ser un tipo simple y su multiplicidad debe ser [0..1]. De lo contrario, el modelo infringirá la restricción.

Regla de correlación: Asociación -> Elemento de tipo complejo

Elemento de UML Elemento XSD Comentarios
Asociación (agregación de compuestos o dirigida) Clase A -> Clase B Elemento en tipo complejo A de tipo complejo B El nombre de elemento viene determinado por el nombre de rol del final de la asociación.

Regla de correlación: Propiedad -> Elemento de tipo complejo

Elemento de UML Elemento XSD Comentarios
La clase A contiene una o más propiedades del tipo de clase B Elemento en tipo complejo A de tipo complejo B El nombre de elemento viene determinado por el nombre de la propiedad.

Regla de correlación: Asociación -> Referencia de grupo de modelos y referencia de grupo de atributos

Elemento de UML Elemento XSD Comentarios

Asociación (asociación dirigida o agregación de compuestos) de la Clase A a la Clase B con un estereotipo <<modelGroup>>.

Clase A -> Clase C con estereotipo <<attributeGroup>>.

Referencia de grupo de modelos en tipo complejo A.

Referencia de grupo de atributos en tipo complejo A.


Asociación (asociación dirigida o agregación de compuestos) de Clase A con estereotipo <<modelGroup>> a Clase B también con estereotipo   <<modelGroup>> Una referencia de grupo de modelos en el grupo de modelos representada por la Clase A
Asociación (asociación dirigida o agregación de compuestos) de Clase A con estereotipo <<attributeGroup>> a Clase B también con estereotipo   <<attributeGroup>> Una referencia de grupo de atributos en el grupo de atributos representada por la Clase A.



Regla de correlación: Dependencia -> Tipos de unión y lista

Elemento de UML Elemento XSD Comentarios
Dependencia con un estereotipo <<listOf>> o una palabra clave listOf entre dos tipos simples

Tipo de lista.

El cliente de la dependencia se convierte en un tipo simple que es una lista del proveedor de la dependencia

El cliente y el proveedor de la dependencia deben ser de tipo simple y sólo debe existir una dependencia <<listOf>> entre ellos. No debe existir ninguna otra relación entre estas dos clases.

Dependencia con un estereotipo <<unionOf>> o una palabra clave unionOf entre un tipo simple de cliente y uno o más proveedores Tipo de unión.

El cliente de la dependencia se convierte en un tipo simple que es una unión de los proveedores de la dependencia.

El cliente y los suministradores de la dependencia deben ser de tipo simple y pueden haber una o más dependencias <<unionOf>> entre ellos. No debe existir ninguna otra relación entre estas clases.

Tabla de contenido

Regla de correlación: Clase -> Tipo complejo anónimo

Elemento de UML Elemento XSD Comentarios

Clase A con un estereotipo <<complexType>> y una propiedad de estereotipo anonymous = verdadero y a la que hace referencia otra clase B que representa un tipo complejo.

La clase A se convierte  en un tipo complejo anónimo.

La referencia se convierte en un atributo o elemento del tipo complejo (representado por la clase B). El tipo de elemento o atributo se define por este tipo anónimo.

El nombre de elemento o atributo viene determinado por el nombre de rol del final de la asociación o el nombre de propiedad.

Dado que la clase A se especifica como anónima, no se genera ninguna declaración de tipo complejo de nivel superior para esta clase.

Regla de correlación: Clase -> Tipo simple anónimo

Elemento de UML Elemento XSD Comentarios
Clase A con un estereotipo <<simpleType>> y una propiedad de estereotipo anonymous = verdadero y a la que hace referencia otra clase B que representa un tipo complejo.

La clase A se convierte  en un tipo simple anónimo.

La referencia se convierte en un atributo o elemento del tipo complejo (representado por la clase B). El tipo de elemento o atributo se define por este tipo anónimo.

El nombre de elemento o atributo viene determinado por el nombre de rol del final de la asociación o el nombre de propiedad.

Dado que la clase A se especifica como anónima, no se genera ninguna declaración de tipo simple de nivel superior para esta clase.

Regla de correlación: Clase-> Enumeración anónima

Elemento de UML Elemento XSD Comentarios
Clase A con un estereotipo <<enumeration>> y una propiedad de estereotipo anonymous = verdadero y a la que hace referencia otra clase B que representa un tipo complejo.

La clase A se convierte  en una enumeración anónima.

La referencia se convierte en un atributo o elemento del tipo complejo (representado por la clase B). El tipo de elemento o atributo se define por este tipo anónimo.

El nombre de elemento o atributo viene determinado por el nombre de rol del final de la asociación o el nombre de propiedad.

Dado que la clase A se especifica como anónima, no se genera ninguna declaración de tipo simple de nivel superior con faceta de enumeración para esta clase.

Regla de correlación: Referencia a grupo de modelos anónimo -> Anidación de grupos de elección y secuencia

Elemento de UML Elemento XSD Comentarios

Asociación (agregación de compuestos o dirigida) entre una clase A y una clase B con un estereotipo <<modelGroup>> y el valor de propiedad anonymous = verdadero.

Un tipo complejo que representa a la clase A que contiene el grupo de modelos del grupo de modelos con nombre representado por la clase B.

Esta correlación sólo es válida si  ni A ni B tienen un modelo de contenido all.
Asociación (agregación de compuestos o dirigida) entre una clase A con un estereotipo <<modelGroup>> y una clase B con un estereotipo <<modelGroup>> y el valor de propiedad anonymous = verdadero. Un grupo de modelos con nombre  que representa la clase A que contiene el grupo de modelos del grupo de modelos con nombre representado por la clase B. Esta correlación sólo es válida si  ni A ni B tienen un modelo de contenido all.

La referencia anterior a grupos de modelos también se puede modelar utilizando propiedades de clase.

Elemento de UML Elemento XSD Comentarios
Clase A que contiene una propiedad cuyo tipo es clase B con un estereotipo <<modelGroup>> y el valor de propiedad anonymous = verdadero. Un tipo complejo que representa a la clase A que contiene el grupo de modelos del grupo de modelos con nombre representado por la clase B. Esta correlación sólo es válida si  ni A ni B tienen un modelo de contenido all.
Clase A con un estereotipo <<modelGroup>> que contiene una propiedad cuyo tipo es clase B con un estereotipo <<modelGroup>> y el valor de propiedad anonymous = verdadero. Un grupo de modelos con nombre  que representa la clase A que contiene el grupo de modelos del grupo de modelos con nombre representado por la clase B. Esta correlación sólo es válida si  ni A ni B tienen un modelo de contenido all.

Regla de correlación: Clase anidada -> Tipo complejo anónimo

Elemento de UML Elemento XSD Comentarios
Clase A que contiene una clase B anidada con una asociación entre A y B. Elemento del tipo complejo A de un tipo anónimo B.

Debe existir una asociación entre la clase de anidación y la clase anidada.

Si la clase A contiene una propiedad de tipo B en lugar de una asociación, se obtiene el mismo componente de esquema.



Regla de correlación: Clase anidada -> Tipo simple anónimo

Elemento de UML Elemento XSD Comentarios
Clase A que contiene una clase B anidada con un estereotipo <<simpleType>> o una palabra clave, simpleType, y que tiene una asociación entre A y B. Elemento del tipo complejo A de un tipo simple anónimo B.

Debe existir una asociación entre la clase de anidación y la clase anidada.

Si la clase A contiene una propiedad de tipo B en lugar de una asociación, se obtiene el mismo componente de esquema.

Regla de correlación: Comentario UML -> Anotación

Elemento de UML Elemento XSD Comentarios
Comentario Anotación Un comentario de un elemento de UML se convierte en una anotación de documentación de XSD.
Comentario con estereotipo <<annotation>> Anotación El tipo de anotación, documentation o appinfo, depende del valor de la propiedad kind del estereotipo <<annotation>>. Si el valor de kind es A, se crea un elemento documentación; si el valor de kind es documentación. Se crea un elemento appinfo si el valor es información de aplicación. El valor por omisión de clase es documentación.




Regla de correlación: Propiedad -> Comodín del elemento

Elemento de UML Elemento XSD Comentarios
Propiedad con un estereotipo <<wildcard>> o palabra clave wildcard. Comodín del elemento en el tipo complejo envolvente o un grupo de modelos Los espacios de nombres en los que pueden estar los elementos de sustitución y la rigurosidad con la que se deben validar las sustituciones vienen determinados por las propiedades namespace y processContents del estereotipo <<wildcard>>.



Regla de correlación: Propiedad -> Comodín del atributo

Elemento de UML Elemento XSD Comentarios
Propiedad con los estereotipos <<attribute>> y <<wildcard>> o las palabras clave attribute y wildcard. Comodín del atributo en el tipo complejo envolvente o un grupo de atributos Los espacios de nombres en los que pueden estar los atributos de sustitución y la rigurosidad con la que se deben validar los atributos de sustitución vienen determinados por las propiedades namespace y processContents del estereotipo <<wildcard>>.



Modelado de esquema XML en UML: Buenas prácticas

El objetivo del modelado del esquema XML en UML es crear una representación visual de un esquema XML y, a continuación, generar el esquema utilizando una transformación de UML en XSD. Normalmente, el modelo tendrá elementos que representan a elementos XSD y a elementos que no están relacionados con XSD. Es recomendable tener en cuenta estas directrices cuando se crea un modelo de este tipo.

  1. Coloque los elementos relacionados con XSD y los elementos que no son XSD en paquetes separados.
  2. Coloque los elementos relacionados con XSD que pertenecen a espacios de nombres de destino diferentes en paquetes diferentes.
  3. Aplique el perfil XSD a los paquetes que contengan elementos relacionados con XSD. De forma alternativa, también puede aplicar el perfil XSD al mismo modelo.
  4. Aplique el estereotipo <<schema>> del perfil XSD a cada paquete que contenga los elementos relacionados con XSD.
  5. Especifique el espacio de nombres de destino y su prefijo estableciendo los valores adecuados para las propiedades targetNamespace y targetNamespacePrefix del estereotipo <<schema>>.
  6. Utilice las propiedades de transformación para controlar el contenido del conjunto de paquetes y clases que debe procesar la transformación de UML en XSD.

Tabla de contenido

Limitaciones

Esta transformación todavía no ha implementado las reglas para generar los siguientes elementos XSD:

Tabla de contenido

Apéndice A. Significado de la facetas

Facetas Significado
fractionDigits el número de dígitos fraccionario debe ser menor o igual que x
length la longitud del valor debe ser x
maxExclusive el valor debe ser menor que x
maxInclusive el valor debe ser menor o igual que x
maxLength la longitud del valor debe ser menor o igual que x
minExclusive el valor debe ser mayor que x
minInclusive el valor debe ser mayor o igual que x
minLength la longitud del valor debe ser mayor o igual que x
pattern x es una de las expresiones regulares con las que puede coincidir el valor
totalDigits el número de dígitos significantes debe ser menor o igual que x
whitespace el procesador del esquema debe conservar, reemplazar o contraer el espacio en blanco en función de x

Tabla de contenido

Apéndice B: Tipos simples y facetas aplicables

En la siguiente tabla se enumeran los tipos de datos incorporados y las facetas aplicables. Tenga en cuenta que aunque la recomendación W3C define enumeration como una faceta, no hemos incluido enumeration en la tabla. Representamos enumeration utilizando una clase con estereotipo <<enumeration>> o utilizando la enumeración UML.

Tipos de datos (base de restricción) Facetas aplicables
ENTITY, ID, IDREF length, maxlength, minlength
whitespace está fijado en un valor collapse
pattern es [\i-[:]][\c-[:]]*
IDREFS length, maxlength, pattern
minlength es 1
whitespace está fijado en un valor collapse
Name length, maxlength, minlength
whitespace es collapse
pattern es \i\c*
NCName length, maxlength, minlength
whitespace es collapse
pattern es [\i-[:]][\c-[:]]*
NMTOKEN length, maxlength, minlength
whitespace está fijado en un valor de collapse
pattern es \c+
NMTOKENS length, maxlength
minlength es 1
whitespace está fijado en un valor de collapse
NOTATION length, maxlength, minlength, pattern
whitespace está fijado en un valor de collapse
QNAME length, maxlength, minlength, pattern
whitespace está fijado en un valor de collapse
anyURI, base64Binary, hexBinary length, maxlength, minlength, pattern
whitespace está fijado en un valor de collapse
language length, maxlength, minlength
whitespace es collapse
pattern es ([a-zA-Z]{2}|[iI]-[a-zA-Z]+|[xX]-[a-zA-Z]{1,8})(-[a-zA-Z]{1,8})*
float, double maxExclusive, maxInclusive, minExclusive, minExclusive, pattern
whitespace se fija para tener un valor collapse
decimal maxExclusive, maxInclusive, minExclusive, minExclusive, fractionDigits, totalDigits, pattern
whitespace está fijado para tener un valor collapse
Tipos de datos de enteros (integer, byte, int, long, negativeInteger, nonNegativeInteger, nonPositiveInteger, positiveInteger, unsignedByte, unsignedInt, unsignedLong,unsignedShort)

maxExclusive, maxInclusive, minExclusive, minExclusive, totalDigits, pattern
fractionDigits se fija en un valor 0
whitespace se fija para tener un valor collapse
Tipos de datos de fecha y hora (date, time, dateTime, gYear,gYearMonth, gMonth, gMonthDay, gDay, duration)
maxExclusive, maxInclusive, minExclusive, minExclusive, pattern
whitespace está fijado para tener un valor collapse
string, normalizedString, token length, maxLength, minLength, pattern
whitespace es preserve para string, replace para normalizedString y collapse para token


Tabla de contenido