HOPEX UML : HOPEX XML Schemas : Génération XSD : XSD : Définitions de type
   
XSD : Définitions de type
 
XSD : Paramètres de génération sur une classe type
XSD : Héritage des types
Types simples
Types complexes
De manière générale, les classes UML servent à définir les divers éléments du vocabulaire d'un espace de nommage parmi lesquels les attributs, les éléments, les groupes modèles et les groupes d'attributs.
En dehors des classes imbriquées et des classes associatives, une classe définissant un type est en général reliée à une classe schéma par la patte "XML Document Definition Root". Sinon, elle est considérée comme appartenant globalement à l’espace de nommage et est donc générée dans tous les schémas de l’espace de nommage.
Parmi les définitions de type, XSD offre la possibilité de définir des types complexes (complexType) et des types simples (simpleType).
Une classe servant de définition de type ne doit pas être de stéréotype "XML Document Definition" (réservé aux classes schémas) ni de stéréotype "Schema group" (réservé aux classes définition de groupes).
Les classes associatives ne sont prises en comptes que sur les associations servant à préciser l'existence de sous éléments dans un type, c'est à dire sur les compositions. Dans ce cas, on considère que l'élément est du type défini par la classe associative et que celle ci dérive de la classe composante.
XSD : Paramètres de génération sur une classe type
Vous pouvez renseigner les paramètres de génération d’un type sous l’onglet XSD de sa fenêtre de propriétés :
XSD Name : nom du type dans le cadre de la génération XSD. Si il n'est pas renseigné, c'est le nom de la classe qui est pris en compte.
XSD Id : correspond à l'attribut "id".
XSD BlockExtension et XSD BlockRestriction : permettent de déterminer la valeur de l'attribut "block". La valeur de l'attribut "block" est une combinaison des valeurs "extension" et "restriction".
XSD FinalExtension, XSD FinalRestriction, XSD FinalList et XSD FinalUnion : permettent de déterminer la valeur de l'attribut "final". Cette valeur est une combinaison des valeurs "restriction", "list" et "union" s’il s’agit d’un type simple, et une combinaison des valeurs "extension" et "restriction" si c’est un type complexe.
XSD List : utilisé pour les types simples, ce paramètre permet de définir un "héritage par liste". Voir "Héritage par liste".
XSD union : utilisé pour les types simples, ce paramètre permet de définir un "héritage par union".
XDD order : indique la contrainte d'ordre sur les sous éléments.
XDD Text : précise si le type contient ou non des données autres que des sous tags. Le résultat est répercuté sur l'attribut "mixed".
XDD compulsory ID Attribute : ce paramètre est utilisé de concert avec XDD ID Attribute Name et XDD ID Attribute Required. Il indique la présence d'un attribut de type "ID".
XDD ID Attribute Name : permet d'indiquer le nom de l'attribut de type ID généré si XDD compulsory ID Attribute est à "oui".
XDD ID Attribute Required : permet de spécifier les options de présence de l'attribut dans le document instance.
XSD : Héritage des types
Types simples
Les types simples servent à définir les données qui sont contenues, soit dans des attributs, soit dans des balises.
<balise attribut="donnees"/>
<balise>donnees</balise>
Un type simple peut être dérivé d'un autre type simple. Si une classe dérive d'une autre classe représentant un type complexe, la classe dérivée est interprétée comme étant un type complexe.
*Les classes de stéréotype expression sont générées comme des classes dérivant d'un type simple, dont le type de base est identifié par la classe reliée par la patte "UML Type de base de l'expression".
Trois formes d'héritage sont possibles pour les types simples :
Héritage par restriction
Il est possible de créer un type simple à partir d'un autre type simple en imposant des restrictions (sur la taille des données, sur les valeurs possibles etc). Voir "Définition de restriction (Facets)", page 59.
Héritage par liste
Vous pouvez créer un type qui désigne une liste de valeurs d'un certain type. Voir "Définition d'un type "Liste"", page 60.
Héritage par union
Vous pouvez créer des types représentant un regroupement de différents types. Voir "Définition d'union", page 56.
Types complexes
Les types complexes définissent les contenus des balises (déclarés avec la balise "element") en termes de données, de sous-balises et d’attributs.
Comme pour les types simples, les types complexes bénéficient de l'héritage. Vous pouvez soit étendre, soit restreindre leur contenu.
Un type complexe peut dériver d'un type complexe (<complexContent> ou <simpleContent> si il y a restriction) ou d'un type simple (<simpleContent>).
Deux formes d'héritage sont possibles :
Héritage par extension
Vous pouvez ajouter des sous balises ou des attributs à un type déjà existant.
Pour étendre le contenu d’un type complexe :
1. Dans le diagramme de classes, cliquez sur le bouton Généralisation de la barre d’objets et reliez la classe à la classe représentant le type que vous voulez étendre.
Le nouveau type est généré avec une balise <complexContent> ou <simpleContent> dans laquelle sont générés les <elements> ou <attributs> supplémentaires sous la balise <extension>.
2. Cliquez avec le bouton droit sur la généralisation et ouvrez ses Propriétés.
3. Cliquez sur l’onglet Génération.
4. Dans le champ XSD Heritated by restriction, sélectionnez "extension".
Héritage par restriction
Vous pouvez restreindre le contenu d'un type complexe. Vous pouvez par exemple changer les contraintes sur ses éléments ou attributs (comme la multiplicité).
Pour restreindre le contenu d’un type complexe :
1. Reliez par une généralisation la classe dérivée à la classe que vous voulez restreindre.
2. Ouvrez la fenêtre de propriétés de la généralisation.
3. Cliquez sur l’onglet Génération.
4. Dans le champ XSD Heritated by restriction, sélectionnez "restriction".
Au niveau du contenu de la classe dérivée, vous devez rajouter les attributs ou créer les compositions nécessaires afin de redéfinir les éléments dont les contraintes ont changé.
Pour ce qui est des attributs, reliez l’attribut redéfini à l'attribut de base par le lien "Attribut surchargé".
De même, un rôle représentant la nouvelle utilisation d'un sous élément est relié au rôle de base par la patte "rôle surchargé".
Les autres éléments n'ont pas à être ajoutés dans la classe qui sera générée en type restreint, ils seront générés automatiquement dans le nouveau type. Les éléments du type sont contenus dans une balise <restriction>, elle-même contenue sous une balise <complexContent> ou <simpleContent>.