Génération de relations de DataSet à partir du schéma XML (XSD)

Dans un objet DataSet, vous créez une association entre deux ou plusieurs colonnes en établissant une relation parent-enfant. Il existe trois possibilités pour représenter une relation de DataSet dans un schéma en langage XSD (XML Schema Definition) :

  • spécifier des types complexes imbriqués ;

  • utiliser l’annotation msdata:Relationship ;

  • spécifier un xs:keyref sans annotation msdata:ConstraintOnly.

Types complexes imbriqués

Les définitions de types complexes imbriqués dans un schéma indiquent les relations parent-enfant des éléments. Le fragment de schéma XML suivant montre que OrderDetail est un élément enfant de l’élément Order.

<xs:element name="Order">  
  <xs:complexType>  
     <xs:sequence>
       <xs:element name="OrderDetail" />  
           <xs:complexType>
           </xs:complexType>  
     </xs:sequence>  
  </xs:complexType>  
</xs:element>  

Le processus de mappage du schéma XML crée dans le DataSet des tables qui correspondent aux types complexes imbriqués du schéma. Il crée également des colonnes supplémentaires utilisées comme colonnes parent-enfant pour les tables générées. Notez que ces colonnes parent-enfant spécifient des relations, à ne pas confondre avec les contraintes de clé primaire/clé étrangère.

Annotation msdata:Relationship

L’annotation msdata:Relationship vous permet de spécifier explicitement les relations parent-enfant existant entre différents éléments non imbriqués du schéma. L’exemple suivant représente la structure de l’élément Relationship.

<msdata:Relationship name="CustOrderRelationship"
msdata:parent=""
msdata:child=""
msdata:parentkey=""
msdata:childkey="" />  

Les attributs de l’annotation msdata:Relationship identifient les éléments impliqués dans la relation parent-enfant, ainsi que les éléments et attributs parentkey et childkey impliqués dans la relation. Le processus de mappage exploite ces informations pour générer des tables dans le DataSet et pour créer la relation clé primaire/clé étrangère entre ces différentes tables.

Par exemple, le fragment de schéma suivant spécifie que les éléments Order et OrderDetail se situent au même niveau (ne sont pas imbriqués). Le schéma comporte une annotation msdata:Relationship, qui spécifie la relation parent-enfant entre ces deux éléments. Dans ce cas, une relation explicite doit être spécifiée à l’aide de l’annotation msdata:Relationship.

 <xs:element name="MyDataSet" msdata:IsDataSet="true">  
  <xs:complexType>  
    <xs:choice maxOccurs="unbounded">  
        <xs:element name="OrderDetail">  
          <xs:complexType>  
  
          </xs:complexType>  
       </xs:element>  
       <xs:element name="Order">  
          <xs:complexType>  
  
          </xs:complexType>  
       </xs:element>  
    </xs:choice>  
  </xs:complexType>  
</xs:element>  
   <xs:annotation>  
     <xs:appinfo>  
       <msdata:Relationship name="OrdOrdDetailRelation"  
          msdata:parent="Order"  
          msdata:child="OrderDetail"
          msdata:parentkey="OrderNumber"  
          msdata:childkey="OrderNo"/>  
     </xs:appinfo>  
  </xs:annotation>  

Le processus de mappage utilise l’élément Relationship pour créer une relation parent-enfant entre la colonne OrderNumber de la table Order et la colonne OrderNo de la table OrderDetail dans le DataSet. Il ne spécifie que la relation ; il ne spécifie pas automatiquement de contraintes sur les valeurs de ces colonnes comme le font des contraintes de clé primaire/clé étrangère dans des bases de données relationnelles.

Dans cette section

Mapper les relations implicites entre éléments de schéma imbriqués
Décrit les contraintes et relations implicitement créées dans un DataSet lorsque le schéma XML contient des éléments imbriqués.

Mapper les relations spécifiées pour les éléments imbriqués
Explique comment définir explicitement des relations dans un DataSet pour les éléments imbriqués d’un schéma XML.

Spécifier les relations entre éléments sans imbrication
Explique comment créer des relations dans un DataSet pour les éléments de schéma XML qui ne sont pas imbriqués.

Dérivation de la structure relationnelle des DataSet à partir du schéma XML (XSD)
Décrit la structure relationnelle, ou schéma, d’un DataSet créé à partir d’un schéma en langage XSD (XML Schema Definition).

Mappage des contraintes de schéma XML (XSD) aux contraintes de DataSet
Décrit les éléments de schéma XML qui servent à créer des contraintes uniques et de clé étrangère dans un DataSet.

Voir aussi