第三十讲 深入了解DataSet

*摘要
。DataSet概述
。XSD概述
。DataSet架构
。DataSet模式推断
。DataSet序列化

*数据集概述
1、数据集
是一种代表关系数据的内存驻留结构
2、数据集分类
-类型化数据集
-非类型化数据集

* XSD概述
。XSD(XML Schema Definition) XML架构定义语言
。XSD是XML专门用来描述数据结构的。它允许应用程序在处理数据时读并且使用模式信息
。XSD是专门用于描述数据类型,关系以及其他一些规则的XML方言,它控制XML文档中出现的各个变量和属性
。XSD中包括各种数据类型

* XML的元素、属性
。XML架构的基本构造块是元素和属性。数据类型定义元素和属性包含的有效内容。
。元素:描述其所包含的数据。元素可以包含其他元素和属性。基本元素包含一个名称和数据类型
。属性:是不能包含其他元素的命名的简单类型定义。可以被分配为一个可选默认值,且必须出现在复杂数据类型的底部

* 元素还是属性?
。元素用于封装数据,而属性通常用于提供有关元素的伴随信息,而不是封装原始数据本身。实际使用元素还是属性取决于应用程序的需要。
。当您你信息需要简单类型的数据并且存在以下情况时,请使用属性:
-信息需要默认值或固定值。
-信息需要的数据是现有元素的元数据
-如果XML文件的大小很得重要,那么属性所需要的字节数往往比元素要少。
。下面的列表从架构角度描述元素和属性之间的主要差异:
-架构可以定义元素的排序是否有效,但属性可以任意顺序出现。
-元素可以用<choice>标记嵌套,这意味着列出的元素中有一个且仅有一个可以显示。
-元素可以出现不止一次,但属性不能。

* XML类型
。XML架构中的类型定义元素或属性可以包含的有效数据类型,可为简单类型或复杂类型。
。简单类型:不包含子元素和属性。
。方面:约束简单类型可接受的值。用户定义的简单类型可通过应用方面来创建。
。复杂类型:允许您在XML架构中定义具有属生或子元素的元素。例如,可以定义由名称,地址和邮政编码组成的“地址类型”(address Type)。然后这个新类型就可以由“地址”(Address)元素使用。

* 用户定义的简单类型
。用户定义的简单类型是对元素或属性内容的限制。用户定义的简单类型始终将元素内容限制为导出该元素的现有简单类型的一个子集。
<xs:simpleType name="qtyLimiter">
<xs:restriction base="xs:positivelnteger" />
<xs:maxInclusive value="100" />
</xs:simpleType>

* 元素组
。group元素:为命名一组元素和属性提供了一种方法。如果同一组子元素将出现在多个地方,那么整个方法非常实用。
。元素组:可以定义元素组来控制组内的各个元素出现在XML数据中的方式。
-sequence:所有元素都以准确顺序出现
-choice:组中只有一个元素出现
-all:所有元素都出现或都不出现

* DataSet架构
。DataSet架构是表,列和关系的集合
。每个DataSet实例都包含一个架构

* 定义DataSet架构
有以下困种方法可以定义DataSet架构:
1、直接使用DataSet API来创建DataTable, DataColumn,DataRelation
2、通过一个DataAdapter类,使用数据库元数据来推断出架构。
3、使用XSD定义需要的DataSet架构,并用DataSet.ReadXmlSchema将架构定义载入DataSet
4、使用DataSet.InferXmlSchema。根据一个XML文档,DataSet类将使用一个系列推现规则来推断一个DataSet架构。

* DataSet模式推理
。模式推理:即没有已知数据机构的DataSet在试图从一个XML文档中载入数据时执行的过程。
。DataSet首先遍历XML文档来推断数据结构,然后第二遍才真正把包含在文档里面的信息装载到DataSet中。
。在进行数据结构推断时,必须遵守一些指定的规则。

*推理规则
。带有属生的元素要变成Table
。带有子元素的元素要变成Table
。重复元素仅做为一张Table
。属性为列
。如果文档(根)元素没有属性并且没有可作为列的子元素,则被推理为一个DataSet,否则文档元素为一张Table
。对于嵌入在其他被推理为Table的元素中的元素,应在两个表之间生成一个嵌套的DataRelation.

* DataSet序列化
。序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用HTTP通过Internet在客户端和服务器这间传输该对象。在另一端,反序列化将从该流重新构造对象。
。传统ADO默认使用一种二进制格式:DataSet则默认进行XML序列化。
。XML序列化仅将对象的公共字段和属性值序列化为XML流。XML序列化不包括类型信息。
。XML序列化不转换方法,索引器,私有字段或只读属性(只读集合除外)。
。XML序列化中最主要的类是XmlSerializer类,它的最重要的方法是Serialize和Deserialize方法。

原文地址:https://www.cnblogs.com/iceberg2008/p/1431733.html