Transformação de UML para XSD

Índice

Visão Geral

Essa transformação aceita um pacote UML como sua origem e gera um esquema XML convertendo as classes adequadas no pacote para elementos do esquema. O esquema gerado é armazenado em uma pasta denominada, esquema, em um projeto que você especifica como o destino da transformação. O arquivo que contém o esquema tem um nome igual ao nome do pacote e tem uma extensão .xsd.

Por exemplo, suponha que você tenha um pacote UML denominado PurchaseOrder que contém uma classe denominada Address. Quando você executa essa transformação com esse pacote como sua origem, ela produz o seguinte esquema XML.

Se você escolher um modelo UML (que tem pelo menos um pacote) como a origem, essa transformação gerará um esquema XML para cada pacote no modelo que tem um estereótipo <<XSDProfile::schema>> ou a palavra-chave schema. A transformação gera um esquema XML para cada pacote, se você definir o valor da propriedade da transformação e Processar pacotes não marcados, para true.

Índice

Explorando os Modelos de Exemplo

O pacote configurável do software contém um conjunto de modelos UML de exemplo que você pode utilizar como origens para a transformação de UML para XSD. Depois de ter instalado a transformação de UML para XSD, você precisará copiar os exemplos do diretório de instalação para o espaço de trabalho. Por exemplo, se você tiver instalado o software em RSA/eclipse, os exemplos estarão na pasta RSA/eclipse/plugins/com.ibm.xtools.transform.samples.uml2.xsd/examples. Faça o seguinte para copiar os exemplos no espaço de trabalho:

  1. Crie um projeto simples: Arquivo > Novo > Projeto...  e selecione Simples > Projeto e clique em Avançar.
  2. Dê ao projeto um nome (digamos uml2xsd.examples) e clique em Concluir.
  3. Copie o diretório <dir-de-instalação>/rsa/eclipse/plugins/com.ibm.xtools.transform.uml2.xsd/examples em que <dir-de-instalação> é o local onde você instalou o Rational Software Development Platform.
  4. Abra um ou mais modelos. Dê um clique duplo nos modelos e os pacotes abrirão os diagramas associados que mostram os modelos, o esquema gerado e as várias propriedades de estereótipo e de transformação utilizadas para gerar o esquema.

NOTA: Ao abrir um modelo de exemplo você poderá obter um diálogo informando que o modelo está utilizando uma versão antiga do XSDProfile e perguntando se você gostaria de migrar para o novo perfil. Você deve clicar em Sim para migrar para a nova versão do perfil.

Índice

Executando a Transformação

Para executar a transformação:

  1. No espaço de trabalho, crie um modelo UML que contenha um ou mais pacotes. Crie algumas classes UML em cada um dos pacotes.
  2. Opcionalmente, faça o seguinte:

    Essas etapas serão necessárias se você desejar criar um modelo UML de um esquema XML não-trivial. Para obter informações adicionais sobre a modelagem do esquema XML no UML, consulte a seção Modelando o Esquema XML no UML: Boas Práticas.

  3. Mude para a perspectiva Modelagem, se ainda não estiver nela.
  4. Clique com o botão direito do mouse em um modelo ou pacote; em seguida, clique em Transformar > Executar Transformação > UML para XSD.
  5. Na janela Executar Transformação, na página Destino, especifique o projeto no qual serão gravados os arquivos esquema XSD de saída.
  6. Clique em Executar.

A transformação gera o esquema XSD e o coloca no projeto especificado em uma pasta denominada schema. Utilize uma visualização Navegador para inspecionar o esquema gerado.

Índice

Utilizando o Modelo de Gabarito XSD

Você também pode criar um modelo UML utilizando o modelo de gabarito XSD. Isso tem a vantagem de que a biblioteca de modelo necessária, XSDDataTypes, já foi importada e o Perfil XSD aplicado ao(s) pacote(s).

  1. Crie um modelo UML.
    1. Arquivo > Novo > Projeto > Projeto UML.
    2. No diálogo Projeto de Modelagem UML digite o nome do projeto e clique em Avançar.
    3. No diálogo resultante, selecione  Modelo XSD  e dê um nome adequado para o modelo. (Na sua versão do RSA/RSM, você poderá ver duas instâncias do Modelo XSD na área de janela Gabaritos. Esse é um defeito conhecido que foi corrigido nas versões mais recentes do RSA/RSM. A escolha de um dos dois itens "Modelo XSD" funcionará).
    4. Clique em Concluir.
  2. O modelo UML recém-criado baseia-se em um gabarito de modelo e terá as bibliotecas de modelo necessárias importadas. Agora você precisa criar um ou mais pacotes. Para fazê-lo:
    1. Abra o pacote, Bloco de Construção do Modelo XSD.
    2. Pressione Crtl-arrraste o pacote ${schema.name} e solte-o no modelo da raiz.  Isso criará um pacote com o Perfil de Transformação XSD já aplicado a ele.
    3. A utilização de Localizar/Substituir alterará o nome do pacote de ${schema.name} para um mais adequado.
    4. Preencha o pacote com as classes UML necessárias.
  3. Mude para a perspectiva Modelagem, se ainda não estiver nela.
    1. Clique com o botão direito do mouse em um modelo ou pacote; em seguida, clique em Transformar > Executar Transformação > UML para XSD.
    2. Na janela Executar Transformação, na página Destino, especifique o projeto no qual serão gravados os arquivos esquema XSD de saída.
    3. Clique em Executar.

A transformação gera o esquema XSD e o coloca no projeto especificado em uma pasta denominada schema. Utilize uma visualização Navegador para inspecionar o esquema gerado.

Índice

Detalhes da Transformação

Origem da Transformação

Essa transformação aceita um modelo UML que contém pelo menos um pacote ou um ou mais pacotes UML como a origem.

Destino da Transformação

Essa transformação aceita um projeto como seu destino.

Índice

Propriedades de Transformação

