Transformation UML vers XSD

Table des matières

Présentation

Cette transformation accepte un module UML à sa source et génère un schéma XML en convertissant les classes appropriées du package en éléments du schéma. Le schéma généré est stocké dans un dossier nommé schema, dans un projet que vous avez spécifié comme cible de la transformation. Le fichier contenant le schéma porte le même nom que le package, et il est suivi de l'extension .xsd.

Par exemple, supposons que l'un de vos packages UML s'appelle PurchaseOrder et contient une classe appelée Address. La transformation réalisée avec ce package comme source produit le schéma XML ci-dessous.

Si vous choisissez un modèle UML (qui comporte au moins un package) comme source, cette transformation génère un schéma XML pour chaque package du modèle comportant un stéréotype <<XSDProfile::schema>> ou un mot clé schéma. La transformation génère un schéma XML pour chaque package, si vous attribuez la valeur true à la propriété de transformation, et aux packages non marqués traités.

Table des matières

Exploration des modèles d'exemple

Le logiciel regroupe un ensemble de modèles UML que vous pouvez utiliser comme source dans le cadre de la transformation UML vers XSD. Après avoir installé la transformation UML vers XSD, vous devez copier les exemples du répertoire d'installation vers votre espace de travail. Par exemple, si vous avez installé le logiciel dans RSA/eclipse, les exemple se trouveront dans le dossier RSA/eclipse/plugins/com.ibm.xtools.transform.samples.uml2.xsd/examples. Pour copier les exemples dans votre espace de travail, procédez comme suit :

  1. Créez un projet simple : Fichier > Nouveau > Projet... , sélectionnez Simple > Projet, puis cliquez sur Suivant.
  2. Donnez un nom au projet (uml2xsd.examples), par exemple, puis cliquez sur Terminer.
  3. Copiez le répertoire <rép-install>/rsa/eclipse/plugins/com.ibm.xtools.transform.uml2.xsd/examples où <rép-install> est le répertoire dans lequel vous avez installé Rational Software Development Platform.
  4. Ouvrez un ou plusieurs modèles. Si vous cliquez deux fois sur les modèles ou les packages, vous ouvrez les diagrammes associés affichant les modèles, le schéma généré et les différentes propriétés du stéréotype et de la transformation utilisées pour générer le schéma.

REMARQUE : Lorsque vous ouvrez un modèle d'exemple, une boîte de dialogue peut s'afficher et vous informer que ledit modèle utilise une ancienne version de XSDProfile. Elle peut alors vous demander si vous souhaitez migrer vers un nouveau profil. Il est recommandé de cliquer sur Oui pour migrer vers la nouvelle version du profil.

Table des matières

Exécution de la transformation

Pour exécuter la transformation :

  1. Dans votre espace de travail, créez un modèle UML contenant un ou plusieurs packages. Créez quelques classes UML dans chacun d'eux.
  2. Eventuellement, procédez comme suit :

    Ces étapes sont indispensables si vous souhaitez créer le modèle UML d'un schéma XML non trivial. Pour obtenir de plus amples informations relatives au schéma XML de modélisation dans UML, consultez la section Schéma XML de modélisation dans UML : Bonnes pratiques.

  3. Passez à la perspective Modélisation, si ce n'est déjà fait.
  4. Cliquez à l'aide du bouton droit de la souris sur un modèle ou un package, puis cliquez sur Transformation > Exécuter la transformation > UML vers XSD.
  5. Dans l'onglet Cible de la fenêtre Exécution de la transformation, indiquez le projet dans lequel vous souhaitez écrire les fichiers de schéma XSD en sortie.
  6. Cliquez sur Exécuter.

La transformation génère le schéma XSD et le place dans le projet spécifié, dans un dossier appelé schema. Utilisez la vue Navigateur pour inspecter le schéma généré.

Table des matières

Utilisation du modèle d'exemple XSD

