Delen via


Toewijzen van XML Schema (XSD) keyref-beperkingen aan DataSet-beperkingen

Met keyref het element kunt u koppelingen tot stand brengen tussen elementen in een document. Dit is vergelijkbaar met een vreemde-sleutelrelatie in een relationele database. Als een schema het keyref-element opgeeft, wordt het element tijdens schematoewijzing geconverteerd naar een overeenkomstige vreemde-sleutelbeperking op de kolommen in de tabellen van de DataSet. Standaard genereert het keyref element ook een relatie, met de BovenliggendeTabel, KindTabel, BovenliggendeKolom en ChildColumn met de eigenschappen die voor de relatie zijn gespecificeerd.

De volgende tabel bevat een overzicht van de msdata kenmerken die u in het keyref element kunt opgeven.

Naam van kenmerk Beschrijving
msdata:ConstraintOnly Als ConstraintOnly="true" is opgegeven voor het keyref element in het schema, wordt er een beperking gemaakt, maar er wordt geen relatie gemaakt. Als dit kenmerk niet is opgegeven (of is ingesteld op Onwaar), worden zowel de beperking als de relatie gemaakt in de DataSet.
msdata:ConstraintName Als het ConstraintName kenmerk is opgegeven, wordt de waarde ervan gebruikt als de naam van de beperking. Anders biedt het name kenmerk van het keyref element in het schema de naam van de beperking in de DataSet.
msdata:UpdateRule Als het UpdateRule kenmerk is opgegeven in het keyref element in het schema, wordt de waarde toegewezen aan de UpdateRule eigenschap constraint in de DataSet. Anders is de UpdateRule eigenschap ingesteld op Trapsgewijs.
msdata:DeleteRule Als het DeleteRule kenmerk is opgegeven in het keyref element in het schema, wordt de waarde toegewezen aan de DeleteRule eigenschap constraint in de DataSet. Anders is de DeleteRule eigenschap ingesteld op Trapsgewijs.
msdata:AcceptRejectRule Als het AcceptRejectRule kenmerk is opgegeven in het keyref element in het schema, wordt de waarde toegewezen aan de AcceptRejectRule eigenschap constraint in de DataSet. Anders is de AcceptRejectRule eigenschap ingesteld op Geen.

Het volgende voorbeeld bevat een schema dat de key en keyref relaties aangeeft tussen het OrderNumber onderliggende element van het Order element en het OrderNo onderliggende element van het OrderDetail element.

In het voorbeeld verwijst het OrderNumber onderliggende element van het OrderDetail element naar het OrderNo belangrijkste onderliggende element van het Order element.

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

Het XSD-schematoewijzingsproces (XML Schema Definition Language) levert het volgende DataSet, dat twee tabellen bevat.

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

Daarnaast definieert de DataSet volgende beperkingen:

  • Een unieke beperking in de Order tabel.

              Table: Order
    Columns: OrderNumber
    ConstraintName: OrderNumberKey
    Type: UniqueConstraint
    IsPrimaryKey: False
    
  • Een relatie tussen de Order en OrderDetail tabellen. De Nested eigenschap is ingesteld op False omdat de twee elementen niet zijn genest in het schema.

              ParentTable: Order
    ParentColumns: OrderNumber
    ChildTable: OrderDetail
    ChildColumns: OrderNo
    ParentKeyConstraint: OrderNumberKey
    ChildKeyConstraint: OrderNoRef
    RelationName: OrderNoRef
    Nested: False
    
  • Een foreign key-beperking op de OrderDetail tabel.

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

Zie ook