Essa transformação define as seguintes propriedades de transformação:

Propriedade Descrição
Espaço de Nomes de Destino O espaço de nomes de destino do esquema gerado pela transformação. O valor dessa propriedade é uma cadeia, como http://www.ibm.com/SampleXSDTransformation.
Prefixo de Espaço de Nomes de Destino O prefixo do espaço de nomes de destino do esquema gerado pela transformação. O valor dessa propriedade é uma cadeia, como sxt.
Processar classe UML sem estereótipo ou palavra-chave

Essa propriedade determina se a transformação processa uma classe UML se a classe não tiver nenhum estereótipo ou palavra-chave associada a ela.

O valor dessa propriedade pode ser true ou false. Por padrão, seu valor é definido para true e a transformação processa todas as classes em um pacote de nível superior. (Atualmente, a transformação não manipula pacotes aninhados.)

Se você não precisar aplicar a transformação a todas as classes em um pacote, você precisará definir seu valor para false e aplicar os estereótipos adequados no XSDProfile ou palavras-chave nas classes que deseja transformar.

Processar pacote UML sem estereótipo ou palavra-chave

Essa propriedade determina se a transformação processa um pacote UML se o pacote não tiver nenhum estereótipo ou palavra-chave associada a ela.

O valor dessa propriedade pode ser true ou false. Por padrão, seu valor é definido para true e a transformação processa todos os pacotes de nível superior. (Atualmente, a transformação não manipula pacotes aninhados.)

Se você não precisar aplicar a transformação a todos os pacotes de nível superior, precisará definir seu valor para false e aplicar o estereótipo adequado <<schema>> do XSDProfile ou da palavra-chave schema para os pacotes que você deseja transformar.

Converter uma classe aninhada para um tipo anônimo implicitamente

Essa propriedade determina se a transformação converte uma classe aninhada para um tipo anônimo quando não há nenhuma associação explícita entre a classe de aninhamento e a classe aninhada.

O valor dessa propriedade pode ser true ou false. Por padrão, esse valor é definido para false e a transformação converte uma classe aninhada em um tipo anônimo apenas se houver uma associação a ele a partir da classe de aninhamento. Se o valor for definido para true, todas as classes aninhadas serão convertidas em tipos anônimos com os tipos XSD correspondentes às classes aninhadas que contêm elementos cujos tipos são esses tipos anônimos.

A geração de tipos anônimos implicitamente definindo o valor dessa propriedade para true tem várias limitações e, portanto, recomendamos que você a utilize com bastante moderação.

Índice

Perfil XSD

A modelagem de um esquema XML não-trivial em um UML suportado pela transformação UML para XSD utiliza um pequeno subconjunto de construções UML para representar os elementos de esquema XML. Esse subconjunto inclui os seguintes elementos UML: classe, propriedade, generalização, associação e dependência. Para representar elementos do esquema XML, como tipo simples, tipo complexo, atributo e elemento, grupos reutilizáveis, etc., utilizando esse subconjunto, você precisará aplicar o Perfil XSD ao modelo UML de origem e marcá-lo utilizando estereótipos desse perfil e configurando as propriedades dos estereótipos para valores adequados.

O seguinte diagrama de classe mostra o modelo UML do perfil XSD.

A tabela abaixo descreve os estereótipos e suas propriedades.

Estereótipo Extensão Metaclasse Propriedades Comentários
annotation Comentário kind
language
source

O comentário é convertido em uma informação de aplicativo ou anotação de documento.

A propriedade kind determina os tipos de anotação: documentação e appinfo. As propriedades language e source especificam o idioma natural da documentação e da origem da documentação adicional respectivamente.

attribute Propriedade (de Classe) form
use

A propriedade UML será convertida em um atributo em um tipo complexo ou em um grupo de atributos se os tipos forem um tipo simples e a multiplicidade for [0..1].

A propriedade de estereótipo form determina se o nome do atributo deve ser qualificado no documento da instância. Seu valor pode ser qualified , unqualified ou default. Se for default, o valor será padronizado para attributeFormDefault de schema que é padronizado para unqualified.

A propriedade use determina se o atributo é opcional ou requerido. Seu valor pode ser optional ou prohibited ou required.  Por padrão, seu valor é optional. O valor prohibited é ignorado na implementação atual.

attributeGroup Classe
A classe é convertida em um grupo de atributos.
complexType Classe anonymous
block
final
modelGroup
maxOccurs
minOccurs
mixed

A classe é convertida em um tipo complexo.

A propriedade anonymous determina se uma declaração de tipo complexo de nível superior é criada no esquema. Seu valor pode ser true ou false. Se for true, nenhum tipo de declaração será gerado e nenhuma referência a essa classe será convertida para uma declaração de atributo ou elemento com o tipo anônimo como o tipo do atributo ou elemento. Por padrão, seu valor é false.

A propriedade block determina se irá bloquear uma substituição de tipo. Ela pode ter um dos seguintes valores:#all, extension restriction ou uma lista com espaços em brancos de extension e restriction. O valor #all evita que quaisquer tipos derivados sejam substituídos por esse tipo, extension evita que qualquer extensão desse tipo seja substituída por esse tipo e restriction evita que qualquer restrição desse tipo seja substituída por esse tipo. A lista, "extension restriction", tem o mesmo efeito de #all. Se nenhuma propriedade block for especificada, o valor será pradronizado para a propriedade blockDefault  do schema.

A propriedade final determina se outros tipos podem ser derivados a partir desse. Seu valor pode ser #all ou uma lista de  (extension ou restriction).  Se seu valor for #all, a derivação de qualquer tipo será proibida. Para obter controle mais específico, o valor pode ser configurado para uma lista de qualquer uma das palavras-chave restriction ou extension . Ele será padronizado para finalDefault de schema.

A propriedade modelGroup determina o modelo de conteúdo do tipo. O valor de modelGroup pode ser all , choice ou sequence. O valor padrão é sequence.

