HOPEX UML : HOPEX XML Schemas : Créer un schéma XML : Références : Créer une référence bidirectionnelle (Schéma XML)
   
Créer une référence bidirectionnelle (Schéma XML)
Il est possible de référencer deux définitions de balises par la même association.
Il faut alors créer une association bidirectionnelle (navigable dans les deux sens) entre les deux classes représentant le schéma et l'élément référencé.
Vous devez également renseigner les multiplicités des deux rôles (par défaut, la valeur de la multiplicité est *).
Pour créer une référence bidirectionnelle :
1. Ouvrez un diagramme, en faisant un clic droit sur le schéma et en sélectionnant Nouveau > Diagramme de classes.
2. Glissez les deux éléments de l’éditeur de schémas dans la fenêtre du diagramme.
3. Dans le menu contextuel du rôle de l'association non navigable, sélectionnez Navigabilité > Oui.
La flèche disparaît du lien : la référence est devenue bidirectionnelle.
4. Fermez le diagramme en enregistrant.
 
Fonctionnement
Dans le cas d'une association bidirectionnelle, un attribut de type IDREF (ou IDREFS) est généré pour chaque balise basée sur les deux types reliés. Dans le document instance, la valeur de cet attribut fait référence à un attribut de type ID de la balise opposée.
Exemple :
Dans l'exemple ci-dessous, chaque ouvrage référence les auteurs et inversement.
Dans les sources générées, seuls les attributs permettant de faire la référence des ouvrages depuis un auteur sont en gras. Les attributs assurant la référence symétrique sont facilement repérables.
XSD
<xsd:complexType name="Ouvrage" abstract="false" mixed="false">
<xsd:sequence>
<xsd:element name="Resume" abstract="false" minOccurs="1" maxOccurs="1" type="Resume">
</xsd:element>
<xsd:element ref="comment"/>
</xsd:sequence>
<xsd:attribute name="genre" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:anyType">
<xsd:enumeration value="Pratique"/>
<xsd:enumeration value="Science Fiction"/>
<xsd:enumeration value="Littérature"/>
<xsd:enumeration value="Musique"/>
<xsd:enumeration value="Scolaire"/>
<xsd:enumeration value="Enfance"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="ISBN" type="xsd:ID" use="required">
</xsd:attribute>
<xsd:attribute name="ReferencesBibliographiques" use="required" type="IDREF"/>
<xsd:attribute name="Auteur" use="required" type="IDREF"/>
</xsd:complexType>