Freigeben über


Zuordnen von keyref-XML Schema (XSD)-Einschränkungen zu DataSet-Einschränkungen

Mit dem keyref-Element können Sie Links zwischen Elementen innerhalb eines Dokuments erstellen. Dies ist mit einer Fremdschlüsselbeziehung in einer relationalen Datenbank vergleichbar. 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 der Tabelle des DataSet konvertiert. In der Standardeinstellung generiert das keyref-Element außerdem eine Beziehung, wobei die Eigenschaften ParentTable, ChildTable, ParentColumn und ChildColumn der Beziehung angegeben werden.

In der folgenden Tabelle werden die msdata-Attribute aufgelistet, die im keyref-Element angegeben werden können.

Attributname BESCHREIBUNG
msdata:ConstraintOnly Wenn für das keyref-Element im Schema ConstraintOnly="true" angegeben wurde, wird eine Einschränkung, jedoch keine Beziehung erstellt. Wenn dieses Attribut nicht angegeben wird (oder auf False festgelegt ist), werden im DataSet sowohl die Einschränkung als auch die Beziehung erstellt.
msdata:ConstraintName Wenn das ConstraintName-Attribut angegeben ist, wird dessen Wert als Einschränkungsname 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 wurde, wird dessen Wert der UpdateRule-Einschränkungseigenschaft im DataSet zugeordnet. Andernfalls wird die UpdateRule-Eigenschaft auf Cascade festgelegt.
msdata:DeleteRule Wenn das DeleteRule-Attribut im keyref-Element im Schema angegeben wurde, wird dessen Wert der DeleteRule-Einschränkungseigenschaft im DataSet zugeordnet. Andernfalls wird die DeleteRule-Eigenschaft auf Cascade festgelegt.
msdata:AcceptRejectRule Wenn das AcceptRejectRule-Attribut im keyref-Element im Schema angegeben wurde, wird dessen Wert der AcceptRejectRule-Einschränkungseigenschaft im DataSet zugeordnet. Andernfalls wird die AcceptRejectRule-Eigenschaft auf None festgelegt.

Das folgende Beispiel enthält ein Schema, das die key-Beziehung und die keyref-Beziehung zwischen dem untergeordneten OrderNumber-Element des Order-Elements und dem untergeordneten OrderNo-Element des OrderDetail-Elements angibt.

Im Beispiel bezieht sich das untergeordnete OrderNumber-Element des OrderDetail-Elements auf das untergeordnete OrderNo-Schlüsselelement 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 Zuordnungsprozess des XSD-Schemas (XML Schema Definition Language) erstellt das folgende DataSet mit zwei Tabellen:

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

Zusätzlich werden im DataSet die folgenden Einschränkungen definiert:

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

              Table: Order  
    Columns: OrderNumber
    ConstraintName: OrderNumberKey  
    Type: UniqueConstraint  
    IsPrimaryKey: False  
    
  • Eine Beziehung zwischen der Tabelle Order und der Tabelle OrderDetail. Die Nested-Eigenschaft ist auf False festgelegt, da die zwei 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 Tabelle OrderDetail.

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

Siehe auch