Restrição: Se o valor de modelGroup for all, o valor de anonymous deverá ser definido para false. Caso contrário, ocorrerá uma violação de restrição.

Os valores de minOccurs e maxOccurs determinam o número mínimo e máximo de vezes que o grupo sequence e choice podem ocorrer em um tipo complexo. Para um grupo de modelos all , maxOccurs deve ser 1 e minOccurs pode ser apenas 0 ou 1.

A propriedade boolean mixed especifica se o tipo complexo permite o conteúdo misto. Por padrão, seu valor é false.

element Propriedade (de Classe) block
final
form
nillable

A propriedade é convertida em um elemento.

A propriedade final aplica-se apenas aos elementos globais e não a elementos locais. Ela determina se outros tipos podem ser derivados a partir desse. Seu valor pode ser #all ou uma lista de  (extension | restriction).  Se seu valor for #all, a derivação de qualquer tipo será proibida. Para obter controle mais específico, o valor pode ser configurado para uma lista de qualquer uma das palavras-chave restriction ou extension . Ele será padronizado para finalDefault de schema.

A propriedade de estereótipo form determina se o nome do elemento deve ser qualificado no documento da instância. Seu valor pode ser qualified , unqualified ou default. Se for default, o valor será padronizado para elementFormDefault de schema que é padronizado para unqualified.

A propriedade boolean nillable determina se xsi:nil pode ser utilizado na instância desse elemento. Por padrão, seu valor é false.

enumeration Classe anonymous

A classe é convertida para uma enumeração XSD se a classe tiver relação de generalização com outra classe representando um tipo simples.

A propriedade anonymous determina se uma declaração de tipo simples de nível superior com aspectos de enumeração é criada no esquema. Seu valor pode ser true ou false. Se for true, nenhum tipo de declaração será gerado e nenhuma referência a essa classe será convertida para uma declaração de atributo ou elemento com o tipo anônimo como o tipo do atributo ou elemento. Por padrão, seu valor é false.

global Classe

Uma classe com esse estereótipo é convertida para uma declaração de elemento ou de atributo de nível superior. A classe deve ter apenas uma propriedade. Se a propriedade tiver um estereótipo ou palavra-chave <<attribute>>, a classe será convertida para um atributo de nível superior. Caso contrário, ela se tornará um elemento de nível superior.

O nome do elemento ou do atributo é o mesmo que o nome da propriedade e o tipo é do tipo  da propriedade.

listOf Dependência
O cliente da dependência é convertido para uma lista XSD cujo tipo de item é o fornecedor da dependência. Pode haver apenas uma dependência desse tipo entre duas classes, cada uma representando um tipo simples.
modelGroup Classe anonymous
modelGroup

A classe é convertida em um grupo de modelos nomeado reutilizável com um modelo de conteúdo sequence.

A propriedade anonymous determina se uma declaração de grupo de nível superior é criada no esquema. Seu valor pode ser true ou false. Se for true, nenhuma declaração de grupo será gerada e qualquer referência a essa classe será convertida para um grupo de modelos aninhados. Se o valor for false, uma referência à classe será convertida para uma referência de grupo de modelos. Por padrão, seu valor é false.

A propriedade modelGroup determina o modelo de conteúdo do grupo. O valor de modelGroup pode ser all , choice ou sequence. O valor padrão é sequence.

Restrição : Se o valor de modelGroup for all, o valor de anonymous deverá ser configurado como false. Caso contrário, ocorrerá uma violação de restrição.

schema Pacote attributeFormDefault
blockDefault
elementFormDefault
finalDefault
targetNamespace
targetNamespacePrefix

O pacote e seu conteúdo são convertidos em um esquema XSD. O nome do pacote torna-se o nome do esquema (arquivo).

A propriedade attributeFormDefault especifica se as declarações de atributo local devem utilizar nomes qualificados. Seu valor pode ser qualified ou unqualified. O valor padrão é unqualified.

A propriedade  blockDefault define o valor padrão para o atributo block utilizado nas declarações de elemento e tipo complexo. O atributo block determina se irá bloquear a substituição do elemento ou do tipo. Ele pode ter os seguintes valores: #all ou uma lista de um ou mais de (extension , restriction ou substitution), separados por espaços em branco.

A propriedade elementFormDefault especifica se as declarações de elemento local devem utilizar nomes qualificados. Seu valor pode ser qualified ou unqualified. O valor padrão é unqualified.

A propriedade  finalDefault define o valor padrão para o atributo final utilizado nas declarações de elemento e de tipos simples e complexos. O atributo final determina se irá proibir a derivação de tipo. Ele pode ter os seguintes valores: #all ou uma lista de um ou mais de (extension , restriction , substitution, list ou union), separados por espaços em branco.

Se você definir os valores de targetNamespace e targetNamespacePrefix, esses valores substituirão aqueles definidos para as propriedades de transformação correspondentes, Target Namespace e Target Namespace Prefix respectivamente.

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

A classe será convertida em um tipo simples, se ela tiver uma generalização para um tipo de dados interno XSD, outro tipo simples ou um tipo de enumeração XSD.

O valor da propriedade anonymous, pode ser true ou false. Se for true, a classe será tratada como um tipo anônimo e nenhuma declaração de tipo de nível superior será gerada.

A propriedade final determina se outros tipos podem ser derivados a partir desse. Seu valor pode ser #all ou uma lista de  (extension , restriction , list ou union).  Se seu valor for #all, a derivação de qualquer tipo será proibida. Para obter controle mais específico, o valor pode ser definido para a lista de qualquer uma das palavras-chave restriction, extension, list ou union, separadas por espaços em branco.

O restante das propriedades representa os aspectos definidos pelo esquema XSD. Utilizando esses aspectos, você pode especificar um intervalo válido de valores, restringir o comprimento e a precisão de valores , especificar uma expressão comum à qual os valores válidos devem corresponder ou especificar o processamento de espaço em branco de tipos simples que são derivados pela restrição dos tipos XSD internos. Para obter detalhes adicionais, consulte a tabela Significado dos Aspectos.

