Freigeben über


Zuordnung von Keyref-XML-Schemaeinschränkungen (XSD) zu DataSet-Einschränkungen

Mit dem keyref Element können Sie Verknüpfungen zwischen Elementen innerhalb eines Dokuments herstellen. Dies ähnelt einer Fremdschlüsselbeziehung in einer relationalen Datenbank. Wenn ein Schema das keyref-Element angibt, wird das Element während des Schemazuordnungsprozesses in eine entsprechende Fremdschlüsseleinschränkung für die Spalten in den Tabellen von DataSet umgewandelt. Standardmäßig generiert das keyref Element auch eine Beziehung mit der parentTable, ChildTable, ParentColumn und ChildColumn eigenschaften, die für die Beziehung angegeben sind.

In der folgenden Tabelle sind die msdata-Attribute aufgeführt, die Sie im keyref-Element angeben können.

Attributname BESCHREIBUNG
msdata:ConstraintOnly Wenn ConstraintOnly="true" für das keyref Element im Schema angegeben wird, wird eine Einschränkung erstellt, aber keine Beziehung erstellt. Wenn dieses Attribut nicht angegeben ist (oder auf False festgelegt ist), werden sowohl die Einschränkung als auch die Beziehung im DataSet erstellt.
msdata:ConstraintName Wenn das ConstraintName Attribut angegeben wird, wird der Wert als Name der Einschränkung verwendet. Andernfalls stellt das name Attribut des keyref Elements im Schema den Einschränkungsnamen im DataSet bereit.
msdata:UpdateRule Wenn das UpdateRule Attribut im keyref Element im Schema angegeben wird, wird dessen Wert der UpdateRule Einschränkungseigenschaft im DataSet zugewiesen. Andernfalls wird die UpdateRule Eigenschaft auf Cascade festgelegt.
msdata:DeleteRule Wenn das DeleteRule Attribut im keyref Element im Schema angegeben wird, wird dessen Wert der DeleteRule Einschränkungseigenschaft im DataSet zugewiesen. Andernfalls wird die DeleteRule Eigenschaft auf Cascade festgelegt.
msdata:AcceptRejectRule Wenn das AcceptRejectRule Attribut im keyref Element im Schema angegeben wird, wird dessen Wert der AcceptRejectRule Einschränkungseigenschaft im DataSet zugewiesen. Andernfalls wird die AcceptRejectRule Eigenschaft auf "None" festgelegt.

Das folgende Beispiel enthält ein Schema, das die Beziehungen zwischen dem OrderNumber-Kindelement des Order-Elements und dem OrderNo-Kindelement des OrderDetail-Elements angibt.

Im Beispiel bezieht sich das OrderNumber untergeordnete Element des OrderDetail Elements auf das OrderNo Schlüsseluntergeordnete Element des Order Elements.

<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>

Der XSD-Schemazuordnungsprozess (XML Schema Definition Language) erzeugt Folgendes DataSet mit zwei Tabellen:

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

Darüber hinaus definiert die DataSet folgenden Einschränkungen:

  • Eine eindeutige Einschränkung für die Order Tabelle.

              Table: Order
    Columns: OrderNumber
    ConstraintName: OrderNumberKey
    Type: UniqueConstraint
    IsPrimaryKey: False
    
  • Eine Beziehung zwischen den Order- und OrderDetail-Tabellen. Die Eigenschaft Nested ist auf False gesetzt, da die beiden Elemente im Schema nicht geschachtelt sind.

              ParentTable: Order
    ParentColumns: OrderNumber
    ChildTable: OrderDetail
    ChildColumns: OrderNo
    ParentKeyConstraint: OrderNumberKey
    ChildKeyConstraint: OrderNoRef
    RelationName: OrderNoRef
    Nested: False
    
  • Eine Fremdschlüsseleinschränkung für die OrderDetail Tabelle.

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

Siehe auch