Rétro-génération XSD : ComplexType
La balise "ComplexType" définit la structure d'une balise XML. Cette structure peut ensuite être réutilisée par plusieurs balises. La structure est complexe, c'est-à-dire qu'elle peut contenir des attributs et des sous-balises. On peut également hériter d'autres types en les restreignant (certains des éléments et attributs existants son restreints : ex : multiplicité) ou en ajoutant de nouveaux attributs et éléments.
La balise "ComplexType" est modélisée par une classe UML.
Attributs de "ComplexType"
• Abstract : est modélisé par l'attribut Abstraite de la classe UML associée au type.
• Block : est modélisé par les paramètres :
• XSD Block Extension : qui prend la valeur "oui" si on interdit la substitution du type par un type hérité par extension dans le document instance, la valeur "non" dans le cas contraire.
• XSD Block Restriction : qui prend la valeur "oui" si on interdit la substitution du type par un type hérité par restriction dans le document instance, la valeur "non" dans le cas contraire.
• Final : est modélisé par les paramètres :
• XSD Final Extension : qui prend la valeur "oui" si on interdit l'héritage par extension du complexType, la valeur "non" dans le cas contraire.
• XSD Final Restriction : qui prend la valeur 'oui' si on interdit l'héritage par restriction du complexType, la valeur "non" dans le cas contraire.
• Id : est modélisé par le paramètre XSD ID.
• Mixed : est modélisé par le paramètre XDD Text. Si la valeur de l'attribut vaut "yes", le paramètre XDD Text prend la valeur "oui". Dans le cas contraire, il prend la valeur "non".
• Name : définit le nom du type. Pour générer un nom différent de celui de la classe, indiquez le nouveau nom dans le paramètre XSD Name.
• Type : il s'agit de modéliser quel est le type rétro-généré : type simple ou type complexe. Cet attribut est modélisé par le paramètre XSD Type qui prend les valeurs "type simple" ou "type complexe". Dans le cas présent, il prend la valeur "type complexe". Il est facultatif.
SimpleContent
La modélisation dépend du type d'héritage :
Si le type restreint un type de base, on crée :
• Une généralisation entre les deux types. On initialise alors l'attribut de généralisation XSD Heritated By Restriction à "oui".
• Si la restriction porte des facets, on crée de la même façon que pour les types simples, des contraintes et on leur associe les valeurs des facets.
• Si la restriction restreint en plus des attributs du type de base, on crée l'attribut surchargeant, on relie l'attribut surchargeant à l'attribut surchargé par la patte "attribut surchargé".
• Si la restriction restreint un groupe d'attributs du type de base, on crée le groupe d'attributs surchargeant, on relie le groupe surchargeant au groupe surchargé par la patte "rôle surchargé".
Si le type étend un type de base, on crée :
• Une généralisation entre les deux types. On initialise alors l'attribut de généralisation XSD Heritated By Restriction à "non".
• On crée les nouveaux attributs et les nouveaux groupes.
ComplexContent
La modélisation dépend du type d'héritage :
Si le type restreint un type de base, on crée :
• Une généralisation entre les deux types. On initialise alors l'attribut de généralisation XSD Heritated By Restriction à "oui".
• Si la restriction restreint des éléments du type de base, on crée l'élément surchargeant, on relie l'élément surchargeant à l'élément surchargé par la patte "rôle surchargé".
• Si la restriction restreint des attributs du type de base, on crée l'attribut surchargeant, on relie l'attribut surchargeant à l'attribut surchargé par la patte "attribut surchargé".
• Si la restriction restreint un groupe d'attributs ou d'éléments du type de base, on crée le groupe surchargeant, on relie le groupe surchargeant au groupe surchargé par la patte "rôle surchargé".
Si le type étend un type de base, on crée :
• Une généralisation entre les deux types. On initialise alors l'attribut de généralisation XSD Heritated By Restriction à "non".
• On crée les nouveaux attributs, les nouveaux éléments et les nouveaux groupes.