Beperkingen van keyref XML-schema (XSD) toewijzen aan datasetbeperkingen
Met het keyref-element kunt u koppelingen tot stand brengen tussen elementen in een document. Dit is vergelijkbaar met een refererende-sleutelrelatie in een relationele database. Als een schema het keyref-element opgeeft, wordt het element tijdens het schematoewijzingsproces geconverteerd naar een bijbehorende beperking voor refererende sleutels op de kolommen in de tabellen van de DataSet. Standaard genereert het keyref-element ook een relatie, met de eigenschappen ParentTable, ChildTable, ParentColumn en ChildColumn die zijn opgegeven in de relatie.
De volgende tabel bevat een overzicht van de msdata-kenmerken die u kunt opgeven in het keyref-element .
Naam van kenmerk | Beschrijving |
---|---|
msdata:ConstraintOnly | Als ConstraintOnly="true" is opgegeven op 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 kenmerk ConstraintName is opgegeven, wordt de waarde ervan gebruikt als de naam van de beperking. Anders biedt het naamkenmerk van het keyref-element in het schema de naam van de beperking in de DataSet. |
msdata:UpdateRule | Als het kenmerk UpdateRule is opgegeven in het keyref-element in het schema, wordt de waarde toegewezen aan de eigenschap UpdateRule-beperking in de DataSet. Anders is de eigenschap UpdateRule ingesteld op Trapsgewijs. |
msdata:DeleteRule | Als het kenmerk DeleteRule is opgegeven in het keyref-element in het schema, wordt de waarde toegewezen aan de eigenschap DeleteRule-beperking in de DataSet. Anders is de eigenschap DeleteRule ingesteld op Trapsgewijs. |
msdata:AcceptRejectRule | Als het kenmerk AcceptRejectRule is opgegeven in het keyref-element in het schema, wordt de waarde toegewezen aan de eigenschap AcceptRejectRule constraint in de DataSet. Anders is de eigenschap AcceptRejectRule ingesteld op None. |
Het volgende voorbeeld bevat een schema dat de sleutel- en sleutelref-relaties aangeeft tussen het onderliggende element OrderNumber van het element Order en het onderliggende element OrderNo van het element OrderDetail.
In het voorbeeld verwijst het onderliggende element OrderNumber van het element OrderDetail naar het onderliggende element OrderNo van het element 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>
Het XSD-schematoewijzingsproces (XML Schema Definition Language) produceert de volgende DataSet met twee tabellen:
OrderDetail(OrderNo, ItemNo) and
Order(OrderNumber, EmpNumber)
Daarnaast definieert de DataSet de volgende beperkingen:
Een unieke beperking in de tabel Order .
Table: Order Columns: OrderNumber ConstraintName: OrderNumberKey Type: UniqueConstraint IsPrimaryKey: False
Een relatie tussen de tabellen Order en OrderDetail . De geneste 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 beperking voor refererende sleutels in de tabel OrderDetail .
ConstraintName: OrderNoRef Type: ForeignKeyConstraint Table: OrderDetail Columns: OrderNo RelatedTable: Order RelatedColumns: OrderNumber