Vous pouvez également créer un modèle UML à l'aide du modèle de canevas XSD. L'avantage n'est pas négligeable : la bibliothèque de modèles nécessaire XSDDataTypes est déjà importée et le profil XSD est appliqué aux packages.

  1. Créez un modèle UML.
    1. Fichier > Nouveau > Projet > Projet UML.
    2. Dans la boîte de dialogue Projet de modélisation UML, entrez le nom du projet puis cliquez sur Suivant.
    3. Dans la boîte de dialogue suivante, sélectionnez  Modèle XSD , puis donnez un nom approprié au modèle (dans votre version de RSA/RSM, il est possible que deux instances du modèle XSD dans le panneau Canevas apparaissent. Il s'agit d'un défaut reconnu qui a été corrigé dans les dernières versions de RSA/RSM. Vous pouvez choisir l'un des deux éléments "Modèle XSD").
    4. Cliquez sur Fin.
  2. Le modèle UML tout juste créé repose sur un canevas de modèles dans lequel vont être importées les bibliothèques de modèles nécessaires. Vous devez maintenant créer un ou plusieurs packages. Pour ce faire, procédez comme suit :
    1. Ouvrez le package XSD Model Building Block.
    2. Déplacez le package ${schema.name} et déposez-le dans le modèle de base. Vous allez ainsi créer un package auquel le profil de transformation XSD est déjà appliqué.
    3. Grâce à l'option Rechercher/Remplacer, remplacez le nom du package ${schema.name} par un nom plus approprié.
    4. Peuplez le package avec les classes UML nécessaires.
  3. Passez à la perspective Modélisation, si ce n'est déjà fait.
    1. Cliquez à l'aide du bouton droit de la souris sur un modèle ou un package, puis cliquez sur Transformation > Exécuter la transformation > UML vers XSD.
    2. Dans l'onglet Cible de la fenêtre Exécution de la transformation, indiquez le projet dans lequel vous souhaitez écrire les fichiers de schéma XSD en sortie.
    3. Cliquez sur Exécuter.

La transformation génère le schéma XSD et le place dans le projet spécifié, dans un dossier appelé schema. Utilisez la vue Navigateur pour inspecter le schéma généré.

Table des matières

Caractéristiques de la transformation

Source de transformation

Cette transformation accepte un modèle UML contenant au moins un package ou un ou plusieurs packages UML en tant que source.

Cible de transformation

Cette transformation accepte un projet comme cible.

Table des matières

Propriétés de transformation

Cette transformation permet de définir les propriétés de transformation suivantes :

Propriété Description
Espace de noms cible Espace de noms cible du schéma généré par la transformation. La valeur de cette propriété est une chaîne (http://www.ibm.com/SampleXSDTransformation, par exemple).
Préfixe de l'espace de noms cible Préfixe de l'espace de noms cible du schéma généré par la transformation. La valeur de cette propriété est une chaîne (sxt, par exemple).
Traitement d'une classe UML sans stéréotype ou mot-clé

Cette propriété permet de déterminer si la transformation traite une classe UML si cette dernière n'est associée à aucun stéréotype ou mot-clé.

La valeur de cette propriété peut être true ou false. Par défaut, la valeur true est attribuée à cette propriété, et la transformation traite toutes les classes d'un package de niveau supérieur (actuellement, la transformation ne traite pas les packages imbriqués).

Si l'application de la transformation à toutes les classes d'un package ne s'avère pas nécessaire, vous devez attribuer la valeur à la propriété et appliquer les stéréotypes appropriés issus de XSDProfile ou les mots-clés aux classes que vous souhaitez transformer.

Traitement d'un package UML sans stéréotype ou mot-clé

Cette propriété permet de déterminer si la transformation traite un package UML si ce dernier n'est associé à aucun stéréotype ou mot-clé.

La valeur de cette propriété peut être true ou false. Par défaut, la valeur true est attribuée à cette propriété, et la transformation traite tous les packages de niveau supérieur (actuellement, la transformation ne traite pas les packages imbriqués).

Si l'application de la transformation à tous les packages de niveau supérieur d'un modèle s'avère nécessaire, vous devez attribuer la valeur false à la propriété et appliquer le stéréotype <<schema>> issu de XSDProfile ou le mot-clé schema aux packages que vous souhaitez transformer.

Conversion implicite d'une classe imbriquée en type anonyme

Cette propriété permet de déterminer si la transformation convertit une classe imbriquée en type anonyme lorsqu'il n'existe aucune association explicite entre la classe d'imbrication et ladite classe imbriquée.

La valeur de cette propriété peut être true ou false. Par défaut, la valeur false est attribuée à cette propriété, et la transformation convertit une classe imbriquée en type anonyme uniquement s'il existe une association entre elle et la classe d'imbrication. Si la valeur true est attribuée à cette propriété, toutes les classes imbriquées sont converties en types anonymes avec des des types XSD correspondant aux classes imbriquées contenant des éléments dont les types sont ces types anonymes.

La génération implicite de types anonymes en attribuant la valeur true à cette propriété fait l'objet de plusieurs limitations. Par conséquent, il est recommandé de l'utiliser avec beaucoup de parcimonie.

Table des matières

Profil XSD

La modélisation d'un schéma XML non trivial dans UML prise en charge par la transformation UML vers XSD utilise un petit sous-ensemble de constructions UML afin de représenter les éléments du schéma XML. Ce sous-ensemble comprend les éléments UML suivants : classe, propriété, généralisation, association et dépendance. Pour représenter les éléments du schéma XML (type simple, type complexe, attribut, élément, groupes réutilisables etc.) grâce à ce sous-ensemble, vous devez appliquer le profil XSD au modèle UML source, le marquer à l'aide de stéréotypes issus de ce profil et attribuer les valeurs appropriées aux stéréotypes.

Le diagramme de classes suivant illustre le modèle UML du profil XSD.

Le tableau ci-dessous décrit les stéréotypes et leurs propriétés.

Stéréotype Extension de métaclasse Propriétés Commentaires
annotation Comment kind
language
source

Le commentaire est converti en une information d'application ou en annotation de documentation.

La propriété kind permet de déterminer les type d'annotation: documentation et appinfo. Les propriétés language et source permettent respectivement de préciser la langue du document et la source de la documentation supplémentaire.

attribute Property (de la Classe) forme
use

La propriété UML est convertie en un attribut de type complexe ou en un groupe d'attributs si son type est simple et sa multiplicité [0..1].

La propriété du stéréotype form permet de déterminer si le nom de l'attribut doit être qualifié dans le document d'instance. Sa valeur peut être qualifié , non qualifié ou par défaut. Si la valeur est default, la valeur prend par défaut attributeFormDefault de schema , qui est par défaut non qualifiée.

La propriété use permet de déterminer si l'attribut est facultatif ou obligatoire. Sa valeur peut être optional, prohibited ou required.   La valeur optional est attribuée par défaut. La valeur prohibited est ignorée dans l'implémentation en cours.

attributeGroup Classe
La classe est convertie en groupe d'attributs.
complexType Classe anonymous
block
final
modelGroup
maxOccurs
minOccurs
mixed

La classe est convertie en un type complexe.

La propriété anonymous permet de déterminer si la déclaration d'un type complexe de niveau supérieur est créée dans le schéma. Sa valeur peut être true ou false. Si elle est true, aucune déclaration de type n'est générée et toute référence à cette classe est convertie en déclaration d'attribut ou d'élément avec le type anonyme comme type d'attribut ou d'élément. Par défaut, sa valeur est false.

La propriété block permet de déterminer s'il convient de bloquer la substitution de type. L'une des valeurs ci-après peut lui être attribuée : #all, extensionrestriction ou une liste d'extension et de restriction séparée par des espaces. Les valeurs #all, extension et restriction empêchent respectivement tous les types dérivés, toutes les extension et toutes les restrictions d'être remplacés pour ce type. La liste des restrictions d'extension a le même effet que #all. Si aucune propriété block n'est spécifiée, la valeur par défaut est blockDefault de schema.

La propriété final permet de déterminer si d'autres types peuvent être dérivés de celui-là. Sa valeur peut être #all ou une liste de (extension ou restriction). Si sa valeur est #all, aucune dérivation n'est admise. Pour un contrôle plus spécifique, la valeur peut être une liste de l'un des mots-clés séparés par un espace restriction ou extension . Elle prend la valeur finalDefault de schema.

La propriété modelGroup permet de déterminer le modèle de contenu du type. La valeur de modelGroup peut être all, choice ou sequence. La valeur par défaut est sequence.

Contrainte : Si la valeur all est attribuée à modelGroup, la valeur false doit être attribuée à anonymous. Dans le cas contraire, une violation de contrainte se produit.

Les valeurs de minOccurs et de maxOccurs permettent de déterminer le nombre minimal et maximal d'occurrences du groupe sequence et choice dans le type complexe. Pour un groupe de modèles all, maxOccurs doit être 1 et minOccurs peut uniquement être 0 ou 1.

La propriété booléenne mixed permet de préciser si le type complexe autorise les contenus mixtes. Par défaut, sa valeur est false.

element Propriété (de la Classe) block
final
form
nillable

La propriété est convertie en élément.

La propriété final s'applique uniquement aux éléments globaux et pas uniquement aux éléments locaux. Elle permet de déterminer si d'autres types peuvent être dérivés de celui-là. Sa valeur peut être #all ou une liste de (extension | restriction). Si sa valeur est #all, aucune dérivation n'est admise.Pour un contrôle plus spécifique, la valeur peut être une liste de l'un des mots-clés séparés par un espace restriction ou extension . Elle prend la valeur finalDefault de schema.

La propriété du stéréotype form permet de déterminer si le nom de l'élément doit être qualifié dans le document d'instance. Sa valeur peut être qualifié , non qualifié ou par défaut. Si la valeur est default, la valeur prend par défaut elementFormDefault de schema , qui est par défaut non qualifiée.

La propriété booléenne nillable permet de déterminer si xsi:nil peut être utilisé dans l'instance pour cet élément. Par défaut, sa valeur est false.

enumeration Classe anonymous

La classe est convertie en énumération XSD si la classe comporte une relation de généralisation vers une autre classe représentant un type simple.

La propriété anonymous permet de déterminer si la déclaration d'un type simple de niveau supérieur avec des facettes d'énumération est créée dans le schéma. Sa valeur peut être true ou false. Si elle est true, aucune déclaration de type n'est générée et toute référence à cette classe est convertie en déclaration d'attribut ou d'élément avec le type anonyme comme type d'attribut ou d'élément. Par défaut, sa valeur est false.

global Classe

Une classe comportant ce stéréotype est convertie en déclaration d'élément ou d'attribut de niveau supérieur. La classe ne doit détenir qu'une seule propriété. Si la propriété comporte un stéréotype ou mot-clé <<attribute>>, la classe est convertie en attribut de niveau supérieur. Dans le cas contraire, elle devient un élément de niveau supérieur.

Le nom de l'élément ou de l'attribut est identique à celui du nom de la propriété, et le type est celui de la propriété.

listOf Dépendance
Le client de la dépendance est converti en liste de XSD dont le type d'élément est le fournisseur de la dépendance. Il ne peut exister qu'une seule dépendance entre deux classes, chacune représentant un type simple.
modelGroup Classe anonymous
modelGroup

La classe est convertie en un groupe de modèle nommé réutilisable comportant un modèle de contenu sequence.

La propriété anonymous permet de déterminer si une déclaration de groupe de niveau supérieur est créée dans le schéma. Sa valeur peut être true ou false. Si sa valeur est true, aucune déclaration de groupe n'est générée et toute référence à cette classe est convertie en groupe de modèles imbriqués. Si la valeur est "false", une référence à la classe est convertie en référence du groupe du modèle. Par défaut, sa valeur est false.

La propriété modelGroup permet de déterminer le modèle de contenu du groupe. La valeur de modelGroup peut être all, choice ou sequence. La valeur par défaut est sequence.

Contrainte : Si la valeur all est attribuée à modelGroup, la valeur false doit être attribuée à anonymous. Dans le cas contraire, une violation de contrainte se produit.

schema Package attributeFormDefault
blockDefault
elementFormDefault
finalDefault
targetNamespace
targetNamespacePrefix

Le package et son contenu sont convertis dans un schéma XSD. Le nom du package devient celui du schéma (fichier).

La propriété attributeFormDefault permet de préciser si les déclarations d'attribut local doivent utiliser des noms qualifiés. Sa valeur peut être qualified ou unqualified. La valeur par défaut est unqualified.

La propriété blockDefault définit la valeur par défaut de l'attribut block utilisé dans les déclaration du type et de l'élément complexe. L'attribut block permet de déterminer s'il convient de bloquer la substitution d'élément ou du type. L'une des valeurs ci-après peut lui être attribuée : #all ou une liste d'un ou de plusieurs extension , restriction ou substitution séparés par des virgules.

La propriété elementFormDefault permet de préciser si les déclarations d'élément local doivent utiliser des noms qualifiés. Sa valeur peut être qualified ou unqualified. La valeur par défaut est unqualified.

La propriété finalDefault définit la valeur par défaut de l'attribut final utilisé dans les déclaration de type complexe, de type simple et d'élément. L'attribut final permet de déterminer s'il convient de refuser la dérivation du type. L'une des valeurs ci-après peut lui être attribuée : #all ou une liste séparée par des virgules de extension , restriction, substitution, list ou union.

Si vous définissez les valeurs de targetNamespace et de targetNamespacePrefix, ces valeurs remplacent celles que vous avez respectivement définies pour les propriétés de transformation Espace de noms cible et Préfixes de l'espace de noms cible.

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

La classe est convertie en un type simple si elle comporte une généralisation vers un type de données intégrées XSD, un autre type simple ou un type d'énumération XSD.

La valeur de la propriété anonymous peut être true ou false. Si la valeur est "true", la classe est traitée comme un type anonyme et une déclaration de type de niveau supérieur est générée.

La propriété final permet de déterminer si d'autres types peuvent être dérivés de celui-là. Sa valeur peut être #all ou une liste de extension, restriction, list ou union.  Si sa valeur est #all, aucune dérivation n'est admise. Pour un contrôle plus spécifique, la valeur peut être une liste de mots-clés restriction, extension, list ou union séparés par un espace.

Le reste des propriétés représente les facettes définies comme le schéma de XSD. Grâce à ces facettes, vous pouvez préciser une plage de valeurs valide, contraindre la longueur et la précision des valeurs, spécifier une expression régulière selon laquelle les valeurs valides doivent correspondre, ou préciser le traitement de l'espace des types simples dérivés par restriction des types XSD intégrés . Pour obtenir plus de détails, consultez le tableau Signification des facettes.

Notez que toutes ces facettes ne sont pas applicables à tous les types simples. Par exemple, pour les types simples dérivés de string, normalizedString et token, les facettes applicables sont length, minLength, maxLength,  pattern et whitespace. Pour obtenir plus de détails, consultez le tableau Types simples et facettes applicables.

unionOf Dépendance
Le client de la dépendance est converti en union XSD, le fournisseur de la dépendance étant l'un de ses membres. Une classe représentant un type simple peut comporter plusieurs de ces dépendances vers différentes classes (type simple).
wildcard Property (de la Classe) processContents
namespace

La propriété UML est convertie en un caractère générique d'élément. Si la propriété comporte le mot-clé attribute ou le stéréotype <<attribute>> en plus du caractère générique, elle est convertie en un caractère générique d'attribut.

La propriété processContents permet de déterminer comment strictement valider les attributs ou éléments de remplacement. S'il la valeur est skip, le processeur de schéma ne procède à aucune validation. Si la valeur est lax, le processeur de schéma valide les attributs ou éléments pour lesquels il peut trouver des déclarations et annonce des erreurs s'ils ne sont pas valides. Si la valeur est strict, le processeur de schéma tente de trouver un document de schéma associé à l'espace de noms et valide tous les attributs ou éléments. Par défaut, sa valeur est strict.

La propriété namespace permet de préciser le ou les espaces de noms dans lesquels peuvent se trouver les attributs ou éléments de remplacement. La valeur admise peut être (##any, ##other, liste de anyURI, ##targetNamespace ou ##local). Si la valeur est ##any, les éléments ou attributs de remplacements peuvent se trouver dans n'importe quel espace de noms, ou dans aucun d'eux. Si la valeur est ##other, les éléments ou attributs de remplacement peuvent se trouver dans un espace de noms autre que l'espace de noms cible du document, mais ils doivent se trouver dans un espace de noms. Si le document du schéma ne contient pas d'espace de noms cible, les éléments ou attributs de remplacement peuvent avoir n'importe quel espace de noms mais doivent en avoir un. Dans le cas contraire, il peut s'agir d'une liste des valeurs séparées par un espace pouvant contenir l'un ou la totalité des éléments suivants : ##targetNamespace, #local ou des espaces de noms spécifiques. ##targetNamespace indique que les éléments ou attributs de remplacement peuvent se trouver dans l'espace de noms cible du document de schéma. ##local indique que les éléments ou attributs de remplacement peuvent ne pas se trouver dans un espace de noms.

Table des matières

Mots clés

Si le schéma que vous modélisez n'a pas besoin de spécifier ses éléments plus en détails, vous pouvez utiliser les mots-clés à la place des stéréotypes. Le tableau ci-dessous décrit les mots-clés pris en charge par la transformation UML vers XSD.

Mot-clé Applicable à l'élément UML Commentaires
annotation Comment Le commentaire est converti en une annotation "appinfo" ou "documentation".
attribute Property (de Class) La propriété est convertie en attribut dans un type complexe si la multiplicité de la propriété est [0..1].
attributeGroup Classe La classe est convertie en groupe d'attributs.
complexType Classe La classe est convertie en un type complexe.
element Propriété La propriété est convertie en un élément de type complexe.
enumeration Classe La classe est convertie en énumération XSD si la classe comporte une relation de généralisation vers une autre classe représentant un type simple.
global Classe

Une classe comportant ce mot-clé est convertie en déclaration d'élément ou d'attribut de niveau supérieur. La classe ne doit détenir qu'une seule propriété. Si la propriété comporte un stéréotype ou un mot-clé <<attribute>> (attribute) la classe est convertie en attribut de niveau supérieur. Dans le cas contraire, elle devient un élément de niveau supérieur.

Le nom de l'élément ou de l'attribut est dérivé du nom de la propriété, et le type du type de la propriété.

listOf Dépendance entre deux classes représentant deux types simples Le client de la dépendance est converti en liste de XSD dont le type d'élément est le fournisseur de la dépendance. Il ne peut exister qu'une seule dépendance entre deux classes, chacune représentant un type simple.
modelGroup Classe La classe est convertie en un groupe de modèle nommé réutilisable comportant un modèle de contenu sequence.
schema Package

Le package et son contenu sont convertis dans un schéma XSD. Le nom du package devient celui du schéma (fichier).

Si vous utilisez le mot-clé schema, vous devez préciser l'espace de noms cible et son préfixe en attribuant respectivement les valeurs appropriées aux propriétés de transformation Espace de noms cible et Préfixe de l'espace de noms cible.

simpleType Classe La classe est convertie en un type simple si elle comporte une généralisation vers un type de données intégrées XSD ou un autre type simple.
unionOf Dépendance entre deux classes représentant deux types simples Le client de la dépendance est converti en union XSD, le fournisseur de la dépendance étant l'un de ses membres. Une classe représentant un type simple peut comporter plusieurs de ces dépendances vers différentes classes (type simple).
wildcard Propriété

La propriété UML est convertie en un caractère générique d'élément. Si la propriété comporte le mot-clé attribute en plus du caractère générique, elle est convertie en un caractère générique d'attribut.

Table des matières

Bibliothèque de modèles : Types de données intégrées XSD

Quarante-quatre types simples sont intégrés à la recommandation de schéma XML. Ces types simples représentent des types de données communs tels que des valeurs de chaîne, de nombre, de date et d'heure. Ils incluent également des types existants correspondant aux types d'attribut dans XML 1.0. XSD offre également douze facettess contraignantes que vous pouvez utiliser pour spécifier une plage valide de valeurs de types simples, contraindre la longueur et la précision de leurs valeurs, énumérer une liste de valeurs valides ou spécifier une expression régulière à laquelle doivent correspondre les valeurs valides.

Vous pouvez dériver de nouveaux types simples à partir de types intégrés ou d'autres types simples en les limitant en attribuant les valeurs appropriées aux facettes. Pour ce faire, il est nécessaire d'avoir à disposition une représentation des types intégrés dans les modèles UML.

Les types simples intégrés sont modélisés sous forme de classes et disponibles dans une bibliothèque de modèles appelée XSDDataTypes. Vous devez importer la bibliothèque XSDDataTypes dans votre modèle pour accéder à ces types. Pour importer la bibliothèque de modèles XSDDataTypes, dans l'explorateur de modèles, cliquez à l'aide du bouton droit de la souris sur la racine de votre modèle (le modèle lui-même), sélectionnez Importer une bibliothèque de modèles..., puis choisissez XSDDataTypes dans la liste déroulante.

Pour définir de nouveaux types simples (définis par l'utilisateur), vous devez spécialiser à partir des classes appropriées dans le modèle XSDDataTypes et utiliser le propriétés du stéréotype <<simpleType>> pour contraindre la valeur des types définis. Par exemple :

Vous pouvez limiter la valeur maximale de Quantity à, disons, 100 en attribuant la valeur 100 à maxInclusive de la propriété de <<simpleType>>.

Table des matières

Règles de mappage UML vers XSD

L'objectif du schéma XML de modélisation dans UML consiste à créer une représentation visuelle d'un schéma XML puis générer le schéma à l'aide d'une transformation UML vers XSD. L'analyse montre que la plupart des fonctionnalités fondamentales du schéma XML peuvent être représentées par des éléments de modèle UML. Le tableau ci-dessous illustre un sous-ensemble du mappage entre les concepts présents dans UML et les concepts correspondants dans XML Schema Definition (XSD).

Concepts UML Concepts du schéma XML
Package Espace de noms unique avec préfixe
Classe Types et groupes réutilisables
  • Type complexe et déclaration d'élément correspondant
  • Type simple
  • Groupe d'attributs, groupe de modèles nommé et groupe de substitution
Enumération Restriction d'un type simple de chaîne XSD à facettes d'énumération égales aux littéraux d'énumération UML. Notez que cela est différent de ce qu'il se produit avec une classe UML comportant un stéréotype <<enumeration>> appliqué. L'utilisation d'une classe UML stéréotypée autorise les énumérations XSD plus générales.
Propriétés d'une classe Eléments et attributs d'un type complexe
Association (agrégation) Elément enfant d'un élément contenu (type complexe)
Généralisation Dérivation du type
  • Dérivation par extension du type complexe
  • Dérivation par restriction du type complexe
  • Dérivation par restriction du type simple
Identité de l'objet Zones clés spécifiées par l'utilisateur ou mécanisme d'identité explicite (pas encore implémenté).

Règle de mappage : Package -> Schéma XSD

Elément UML Elément XSD Commentaires
Package avec stéréotype <<schema>> Schéma avec un espace de noms cible et un préfixe d'espace de noms cible Le contenu d'un package crée un schéma dans un fichier .xsd. Le nom du fichier schéma est identique à celui du package.

Les propriétés du stéréotype <<schema>> (attributeFormDefault et elementFormDefault) peuvent être utilisés pour spécifier les attributs attributeFormDefault et elementFormDefault sur le schéma généré.

Si vous utilisez un mot-clé schema à la place du stéréotype, vous devez fournir l'espace de noms cible et son préfixe en attribuant respectivement les valeurs des propriétés de transformation Espace de noms cible et Préfixe de l'espace de noms cible.

Règles de mappage : Classe -> Type complexe, Propriété -> Elément et Propriété -> Attribut

Elément UML Elément XSD Commentaires
Classe avec stéréotype <<complexType>> Type complexe Si l'une des valeurs possibles all, choice ou sequence n'est pas attribuée à la propriété du stéréotype modelGroup, le type complexe est généré avec un groupe de modèles sequence.
Classe avec mot-clé complexType Type complexe Le type complexe est généré avec un groupe de modèles sequence.
Classe sans mot-clé ou stéréotype Type complexe Un type complexe est généré uniquement si la valeur true est attribuée à la propriété de transformation Process unmarked class. Dans le cas contraire, la classe est ignorée. Si un type complexe est généré, la valeur sequence est attribuée à son groupe de modèles.
Propriété Elément du type complexe
La propriété comportant le stéréotype <<attribute>> ou un mot-clé attribute. Attribut du type complexe

La propriété est convertie en un attribut uniquement si la propriété est un type simple et sa multiplicité [0..1]. Dans le cas contraire, elle est convertie en élément.

Si vous indiquez une valeur par défaut, la propriété est convertie en attribut facultatif comportant une valeur par défaut. Si vous faites en sorte que la propriété soit en lecture seule et fournissez une valeur par défaut, la propriété est convertie en attribut dont la valeur est celle par défaut. Dans les deux cas, vous devez définir la multiplicité de la propriété sur [0..1].

Vous pouvez utiliser la propriété use du stéréotype <<attribute>> pour faire en sorte que l'attribut soit facultatif ou obligatoire. Si vous attribuez la valeur required au stéréotype use, que vous indiquez une valeur par défaut et faites en sorte que la propriété soit en lecture seule, la valeur par défaut et la spécification de lecture seule sont ignorées.

Règle de mappage : Classe avec <<global>>  -> Elément global ou attribut

Elément UML Elément XSD Commentaires
Une classe avec un stéréotype <<global>> ou un mot-clé "global" contenant une propriété. Elément global (de niveau supérieur) ou attribut.

La classe ne doit détenir qu'une seule propriété. Si la propriété comporte un stéréotype ou un mot-clé <<attribute>> (attribute) la classe est convertie en attribut de niveau supérieur. Dans le cas contraire, elle devient un élément de niveau supérieur.

Le nom de l'élément ou de l'attribut est dérivé du nom de la propriété, et le type du type de la propriété.


Règle de mappage : Relations de généralisation parmi les classes <<global>>  -> Groupe de substitution

Elément UML Elément XSD Commentaires
Relations de généralisation parmi des classes dont le stéréotype <<global>> a été appliqué. Groupe de substitution composé des éléments globaux représentés par les classes avec les stéréotype <<global>>. Pour former un groupe de substitution d'éléments globaux, leurs types (classes) eux-mêmes doivent être une relation de généralisation équivalente.

Dans l'exemple ci-dessous, l'élément global "robe" est la tête du groupe de substitution et les éléments globaux "chemise" et "pantalon" sont les membres. Notez que les types de ces éléments se trouvent dans la relation de généralisation équivalente à la celle des éléments globaux.


Règle de mappage : Classe -> Type simple

Elément UML Elément XSD Commentaires
Classe avec un stéréotype <<simpleType>> ou un mot-clé simpleType

Type simple défini par l'utilisateur.

Restriction d'un type simple intégré ou d'un autre type simple défini par l'utilisateur

Doit comporter une relation de généralisation vers un type simple intégré, un autre type simple défini par l'utilisateur ou un type d'énumération XSD.

Règle de mappage : Classe -> Enumération XSD

Elément UML Elément XSD Commentaires
Classe avec stéréotype <<enumeration>> ou mot-clé enumeration Enumération XSD.
Un type simple avec facette d'énumération spécifiée
Doit comporter une relation de généralisation vers un type simple intégré ou un autre type simple défini par l'utilisateur.

Règle de mappage : Enumération UML -> Enumération XSD

Elément UML Elément XSD Commentaires
Enumération UML Enumération XSD, un type simple avec base de restriction xsd:string et facette d'énumération spécifiée N'a besoin pas d'une généralisation vers un autre type simple.

Règles de mappage : Classe -> Groupes réutilisables : groupe de modèles et groupe d'attributs

Elément UML Elément XSD Commentaires
Classe avec stéréotype <<modelGroup>> Groupe de modèles nommé Si l'une des valeurs possibles all, choice ou sequence n'est pas attribuée à la propriété du stéréotype modelGroup, le groupe de modèles est généré avec un groupe de modèles sequence.
Classe avec mot-clé modelGroup Groupe de modèles nommé Le groupe de modèles nommé est généré avec un groupe de modèles sequence.
Classe avec stéréotype <<attributeGroup>> ou mot-clé attributeGroup Groupe d'attributs Chaque propriété de la classe est convertie en un membre du groupe d'attributs, à condition qu'il s'agisse d'un type pouvant être converti en type simple et comportant une multiplicité [0..1]. Dans le cas contraire, la propriété est ignorée.

Etant donné que les propriétés peuvent uniquement être converties en attributs XSD, il n'est pas impératif d'appliquer le stéréotype <<attribute>> aux propriétés. Toutefois, si vous souhaitez préciser des propriétés supplémentaires (required ou form, par exemple) pour les attributs, vous devez appliquer le stéréotype <<attribute>> et attribuer les valeurs appropriées à ses propriétés.

Règle de mappage : Dérivation de classe

Elément UML Elément XSD Commentaires
La classe A dérive d'une autre classe B.

Un type complexe B qui est une extension de contenu complexe du type complexe A.

La classe A ou B peut comporter un stéréotype <<complexType>> ou le mot-clé complexType.

Les classes A et B ne peuvent en aucun cas comporter un groupe de modèles "all" ou un modèle de contenu. Toute tentative d'extension des classes avec des groupes de modèles "all" peuvent aboutir à une violation de contrainte.

La classe B ne peut pas comporter le stéréotype <<modelGroup>> ou <<attributeGroup>>, ni le mot-clé modelGroup ou attributeGroup. En d'autres termes, un type complexe ne peut pas étendre un groupe de modèles ou un groupe d'attributs.

La classe A dérive d'une autre classe B avec un stéréotype <<simpleType>> ou un mot-clé simpleType.

Un type complexe B qui est une extension de contenu simple du type simple A. Toute propriété de la classe B devient un attribut de l'extension de contenu simple.

Le seul objectif de la dérivation à partir d'un type simple est d'ajouter des attributs. Par conséquent, le type d'une propriété de la classe B doit être un type simple et sa multiplicité [0..1]. Dans le cas contraire, le modèle enfreint la contrainte.

Règle de mappage : Association -> Elément de type complexe

Elément UML Elément XSD Commentaires
Association (orientée ou composite) Classe A -> Classe B Elément dans le type complexe A du type complexe B Le nom de l'élément est déterminé par le nom du rôle de l'extrémité d'association.

Règle de mappage : Propriété -> Elément de type complexe

Elément UML Elément XSD Commentaires
La classe A contient une ou plusieurs propriétés de la classe B Elément dans le type complexe A du type complexe B Le nom de l'élément est déterminé par le nom de la propriété.

Règle de mappage : Association -> Référence du groupe de modèles et référence du groupe d'attributs

Elément UML Elément XSD Commentaires

Association (association orientée ou agrégation composite) de la classe A vers la classe B avec un stéréotype <<modelGroup>>.

Classe A -> Classe C avec le stéréotype <<attributeGroup>>.

Référence du groupe de modèles dans le type complexe A.

Référence du groupe d'attributs dans le type complexe A.


Association (association orientée ou agrégation composite) de la classe A avec le stéréotype <<modelGroup>> vers la classe B comportant également le stéréotype <<modelGroup>> Référence du groupe de modèles dans le groupe de modèles représenté par la classe A
Association (association orientée ou agrégation composite) de la classe A avec le stéréotype <<attributeGroup>> vers la classe B comportant également le stéréotype <<attributeGroup>> Référence du groupe d'attributs dans le groupe d'attributs représenté par la classe A



Règle de mappage : Dépendance -> Types Liste et Union

Elément UML Elément XSD Commentaires
Dépendance avec un stéréotype <<listOf>> ou un mot-clé listOf entre deux types simples

Type de liste.

Le client de la dépendance est converti en un type simple qui est une liste du fournisseur de la dépendance

Le client et le fournisseur de la dépendance doivent être des types simples, et il ne doit exister qu'une seule dépendance <<listOf>> entre eux. Il ne doit y avoir aucune autre relation entre ces deux classes.

Dépendance avec un stéréotype <<unionOf>> ou un mot-clé unionOf entre le type simple d'un client et un ou plusieurs fournisseurs Type d'union.

Le client de la dépendance est converti en un type simple qui est une union des fournisseurs de la dépendance.

Le client et les fournisseurs de la dépendance doivent être des types simples, et il peut exister une ou plusieurs dépendances <<unionOf>> entre eux. Il ne doit y avoir aucune autre relation entre ces classes.

Table des matières

Règle de mappage : Classe -> Type complexe anonyme

Elément UML Elément XSD Commentaires

Classe A avec un stéréotype <<complexType>> et une propriété de stéréotype anonymous = true , et référencée par une autre classe B représentant un type complexe.

La classe A est convertie en un type complexe anonyme.

La référence est convertie en attribut ou élément dans le type complexe (représenté par la classe B). Le type de l'élément ou de l'attribut est défini par ce type anonyme.

Le nom de l'élément ou de l'attribut est déterminé par le nom du rôle de l'extrémité d'association ou le nom de la propriété.

Etant donné que la classe A est spécifiée comme anonyme, aucune déclaration de type complexe de niveau supérieur n'est générée pour cette classe.

Règle de mappage : Classe -> Type simple anonyme

Elément UML Elément XSD Commentaires
Classe A avec un stéréotype <<simpleType>> et une propriété de stéréotype anonymous = true, et référencée par une autre classe B représentant un type complexe

La classe A est convertie en type simple anonyme.

La référence est convertie en attribut ou élément dans le type complexe (représenté par la classe B). Le type de l'élément ou de l'attribut est défini par ce type anonyme.

Le nom de l'élément ou de l'attribut est déterminé par le nom du rôle de l'extrémité d'association ou le nom de la propriété.

Etant donné que la classe A est spécifiée comme anonyme, aucune déclaration de type simple de niveau supérieur n'est générée pour cette classe.

Règle de mappage : Classe -> Enumération anonyme

Elément UML Elément XSD Commentaires
Classe A avec un stéréotype <<enumeration>> et une propriété de stéréotype anonymous = true, et référencée par une autre classe B représentant un type complexe

La classe A est convertie en énumération anonyme.

La référence est convertie en attribut ou élément dans le type complexe (représenté par la classe B). Le type de l'élément ou de l'attribut est défini par ce type anonyme.

Le nom de l'élément ou de l'attribut est déterminé par le nom du rôle de l'extrémité d'association ou le nom de la propriété.

Etant donné que la classe A est spécifiée comme anonyme, aucune déclaration de type simple de niveau supérieur avec facette d'énumération n'est générée pour cette classe.

Règle de mappage : Référence au groupe de modèles anonyme -> Imbrication de la séquence et des groupes de choix

Elément UML Elément XSD Commentaires

Association (agrégation orientée ou composite) entre une classe A et une classe B avec un stéréotype <<modelGroup>> et la valeur de propriété anonymous = true.

Un type complexe représentant la classe A contenant le groupe de modèles du groupe de modèles nommé représentés par la classe B.

Ce mappage est valide uniquement si A et B ne contiennent aucun modèle de contenu all.
Association (agrégation orientée ou composite) entre une classe A avec un stéréotype <<modelGroup>> et une classe B avec un stéréotype <<modelGroup>>, et la valeur de propriétéanonymous = true. Un groupe de modèles nommé représentant la classe A contenant le groupe de modèles du groupe de modèles nommé représentés par la classe B. Ce mappage est valide uniquement si A et B ne contiennent aucun modèle de contenu all.

La référence ci-dessus aux groupes de modèles peut également être modélisée à l'aide des propriétés de classe.

Elément UML Elément XSD Commentaires
Classe A contenant une propriété dont le type est la classe B avec un stéréotype <<modelGroup>> et la valeur de propriété anonymous = true. Un type complexe représentant la classe A contenant le groupe de modèles du groupe de modèles nommé représentés par la classe B. Ce mappage est valide uniquement si A et B ne contiennent aucun modèle de contenu all.
Classe A avec un stéréotype <<modelGroup>> contenant une propriété dont le type est la classe B avec un stéréotype <<modelGroup>> et la valeur de propriété anonymous = true. Un groupe de modèles nommé représentant la classe A contenant le groupe de modèles du groupe de modèles nommé représentés par la classe B. Ce mappage est valide uniquement si A et B ne contiennent aucun modèle de contenu all.

Règle de mappage : Classe imbriquée -> Type complexe anonyme

Elément UML Elément XSD Commentaires
Classe A contenant une classe B imbriquée, avec une association entre A et B. Elément dans le type complexe A d'un type anonyme B.

Il doit exister une relation entre la classe d'imbrication et la classe imbriquée.

Le même composant de schéma est obtenu si la classe A contient une propriété de type B au lieu d'une association.



Règle de mappage : Classe imbriquée -> Type simple anonyme

Elément UML Elément XSD Commentaires
Classe A contenant une classe B imbriquée avec un stéréotype <<simpleType>> ou un mot-clé simpleType, et une association entre A et B. Elément dans le type complexe A d'un type simple anonyme B.

Il doit exister une relation entre la classe d'imbrication et la classe imbriquée.

Le même composant de schéma est obtenu si la classe A contient une propriété de type B au lieu d'une association.

Règle de mappage : Composant UML -> Annotation

Elément UML Elément XSD Commentaires
Commentaire Annotation Un commentaire d'un élément UML est converti en annotation de documentation XSD.
Commentaire avec stéréotype <<annotation>> Annotation Le type d'annotation documentation ou appinfo dépend de la valeur attribuée à la propriété kind du stéréotype <<annotation>>. Un élément documentation est créé si la valeur de kind est documentation. Un élément appinfo est créé si la valeur est applicationInfo. La valeur par défaut de kind est documentation.




Règle de mappage : Propriété -> Caractère générique d'élément

Elément UML Elément XSD Commentaires
Propriété avec stéréotype <<wildcard>> ou mot-clé wildcard. Caractère générique de l'élément dans le type complexe ou un groupe de modèles englobant Les propriétés namespace et processContents du stéréotype <<wildcard>> déterminent les espaces de noms dans lesquels sont susceptibles de se trouver les éléments de remplacement et la manière de strictement valider les remplacements.



Règle de mappage : Propriété -> Caractère générique d'attribut

Elément UML Elément XSD Commentaires
Propriété avec les stéréotypes <<attribute>> et <<wildcard>> ou les mots-clés attribute et wildcard. Caractère générique d'attribut dans le type complexe ou un groupe d'attributs englobant Les propriétés namespace et processContents du stéréotype <<wildcard>> déterminent les espaces de noms dans lesquels sont susceptibles de se trouver les attributs de remplacement et la manière de strictement valider les attributs de remplacement.



Schéma XML de modélisation dans UML : Bonnes pratiques

L'objectif du schéma XML de modélisation dans UML consiste à créer une représentation visuelle d'un schéma XML puis générer le schéma à l'aide d'une transformation UML vers XSD. D'une manière générale, votre modèle comportera des éléments représentant des éléments XSD ainsi que des éléments qui ne sont pas liés à XSD. Nous vous recommandons de ne pas oublier les instructions suivantes lors del a construction d'un tel modèle.

  1. Placez les éléments liés à XSD et ceux qui ne le sont pas dans des packages distincts.
  2. Placez les éléments liés à XSD appartenant à des espaces de noms différents dans des packages distincts.
  3. Appliquez le profil XSD aux packages contenant des éléments liés à XSD. Par ailleurs, vous pouvez également appliquer le Profil XSD au modèle lui-même.
  4. Appliquez le stéréotype <<schema>> issu du profil XSD à chaque package contenant les éléments liés à XSD.
  5. Spécifiez l'espace de noms cible et son préfixe en attribuant les valeurs appropriées aux propriétés targetNamespace et targetNamespacePrefix du stéréotype <<schema>>.
  6. Utilisez les propriétés de transformation pour contrôler le contenu des ensembles de packages et de classes que doit traiter la transformation UML vers XSD.

Table des matières

Limitations

Cette transformation n'a pas encore implémenté les règles permettant de générer les éléments XSD suivants :

Table des matières

Annexe A. Signification des facettes

Facettes Signification
fractionDigits Le nombre de chiffres fractionnaires doit être inférieur ou égal à x
length La longueur de la valeur doit être x
maxExclusive La valeur doit être inférieure à x
maxInclusive La valeur doit être inférieure ou égale à x
maxLength La longueur de la valeur doit être inférieure ou égale à x
minExclusive La valeur doit être supérieure à x
minInclusive La valeur doit être supérieure ou égale à x
minLength La longueur de la valeur doit être supérieure ou égale à x
pattern x est l'une des expressions régulières à laquelle peut correspondre la valeur
totalDigits Le nombre de chiffres significatifs doit être inférieur ou égal à x
whitespace Le processeur de schéma doit conserver, remplacer ou condenser les espaces en fonction de x

Table des matières

Annexe B : Types simples et facettes applicables

Le tableau ci-dessous énumère les types de données intégrées et les facettes applicables. Notez que même si les recommandations de la W3C utilise énumération pour parler de facette, nous n'avons pas inclus énumération dans le tableau. Nous représentons l'énumération à l'aide d'une classe comportant le stéréotype <<enumeration>>, ou d'une énumération UML.

Types de données (Base de restriction) Facettes applicables
ENTITY, ID, IDREF length, maxlength, minlength
une valeur de collapse est attribuée à whitespace
pattern est [\i-[:]][\c-[:]]*
IDREFS length, maxlength, pattern
minlength est égal à 1
une valeur de collapse est attribuée à whitespace
Nom length, maxlength, minlength
La valeur collapse est attribuée à whitespace
pattern est \i\c*
NCName length, maxlength, minlength
La valeur collapse est attribuée à whitespace
pattern est [\i-[:]][\c-[:]]*
NMTOKEN length, maxlength, minlength
une valeur de collapse est attribuée à whitespace
pattern est \c+
NMTOKENS length, maxlength
minlength est égal à 1
une valeur de collapse est attribuée à whitespace
NOTATION length, maxlength, minlength, pattern
une valeur de collapse est attribuée à whitespace
QNAME length, maxlength, minlength, pattern
une valeur de collapse est attribuée à whitespace
anyURI, base64Binary, hexBinary length, maxlength, minlength, pattern
une valeur de collapse est attribuée à whitespace
langue length, maxlength, minlength
La valeur collapse est attribuée à whitespace
pattern est ([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
La valeur collapse est attribuée à whitespace
decimal maxExclusive, maxInclusive, minExclusive, minExclusive, fractionDigits, totalDigits, pattern
la valeur de collapse est attribuée whitespace
types de données entières (integer, byte, int, long, negativeInteger, nonNegativeInteger, nonPositiveInteger, positiveInteger, unsignedByte, unsignedInt, unsignedLong, unsignedShort)

maxExclusive, maxInclusive, minExclusive, minExclusive, totalDigits, pattern
La valeur 0 est attribuée à fractionDigits
La valeur collapse est attribuée à whitespace
Types de données de date et d'heure (date, time, dateTime, gYear,gYearMonth, gMonth, gMonthDay, gDay, duration)
maxExclusive, maxInclusive, minExclusive, minExclusive, pattern
la valeur de collapse est attribuée whitespace
string, normalizedString, token length, maxLength, minLength, pattern
L'espaces est preserve pour string, replace pour normalizedString et collapse pour token


Table des matières