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.
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 :
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.
Pour exécuter la transformation :
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.
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é.
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.
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é.
Cette transformation accepte un modèle UML contenant au moins un package ou un ou plusieurs packages UML en tant que source.
Cette transformation accepte un projet comme cible.
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. |
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, extension, restriction 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. |
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. |
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>>.
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
|
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
|
Identité de l'objet | Zones clés spécifiées par l'utilisateur ou mécanisme d'identité explicite (pas encore implémenté). |
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. |
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. |
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é. |
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.
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. |
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. |
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. |
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. |
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. |
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. |
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é. |
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 |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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 . |
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. |
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. |
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.
Cette transformation n'a pas encore implémenté les règles permettant de générer les éléments XSD suivants :
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 |
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 |