该 keyref 元素允许你在文档中的元素之间建立链接。 这类似于关系数据库中的外键关系。 如果架构指定 keyref 元素,则元素在架构映射过程中转换为对表中 DataSet列的相应外键约束。 默认情况下,该 keyref 元素还会生成一个关系,该关系具有 ParentTable、 ChildTable、 ParentColumn 和 ChildColumn 指定属性。
下表概述了可以在 keyref 元素中指定的 msdata 属性。
| 属性名称 | DESCRIPTION |
|---|---|
| msdata:ConstraintOnly | 如果在架构中的元素上指定 keyref,则会创建约束,但不会创建任何关系。 如果未指定此属性(或设置为 False),则会在 数据集中创建约束和关系。 |
| msdata:ConstraintName | 如果指定了特性 ConstraintName ,则其值将用作约束的名称。 否则,架构中keyref元素的name属性将在DataSet中提供约束名称。 |
| msdata:UpdateRule | 如果在架构中的keyref元素中指定了UpdateRule特性,则其值将被分配给DataSet中的UpdateRule约束属性。 否则,该 UpdateRule 属性将设置为 Cascade。 |
| msdata:DeleteRule |
DeleteRule在架构中的keyref元素指定了该特性时,其值将分配给DataSet中的DeleteRule约束属性。 否则,该 DeleteRule 属性将设置为 Cascade。 |
| msdata:AcceptRejectRule | 如果在架构的keyref元素中指定了AcceptRejectRule属性,则该属性的值将分配给DataSet中的AcceptRejectRule约束属性。 否则,该 AcceptRejectRule 属性设置为 None。 |
下面的示例包含一个架构,该架构中指定了元素的Order子元素与元素的OrderDetail子元素之间的keykeyref关系、以及OrderNumber和OrderNo关系。
在此示例中, OrderNumber 元素的 OrderDetail 子元素引用 OrderNo 元素的关键 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>
XML 模式定义语言 [XSD] 的模式映射过程生成了如下结果,包括 DataSet 和两个表:
OrderDetail(OrderNo, ItemNo) and
Order(OrderNumber, EmpNumber)
此外,DataSet 定义了以下约束:
Order表的唯一约束。Table: Order Columns: OrderNumber ConstraintName: OrderNumberKey Type: UniqueConstraint IsPrimaryKey: FalseOrder和OrderDetail表之间的关系。 该Nested属性设置为False因为两个元素未嵌套在架构中。ParentTable: Order ParentColumns: OrderNumber ChildTable: OrderDetail ChildColumns: OrderNo ParentKeyConstraint: OrderNumberKey ChildKeyConstraint: OrderNoRef RelationName: OrderNoRef Nested: False在
OrderDetail表上的外键约束。ConstraintName: OrderNoRef Type: ForeignKeyConstraint Table: OrderDetail Columns: OrderNo RelatedTable: Order RelatedColumns: OrderNumber