Observe que nem todos esses aspectos são aplicáveis a todos os tipos simples. Por exemplo, para os tipos simples que são derivados de string, normalizedString e token, os aspectos aplicáveis são length, minLength, maxLengthpattern e whitespace. Para obter detalhes adicionais, consulte a tabela Tipos Simples e Aspectos Aplicáveis.

unionOf Dependência
O cliente da dependência é convertido para uma união XSD com o fornecedor da dependência como um de seus membros. Uma classe representando um tipo simples pode ter mais de uma dependência desse tipo para classes diferentes (tipo simples).
wildcard Propriedade (de Classe) processContents
namespace

A propriedade UML é convertida em um elemento curinga. Se a propriedade possuir a palavra-chave attribute ou estereótipo <<attribute>> além do wildcard, ela será convertida em um curinga de atributo.

A propriedade processContents determina como validar estritamente os atributos ou elementos de substituição. Se for skip, o processador do esquema não executará nenhuma validação. Se for lax, o processador do esquema validará atributos ou elementos para os quais ele pode localizar declarações e levantar erros, se eles forem inválidos. Se for strict, o processador do esquema tentará localizar um documento de esquema associado ao espaço de nomes e validar todos os atributos ou elementos. Por padrão, seu valor é configurado como strict.

A propriedade namespace especifica em qual(is) espaço(s) de nome os atributos ou elementos de substituição podem estar. O valor permitido é  (##any, ##other, list of anyURI, ##targetNamespace ou ##local). Se for ##any, os elementos ou atributos de substituição poderão estar em qualquer espaço de nomes ou em nenhum. Se for ##other, os elementos ou atributos de substituição poderão estar em qualquer espaço de nomes diferente do espaço de nomes de destino do documento, mas deverão estar em um espaço de nomes. Se o documento de esquema  não tiver nenhum espaço de nomes de destino, os elementos ou atributos de substituição poderão ter qualquer espaço de nomes, mas deverão ter um. Caso contrário, ele poderá ser uma lista de valores separados por espaços em branco que incluem qualquer um dos itens a seguir ou todos: ##targetNamespace, #local ou espaços de nomes específicos. ##targetNamespace indica que os elementos ou atributos de substituição podem estar no espaço de nomes de destino do documento de esquema e ##local indica que os elementos ou atributos de substituição podem não estar em nenhum espaço de nomes.

Índice

Palavras-chave

Se o esquema que você está modelando não precisar especificar seus elementos em pequenos detalhes, você poderá desejar utilizar as palavras-chave em vez dos estereótipos. A seguinte tabela descreve as palavras-chave suportadas pela transformação de UML em XSD.

Palavra-chave Aplicável ao Elemento UML Comentários
annotation Comentário O comentário é convertido em uma "informação de aplicativo" ou anotação de "documento".
attribute Propriedade (de Classe) A propriedade será convertida em um atributo em um tipo complexo se a multiplicidade da propriedade for [0..1].
attributeGroup Classe A classe é convertida em um grupo de atributos.
complexType Classe A classe é convertida em um tipo complexo.
element Propriedade A propriedade é convertida em um elemento de um tipo complexo.
enumeration Classe A classe é convertida para uma enumeração XSD se a classe tiver relação de generalização com outra classe representando um tipo simples.
global Classe

Uma classe com essa palavra-chave é convertida para uma declaração de elemento ou de atributo de nível superior. A classe deve ter apenas uma propriedade. Se a propriedade tiver um estereótipo <<attribute>> ou palavra-chave attribute, a classe será convertida para um atributo de nível superior. Caso contrário, ela se tornará um elemento de nível superior.

O nome do elemento ou do atributo é derivado do nome da propriedade e o tipo é derivado do tipo  da propriedade.

listOf Dependência entre duas classes representando dois tipos simples O cliente da dependência é convertido para uma lista XSD cujo tipo de item é o fornecedor da dependência. Pode haver apenas uma dependência desse tipo entre duas classes, cada uma representando um tipo simples.
modelGroup Classe A classe é convertida em um grupo de modelos nomeado reutilizável com um modelo de conteúdo sequence.
schema Pacote

O pacote e seu conteúdo são convertidos em um esquema XSD. O nome do pacote torna-se o nome do esquema (arquivo).

Se você utilizar a palavra-chave schema, precisará especificar o espaço de nomes de destino e o seu prefixo definindo as propriedades de transformação, Target Namespace e Target Namespace Prefix respectivamente, para os valores adequados.

simpleType Classe A classe será convertida em um tipo simples, se ela tiver uma generalização para um tipo de dados interno XSD ou outro tipo simples.
unionOf Dependência entre duas classes representando dois tipos simples O cliente da dependência é convertido para uma união XSD com o fornecedor da dependência como um de seus membros. Uma classe representando um tipo simples pode ter mais de uma dependência desse tipo para classes diferentes (tipo simples).
wildcard Propriedade

A propriedade UML é convertida em um elemento curinga. Se a propriedade possuir a palavra-chave attribute além do wildcard, ela é convertida em um atributo curinga.

Índice

Biblioteca de Modelo: Tipos de Dados Internos do XSD

Quarenta e quatro tipos simples estão construídos no XML Schema Recommendation. Esses tipos simples representam tipos de dados comuns como cadeias, números, valores de data e hora e também incluem tipos de legado para os tipos de atributo no XML 1.0. O XSD também fornece doze aspectos de restrição que você pode utilizar para especificar um intervalo válido de valores dos tipos simples, restringir o comprimento e a precisão de seus valores, enumerar uma lista de valores válidos ou especificar uma expressão comum à qual os valores válidos devem corresponder.

Você pode derivar novos tipos simples a partir de tipos internos ou outros tipos simples restringindo-os pela definição dos aspectos para valores adequados. Para fazer isso, é necessário ter representação dos tipos internos disponíveis nos modelos UML.

Os tipos simples internos são modelados como classes e ficam disponíveis em uma biblioteca de modelo denominada XSDDataTypes. Você precisa importar a biblioteca XSDDataTypes no seu modelo para acessar esses tipos. Para importar a biblioteca de modelo XSDDataTypes, no Explorador de Modelos Clique com o botão direito do mouse na raiz do modelo (o próprio modelo), selecione Importar Biblioteca de Modelo... e escolha XSDDataTypes na lista drop-down.

Para definir novos tipos simples (tipos simples definidos pelo usuário), você precisa se especializar nas classes adequadas no modelo XSDDataTypes e utilizar as propriedades do estereótipo <<simpleType>> para restringir o valor dos tipos definidos. Por exemplo:

Você pode restringir o valor máximo de Quantity para, digamos, 100 definindo a propriedade maxInclusive de <<simpleType>> para 100.

Índice

Regras de Mapeamento de UML para XSD

O objetivo de modelar o esquema XML em UML é criar uma representação visual de um esquema XML e, em seguida, gerar o esquema utilizando uma transformação UML para XSD. A análise mostra que a maioria das funcionalidades fundamentais do esquema XML pode ser representada pelos elementos do modelo UML. A tabela a seguir mostra um subconjunto do mapeamento entre os conceitos presentes no UML e os conceitos correspondentes no XSD (XML Schema Definition).

Conceitos de UML Conceitos do Esquema XML
Pacote Espaço de nomes exclusivo com um prefixo
Classe Tipos e grupos reutilizáveis
  • Declaração de tipo complexo e de elemento correspondente
  • Tipo simples
  • Grupo de atributos, denominado grupo de modelos e grupo de substituição
Enumeração Restrição de um tipo simples de cadeia XSD com aspectos de numeração iguais aos literais de enumeração UML. Observe que isso é diferente do que acontece com uma classe UML que possui o estereótipo <<enumeration>> do perfil XSD aplicado. O uso de uma classe UML estereotipada permite enumerações XSD mais gerais.
Propriedades de uma classe Elementos e atributos de um tipo complexo
Associação (Agregação) Elemento filho de um elemento contido (tipo complexo)
Generalização Derivação de tipo
  • Derivação por extensão do tipo complexo
  • Derivação por restrição do tipo complexo
  • Derivação por restrição do tipo simples
Identidade do Objeto Campos-chave especificados pelo usuário ou um mecanismo de identidade explícito (ainda não implementado).

Regra de Mapeamento: Pacote -> Esquema XSD

Elemento UML Elemento XSD Comentários
Pacote com o estereótipo <<schema>> Esquema com um espaço de nomes de destino e seu prefixo Conteúdo dentro de um pacote cria um esquema em um arquivo .xsd. O nome do arquivo esquema é igual àquele do pacote.

As propriedades do estereótipo <<schema>> , attributeFormDefault e elementFormDefault podem ser utilizadas para especificar os atributos attributeFormDefault e elementFormDefault no esquema gerado.

Se você utilizar a palavra-chave schema, em vez do estereótipo, deverá fornecer o espaço de nomes de destino e seu prefixo definindo os valores das  propriedades de transformação, Espaço de Nomes de Destino e Prefixo do Espaço de Nomes de Destino respectivamente.

Regras de Mapeamento: Classe -> Tipo complexo, Propriedade -> Elemento e Propriedade -> Atributo

Elemento UML Elemento XSD Comentários
Classe com estereótipo <<complexType>> Tipo complexo Se a propriedade de estereótipo modelGroup não for definida para um dos possíveis valores, all, choice ou sequence, o tipo complexo será gerado com um grupo de modelos sequence.
Classe com a palavra-chave complexType Tipo complexo O tipo complexo é gerado com um grupo de modelos sequence.
Classe sem palavra-chave ou estereótipo Tipo complexo Um tipo complexo é gerado apenas se o valor da propriedade de transformação, Processar classes não marcadas, estiver configurado como true. Caso contrário, a classe será ignorada. Se um tipo complexo for gerado, seu grupo de modelos será definido para sequence.
Propriedade Elemento do tipo complexo
Propriedade com o estereótipo ou uma palavra-chave <<attribute>>, attribute. Atributo do tipo complexo

A propriedade será convertida para um atributo apenas se o tipo de propriedade for um tipo simples e tiver uma multiplicidade de [0..1]. Caso contrário, ela será convertida para um elemento.

Se você fornecer um valor padrão, a propriedade será convertida  para um atributo opcional com um valor padrão. Se você tornar a propriedade de leitura e fornecer um valor padrão, ela será convertida para um atributo com seu valor corrigido para o padrão. Em ambos os casos, você precisa definir a multiplicidade da propriedade para [0..1].

Você pode utilizar a propriedade, use, do estereótipo <<attribute>> para tornar o atributo opcional ou obrigatório. Se você definir o valor de use para required, bem como fornecer um valor padrão e tornar a propriedade de leitura, o valor padrão e a especificação de leitura serão ignorados.

Regra de Mapeamento: Classe com <<global>>  -> Elemento ou Atributo Global

Elemento UML Elemento XSD Comentários
Uma classe com um estereótipo <<global>> ou uma palavra-chave "global" contendo uma propriedade. Elemento ou atributo global (nível superior).

A classe deve ter apenas uma propriedade. Se a propriedade tiver um estereótipo <<attribute>> ou palavra-chave attribute, a classe será convertida para um atributo de nível superior. Caso contrário, ela se tornará um elemento de nível superior.

O nome do elemento ou do atributo é derivado do nome da propriedade e o tipo é derivado do tipo  da propriedade.


Regra de Mapeamento: Relacionamentos de Generalização entre classe <<global>>  -> Grupo de Substituição

Elemento UML Elemento XSD Comentários
Relacionamentos de Generalização entre classes que tenham estereótipo <<global>> aplicado. Um grupo de substituição composto de elementos globais representados pelas classes com estereótipos <<global>>. Para formar um grupo de substituição de elementos globais, seus próprios tipos (classes) devem estar em um relacionamento de generalização equivalente.

No exemplo abaixo, o elemento global dress é o principal do grupo de substituição e os elementos globais shirt e trouser são os membros. Observe que os tipos desses elementos estão em um relacionamento de generalização que é equivalente ao relacionamento de generalização entre os elementos globais.


Regra de Mapeamento: Classe -> Tipo Simples

Elemento UML Elemento XSD Comentários
Classe com um estereótipo <<simpleType>> ou uma palavra-chave simpleType

Tipo simples definido pelo usuário.

Restrição de um tipo simples interno ou de outro tipo simples definido pelo usuário

Deve ter um relacionamento de generalização para um tipo simples interno ou outro tipo simples definido pelo usuário ou um tipo de enumeração XSD.

Regra de Mapeamento: Classe -> Enumeração XSD

Elemento UML Elemento XSD Comentários
Classe com estereótipo <<enumeration>> ou palavra-chave enumeration enumeração XSD.
Um tipo simples com aspecto de enumeração especificado
Deve ter um relacionamento de generalização para um tipo simples interno ou outro tipo simples definido pelo usuário.

Regra de Mapeamento: Enumeração UML -> Enumeração XSD

Elemento UML Elemento XSD Comentários
Enumeração UML Enumeração XSD, um tipo simples com a base de restrição xsd:string e o aspecto de enumeração especificados Não precisa de nenhuma generalização para qualquer outro tipo simples.

Regras de Mapeamento: Classe -> Grupos Reutilizáveis: Grupo de Modelos e Grupo de Atributos

Elemento UML Elemento XSD Comentários
Classe com estereótipo <<modelGroup>> Grupo de modelos denominado Se a propriedade de estereótipo modelGroup não for definida para um dos possíveis valores, all, choice ou sequence, o grupo de modelos será gerado com um grupo de modelos sequence.
Classe com a palavra-chave modelGroup Grupo de modelos denominado O grupo de modelos denominado é gerado com o grupo de modelos a sequence.
Classe com estereótipo <<attributeGroup>> ou palavra-chave attributeGroup Grupo de atributos Cada propriedade da classe é convertida em um membro do grupo de atributos, desde que seja do tipo que possa ser convertido em um tipo simples e tenha uma multiplicidade [0..1]. Caso contrário, a propriedade será ignorada.

Como as propriedades só podem ser convertidas em atributos XSD, não é estritamente necessário aplicar o estereótipo <<attribute>> às propriedades. Se, no entanto, você desejar especificar propriedades adicionais(como required, form, etc.) para os atributos, será necessário aplicar o estereótipo <<attribute>> e definir as propriedades do estereótipo para os valores adequados.

Regra de Mapeamento: Derivação de Classe

Elemento UML Elemento XSD Comentários
A classe A deriva de outra classe B.

Um tipo complexo B que é uma extensão de conteúdo complexo do tipo complexo A.

A classe A ou a classe B podem ter um estereótipo <<complexType>> ou uma palavra-chave complexType.

Nem a classe A nem a classe B têm o grupo de modelos ou o modelo de conteúdo "all". A tentativa de estender as classes com grupos de modelos "all" leva à violação de restrição.

A classe B não pode ter um estereótipo <<modelGroup>> ou <<attributeGroup>> nem uma palavra-chave modelGroup ou attributeGroup. Em outras palavras, um tipo complexo não pode estender um grupo de modelos ou um grupo de atributos.

A classe A deriva de outra classe B com um estereótipo <<simpleType>> ou uma palavra-chave a  simpleType.

Um tipo complexo B que é uma extensão de conteúdo simples de um tipo simples. Qualquer propriedade de classe B torna-se um atributo de uma extensão de conteúdo simples.

O único objetivo de derivar a partir de um tipo simples é incluir atributos. Portanto, o tipo de uma propriedade de classe B deve ser um tipo simples e sua multiplicidade deve ser [0..1]. Caso contrário, o modelo violará a restrição.

Regra de Mapeamento: Associação -> Elemento de Tipo Complexo

Elemento UML Elemento XSD Comentários
Associação (agregação direcionada ou composta) Classe A -> Classe B Elemento no tipo complexo A do tipo complexo B O nome do elemento é determinado pelo nome da função na extremidade da associação.

Regra de Mapeamento: Propriedade -> Elemento de Tipo Complexo

Elemento UML Elemento XSD Comentários
A classe A contém uma ou mais propriedades do tipo Classe B Elemento no tipo complexo A do tipo complexo B O nome do elemento é determinado pelo nome da propriedade.

Regra de Mapeamento: Associação -> Referência do Grupo de Modelos e Referência do Grupo de Atributos

Elemento UML Elemento XSD Comentários

Associação (associação direcionada ou agregação composta) da Classe A para a Classe B com um estereótipo <<modelGroup>>.

Classe A -> Classe C com estereótipo <<attributeGroup>>.

A referência do grupo de modelos no tipo complexo A.

A referência do grupo de atributos no tipo complexo A.


Associação (associação direcionada ou agregação composta) da Classe A com estereótipo <<modelGroup>> para a Classe B também com estereótipo  <<modelGroup>> Uma referência de grupo modelo no grupo modelo representado pela Classe A
Associação (associação direcionada ou agregação composta) da Classe A com estereótipo <<attributeGroup>> para a Classe B também com estereótipo  <<attributeGroup>> Uma referência de grupo de atributos no grupo de atributos representado pela Classe A.



Regra de Mapeamento: Dependência -> Tipos de Lista e União

Elemento UML Elemento XSD Comentários
Dependência com um estereótipo <<listOf>> ou uma palavra-chave listOf entre dois tipos simples

Tipo de Lista.

O cliente da dependência é convertido para um tipo simples que é uma lista do fornecedor da dependência

O cliente e o fornecedor da dependência devem ser tipos simples e deve haver apenas uma dependência <<listOf>> entre eles. Não deve haver nenhum outro relacionamento entre essas duas classes.

Dependência com um estereótipo <<unionOf>> ou uma palavra-chave unionOf entre um tipo simples de cliente e um ou mais fornecedores Tipo de União.

O cliente da dependência é convertido para um tipo simples que é uma união dos fornecedores da dependência.

O cliente e os fornecedores da dependência devem ser tipos simples e pode haver uma ou mais dependências <<unionOf>> entre eles. Não deve haver nenhum outro relacionamento entre essas classes.

Índice

Regra de Mapeamento: Classe -> Tipo Complexo Anônimo

Elemento UML Elemento XSD Comentários

Classe A com um estereótipo <<complexType>> e uma propriedade de estereótipo anonymous = true e é referida por outra classe B representando um tipo complexo.

A classe A é convertida  em um tipo complexo anônimo.

A referência é convertida em um atributo ou elemento no tipo complexo (representado pela classe B). O tipo do elemento ou atributo é definido por esse tipo anônimo.

O nome do elemento ou atributo é determinado pelo nome da função na extremidade da associação ou no nome da propriedade.

Como a classe A é especificada como anônima, nenhuma declaração de tipo complexo de nível superior é gerada para essa classe.

Regra de Mapeamento: Classe -> Tipo Simples Anônimo

Elemento UML Elemento XSD Comentários
Classe A com um estereótipo <<simpleType>> e uma propriedade de estereótipo anonymous = true e é referida por outra classe B representando um tipo complexo

A classe A é convertida  em um tipo simples anônimo.

A referência é convertida em um atributo ou elemento no tipo complexo (representado pela classe B). O tipo do elemento ou atributo é definido por esse tipo anônimo.

O nome do elemento ou atributo é determinado pelo nome da função na extremidade da associação ou no nome da propriedade.

Como a classe A é especificada como anônima, nenhuma declaração de tipo simples de nível superior é gerada para essa classe.

Regra de Mapeamento: Classe -> Enumeração Anônima

Elemento UML Elemento XSD Comentários
Classe A com um estereótipo <<enumeration>> e uma propriedade de estereótipo anonymous = true e é referida por outra classe B representando um tipo complexo

A classe A é convertida  em uma enumeração anônima.

A referência é convertida em um atributo ou elemento no tipo complexo (representado pela classe B). O tipo do elemento ou atributo é definido por esse tipo anônimo.

O nome do elemento ou atributo é determinado pelo nome da função na extremidade da associação ou no nome da propriedade.

Como a classe A é especificada como anônima, nenhuma declaração de tipo simples de nível superior com aspecto de numeração é gerada para essa classe.

Regra de Mapeamento: Referência para Grupo de Modelos Anônimos -> Aninhamento dos Grupos de Seqüência e Opção

Elemento UML Elemento XSD Comentários

Associação (agregação direcionada ou composta) entre uma classe A e uma classe B com um estereótipo <<modelGroup>> e o valor da propriedade anonymous = true.

Um tipo complexo representando a classe A que contém o grupo de modelos do grupo de modelos denominado representado pela classe B.

Esse mapeamento será válido somente se  nem A nem B tiverem um modelo de conteúdo all.
Associação (agregação direcionada ou composta) entre uma classe A com um estereótipo <<modelGroup>> e uma classe B com um estereótipo <<modelGroup>> e o valor da propriedade anonymous = true. Um grupo de modelos denominado  representando a classe A que contém o grupo de modelos do grupo de modelos denominado representado pela classe B. Esse mapeamento será válido somente se  nem A nem B tiverem um modelo de conteúdo all.

A referência acima dos grupos de modelos também pode ser modelada utilizando as propriedades de classe.

Elemento UML Elemento XSD Comentários
Classe A contendo uma propriedade cujo tipo é classe B com um estereótipo <<modelGroup>> e o valor da propriedade anonymous = true. Um tipo complexo representando a classe A que contém o grupo de modelos do grupo de modelos denominado representado pela classe B. Esse mapeamento será válido somente se  nem A nem B tiverem um modelo de conteúdo all.
Classe A com um estereótipo <<modelGroup>> contendo uma propriedade cujo tipo é classe B com um estereótipo <<modelGroup>> e o valor da propriedade anonymous = true. Um grupo de modelos denominado  representando a classe A que contém o grupo de modelos do grupo de modelos denominado representado pela classe B. Esse mapeamento será válido somente se  nem A nem B tiverem um modelo de conteúdo all.

Regra de Mapeamento: Classe Aninhada -> Tipo Complexo Anônimo

Elemento UML Elemento XSD Comentários
Classe A contendo uma classe B aninhada com uma associação entre A e B. Elemento no tipo complexo A de um tipo anônimo B.

Deve haver uma associação entre a classe de aninhamento e a classe aninhada.

O mesmo componente de esquema será obtido se a classe A contiver uma propriedade do tipo B em vez de uma associação.



Regra de Mapeamento: Classe Aninhada -> Tipo Simples Anônimo

Elemento UML Elemento XSD Comentários
Classe A contendo uma classe B aninhada com um estereótipo <<simpleType>> ou palavra-chave simpleType e com uma associação entre A e B. Elemento no tipo complexo A de um tipo simples anônimo B.

Deve haver uma associação entre a classe de aninhamento e a classe aninhada.

O mesmo componente de esquema será obtido se a classe A contiver uma propriedade do tipo B em vez de uma associação.

Regra de Mapeamento: Comentário -> Anotação UML

Elemento UML Elemento XSD Comentários
Comentário Anotação Um comentário em um elemento UML é convertido em uma anotação de documentação XSD.
Comentário com estereótipo <<annotation>> Anotação O tipo de anotação, documentação ou informação de aplicativo depende do valor da propriedade kind do estereótipo <<annotation>>. Se o valor de kind for Um elemento documentação é criado se o valor de kind for documentação. Um elemento appinfo é criado se o valor for applicationInfo. O valor padrão de kind é documentação.




Regra de Mapeamento: Propriedade -> Elemento curinga

Elemento UML Elemento XSD Comentários
Propriedade com o estereótipo <<wildcard>> ou palavra-chave wildcard. Elemento wildcard no tipo complexo de inclusão ou em um grupo modelo Os espaços de nome dos elementos de substituição podem estar em e como validar estritamente as substituições determinadas pelas propriedades namespace e processContents, do estereótipo <<wildcard>>.



Regra de Mapeamento: Propriedade -> Atributo curinga

Elemento UML Elemento XSD Comentários
Propriedade com os estereótipos <<attribute>> e <<wildcard>> ou palavras-chave attribute e wildcard. Atributo curinga no tipo complexo de inclusão ou em um grupo de atributos Os espaços de nome dos elementos de substituição podem estar em e como validar estritamente os atributos de substituição determinados pelas propriedades namespace e processContents, do estereótipo <<wildcard>>.



Modelando Esquema XML no UML: Boas Práticas

O objetivo de modelar o esquema XML em UML é criar uma representação visual de um esquema XML e, em seguida, gerar o esquema utilizando uma transformação UML para XSD. Normalmente, seu modelo terá elementos que representam elementos XSD, bem como elementos que não estão relacionados ao XSD. Recomendamos que você mantenha as seguintes diretrizes em mente ao construir um modelo desse tipo.

  1. Coloque os elementos relacionados ao XSD e elementos não-XSD em pacotes separados.
  2. Coloque os elementos relacionados ao XSD pertencentes a um espaço de nomes de destino diferente em pacotes diferentes.
  3. Aplique o perfil XSD para os pacotes que contenham elementos relacionados ao XSD. Alternativamente, você também poderá aplicar o Perfil XSD ao próprio modelo.
  4. Aplique o estereótipo <<schema>> do perfil XSD em cada pacote que contenha os elementos relacionados ao XSD.
  5. Especifique o espaço de nomes de destino e seu prefixo definindo os valores adequados para as propriedades, targetNamespace e targetNamespacePrefix, do estereótipo <<schema>>.
  6. Utilize as propriedades de transformação para controlar o conteúdo do conjunto de pacotes e as classes que a transformação de UML para XSD precisa para processar.

Índice

Limitações

Essa transformação ainda não implementou as regras para gerar os seguintes elementos XSD:

Índice

Apêndice A. Significado dos Aspectos

Aspectos Significado
fractionDigits o número de dígitos fracionais deve ser menor ou igual a x
length o comprimento do valor deve ser x
maxExclusive valor deve ser menor que x
maxInclusive o valor deve ser menor que ou igual a x
maxLength o comprimento do valor deve ser menor que ou igual a x
minExclusive o valor deve ser maior que x
minInclusive o valor deve ser maior que ou igual a x
minLength o comprimento do valor deve ser maior que ou igual a x
pattern x é uma das expressões comuns à qual o valor deve corresponder
totalDigits o número de dígitos significativos deve ser menor ou igual a x
whitespace o processador do esquema deve preservar, substituir ou reduzir o espaço em branco dependendo de x

Índice

Apêndice B: Tipos Simples e Aspectos Aplicáveis

A seguinte tabela enumera os tipos de dados internos e os aspectos aplicáveis. Observe que embora a recomendação W3C especifique enumeration como um aspecto, não incluímos enumeration na tabela. Representamos enumeration utilizando uma classe com o estereótipo <<enumeration>> ou utilizando a enumeração UML.

Tipos de Dados (Base de Restrição) Aspectos Aplicáveis
ENTITY, ID, IDREF length, maxlength, minlength
whitespace foi corrigido para um valor collapse
padrão é [\i-[:]][\c-[:]]*
IDREFS length, maxlength, pattern
minlength é 1
whitespace foi corrigido para um valor collapse
Nome length, maxlength, minlength
whitespace é collapse
padrão é \i\c*
NCName length, maxlength, minlength
whitespace é collapse
padrão é [\i-[:]][\c-[:]]*
NMTOKEN length, maxlength, minlength
whitespace foi corrigido para um valor collapse
padrão é \c+
NMTOKENS length, maxlength
minlength é 1
whitespace foi corrigido para um valor collapse
NOTATION length, maxlength, minlength, pattern
whitespace foi corrigido para um valor collapse
QNAME length, maxlength, minlength, pattern
whitespace foi corrigido para um valor collapse
anyURI, base64Binary, hexBinary length, maxlength, minlength, pattern
whitespace foi corrigido para um valor collapse
language length, maxlength, minlength
whitespace é collapse
padrão é ([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 foi corrigido para ter um valor collapse
decimal maxExclusive, maxInclusive, minExclusive, minExclusive, fractionDigits, totalDigits, pattern
whitespace foi corrigido para ter um valor collapse
integer data types (integer, byte, int, long, negativeInteger, nonNegativeInteger, nonPositiveInteger, positiveInteger, unsignedByte, unsignedInt, unsignedLong,unsignedShort)

maxExclusive, maxInclusive, minExclusive, minExclusive, totalDigits, pattern
fractionDigits foi corrigido para ter um valor 0
whitespace foi corrigido para ter um valor collapse
Tipos de dados de data e hora (date, time, dateTime, gYear,gYearMonth, gMonth, gMonthDay, gDay, duration)
maxExclusive, maxInclusive, minExclusive, minExclusive, pattern
whitespace foi corrigido para ter um valor collapse
string, normalizedString, token length, maxLength, minLength, pattern
whitespace é preserve para string, replace para normalizedString e collapse para token


Índice