XML 架构定义语言 (XSD) 允许对它所定义的元素和特性指定约束。在将 XML 架构映射到 DataSet 中的关系架构时,XML 架构约束将映射到 DataSet 中表和列上的相应关系约束。
本主题讨论以下 XML 架构约束的映射:
使用对元素或特性的约束,可以对任何文档实例中元素的值指定特定的约束。例如,对架构中 Customer 元素的 CustomerID 子元素的某一键约束指示 CustomerID 子元素的值必须在任何文档实例中都是唯一的,并且不允许空值。
为了在文档中建立关系,也可以在文档中的元素和特性之间指定约束。key 和 keyref 约束用于在架构中指定文档中的约束,从而生成文档元素和特性之间的关系。
映射进程将这些架构约束转换为在 DataSet 中创建的表上的相应约束。
本节内容
将唯一 XML 架构 (XSD) 约束映射到 DataSet 约束:描述用于在 DataSet 中创建唯一约束的 XML 架构元素。
|
在 XML 架构定义语言 (XSD) 架构中,unique 元素对元素或特性指定唯一约束。在将 XML 架构转换为关系架构 (DataSet) 的过程中,对 XML 架构中的元素或特性指定的唯一约束将映射到所生成的相应 DataSet 中的 DataTable 中的唯一约束。 下表概括了可在 unique 元素中指定的 msdata 特性。
以下示例显示一个 XML 架构,它使用 unique 元素来指定唯一约束。 <xs:schema id="SampleDataSet" 该架构中的 unique 元素指定对于文档实例中的所有 Customers 元素,CustomerID 子元素的值必须是唯一的。当生成 DataSet 时,映射进程将读取此架构并生成下表: Customers (CustomerID, CompanyName, Phone) 映射进程还会在 CustomerID 列上创建一个唯一约束,如以下 DataSet 所示。(为简便起见,只显示相关属性。)
在所生成的 DataSet 中,对于唯一约束,IsPrimaryKey 属性设置为 False。该列上的 unique 属性指示 CustomerID 列值必须是唯一的(但它们可以是空引用,这是该列的 AllowDBNull 属性所指定的)。 如果修改架构,指定 unique 元素的可选 msdata:PrimaryKey 特性并将它的值设置为 True,则将在表上创建唯一约束。AllowDBNull 列属性设置为 False,而约束的 IsPrimaryKey 属性设置为 True,从而使 CustomerID 列成为主键列。 您可以对 XML 架构中元素或特性的组合指定唯一约束。以下示例演示如何通过在架构中添加另一个 xs:field 元素来指定 CustomerID 和 CompanyName 值的组合必须对于任何实例中的所有 Customers 都是唯一的。
以下示例显示在所生成的 DataSet 中创建的约束。 ConstraintName: SomeName |
将键 XML 架构 (XSD) 约束映射到 DataSet 约束:描述用于在 DataSet 中创建键约束(不允许 null 值的唯一约束)的 XML 架构元素。
|
在架构中可以使用 key 元素对元素或特性指定键约束。对其指定键约束的元素或特性必须在任何架构实例中都具有唯一值,并且不能具有空值。 除了对其定义键约束的列不能具有空值之外,键约束与唯一约束类似。 下表概括了可在 key 元素中指定的 msdata 特性。
当转换在其中指定键约束的架构时,映射进程会在为约束中的每一列将
AllowDBNull 列属性设置为 False
情况下在表上创建唯一约束。除非对 key 元素指定 在以下架构示例中,key 元素对 CustomerID 元素指定键约束。 <xs:schema id="cod" key 元素指定 Customers 元素的 CustomerID 子元素的值必须是唯一值,并且不能具有空值。在转换 XML 架构定义语言 (XSD) 架构时,映射进程将创建下表: Customers(CustomerID, CompanyName, Phone) XML 架构映射还会在 CustomerID 列上创建 UniqueConstraint,如以下 DataSet 所示。(为简便起见,只显示相关属性。)
在所生成的 DataSet 中,由于该架构在 key
元素中指定 DataSet 中 UniqueConstraint 的 ConstraintName 属性值是在该架构的 key 元素中指定的 msdata:ConstraintName 特性值。 |
将 keyref XML 架构 (XSD) 约束映射到 DataSet 约束:描述用于在 DataSet 中创建 keyref(外键)约束的 XML 架构元素。
|
keyref 元素用于在文档中的元素之间建立链接。它类似于关系数据库中的外键关系。如果架构指定 keyref 元素,则在架构映射进程中,该元素将转换为 DataSet 的表列上的相应外键约束。默认情况下,keyref 元素还会生成关系,并对关系指定 ParentTable、ChildTable、ParentColumn 和 ChildColumn 属性。 下表概括了可在 keyref 元素中指定的 msdata 特性。
以下示例包含一个架构,它在 Order 元素的 OrderNumber 子元素和 OrderDetail 元素的 OrderNo 子元素之间指定 key 和 keyref 关系。 在该示例中,OrderDetail 元素的 OrderNumber 子元素引用 Order 元素的 OrderNo 键子元素。 <xs:schema id="MyDataSet" xmlns="" XML 架构定义语言 (XSD) 架构映射进程生成以下包含两个表的 DataSet: OrderDetail(OrderNo, ItemNo) and 此外,该 DataSet 还定义以下约束:
|