Mapper les contraintes keyref de schéma XML (XSD) aux contraintes de DataSet

L’élément keyref vous permet d’établir des liens entre les éléments d’un document. Il s’agit d’une relation de clé étrangère dans une base de données relationnelle. Si un schéma spécifie l’élément keyref , l’élément est converti pendant le processus de mappage de schéma en contrainte de clé étrangère correspondante sur les colonnes des tables du DataSet. Par défaut, l’élément keyref génère également une relation, avec les propriétés ParentTable, ChildTable, ParentColumn et ChildColumn spécifiées sur la relation.

Le tableau suivant présente les msdata attributs que vous pouvez spécifier dans l’élément keyref .

Nom de l’attribut Descriptif
msdata :ConstraintOnly Si ConstraintOnly="true » est spécifié sur l’élément keyref du schéma, une contrainte est créée, mais aucune relation n’est créée. Si cet attribut n’est pas spécifié (ou est défini sur False), la contrainte et la relation sont créées dans le DataSet.
msdata :ConstraintName Si l’attribut ConstraintName est spécifié, sa valeur est utilisée comme nom de la contrainte. Sinon, l’attribut name de l’élément keyref dans le schéma fournit le nom de contrainte dans le DataSet.
msdata :UpdateRule Si l’attribut UpdateRule est spécifié dans l’élément keyref du schéma, sa valeur est affectée à la UpdateRule propriété de contrainte dans dataSet. Sinon, la UpdateRule propriété est définie sur Cascade.
msdata :DeleteRule Si l’attribut DeleteRule est spécifié dans l’élément keyref du schéma, sa valeur est affectée à la DeleteRule propriété de contrainte dans dataSet. Sinon, la DeleteRule propriété est définie sur Cascade.
msdata :AcceptRejectRule Si l’attribut AcceptRejectRule est spécifié dans l’élément keyref du schéma, sa valeur est affectée à la AcceptRejectRule propriété de contrainte dans dataSet. Sinon, la propriété a la AcceptRejectRule valeur None.

L’exemple suivant contient un schéma qui spécifie les relations entre l’élément key enfant de l’élément keyref et l’élément OrderNumber enfant de l’élément Order.

Dans l’exemple, l’élément OrderNumber enfant de l’élément OrderDetail fait référence à l’élément OrderNo enfant clé de l’élément Order .

<xs:schema id="MyDataSet" xmlns=""
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

 <xs:element name="MyDataSet" msdata:IsDataSet="true">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
      <xs:element name="OrderDetail">
       <xs:complexType>
         <xs:sequence>
           <xs:element name="OrderNo" type="xs:integer" />
           <xs:element name="ItemNo" type="xs:string" />
         </xs:sequence>
       </xs:complexType>
      </xs:element>
      <xs:element name="Order">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="OrderNumber" type="xs:integer" />
            <xs:element name="EmpNumber" type="xs:integer" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:complexType>

  <xs:key name="OrderNumberKey"  >
    <xs:selector xpath=".//Order" />
    <xs:field xpath="OrderNumber" />
  </xs:key>

  <xs:keyref name="OrderNoRef" refer="OrderNumberKey">
    <xs:selector xpath=".//OrderDetail" />
    <xs:field xpath="OrderNo" />
  </xs:keyref>
 </xs:element>
</xs:schema>

Le processus de mappage de schéma XSD (XML Schema Definition Language) produit les éléments suivants DataSet avec deux tables :

OrderDetail(OrderNo, ItemNo) and
Order(OrderNumber, EmpNumber)

En outre, le DataSet définit les contraintes suivantes :

  • Contrainte unique de la table Order.

              Table: Order
    Columns: OrderNumber
    ConstraintName: OrderNumberKey
    Type: UniqueConstraint
    IsPrimaryKey: False
    
  • Relation entre les tables Order et OrderDetail. La propriété Nested est définie sur False parce que les deux éléments ne sont pas imbriqués dans le schéma.

              ParentTable: Order
    ParentColumns: OrderNumber
    ChildTable: OrderDetail
    ChildColumns: OrderNo
    ParentKeyConstraint: OrderNumberKey
    ChildKeyConstraint: OrderNoRef
    RelationName: OrderNoRef
    Nested: False
    
  • Contrainte de clé étrangère sur la table OrderDetail.

              ConstraintName: OrderNoRef
    Type: ForeignKeyConstraint
    Table: OrderDetail
    Columns: OrderNo
    RelatedTable: Order
    RelatedColumns: OrderNumber
    

Voir aussi