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.
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:
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.
Para executar a transformação:
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.
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.
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).
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.
Essa transformação aceita um modelo UML que contém pelo menos um pacote ou um ou mais pacotes UML como a origem.
Essa transformação aceita um projeto como seu destino.
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. |
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, maxLength, pattern 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. |
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. |
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.
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
|
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
|
Identidade do Objeto | Campos-chave especificados pelo usuário ou um mecanismo de identidade explícito (ainda não implementado). |
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. |
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. |
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. |
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.
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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 . |
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>> . |
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>> . |
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.
Essa transformação ainda não implementou as regras para gerar os seguintes elementos XSD:
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 |
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 |