SQL Server 2000和XML for SQL Server 2000 Web版本(SQLXML)提供了三种存储XML数据的途径:XML Bulk Load和Updategrams,这两种客户端技术使用带有注解的大纲指定XML文档内容和数据库的表之间的映射;OpenXML是一种服务器端技术,它允许你在XML文档上定义关系视图,有了OpenXML的关系视图,你就能使用T-SQL代码查询XML文档中的数据并把结果存储在你的SQL Server数据库中。
www.it55.com在线教程
这三种技术中的每一种都是为特定的目的设计的。
XML Bulk Load把来自很大的
XML文档的
数据存储在SQL Server中;Updategrams执行SQL Server
数据的优化更新(优化更新是没有锁(lock)的更新,在这种更新中系统检测是否有其它用户在原来读取
数据后改变了它);Open
XML提供了人们熟悉的
XML数据关系访问方法。
在这三种技术中,Open
XML是最灵活的,因为它提供了一个编程模型(T-SQL),在把
XML数据存储在SQL Server
数据库之前,你可以使用这种编程模型在
XML数据上编写业务规则或执行计算逻辑。但是,由于Open
XML是一种基于服务器的技术,如果你频繁的使用它或者有大量的文档,它会降低SQL Server的性能。不过,如果你采用了微软.NET框架组件,你就可以使用ADO.NET的
数据集绕开这些性能和可伸缩性方面的限制,ADO.NET
数据集赋予你一个强大的技术--为把
XML数据存储在SQL Server包含了一个完整的编程模型。
45398 www.it55.com it55学习IT知识,享受IT生活 4dfkjn 数据集、数据表和XML映射 你可以使用
数据集简单地从SQL Server中生成
XML查询结果。通过提供一种可以在客户端和中间层计算机上使用的关系
数据缓存(cache),
数据集能够载入和维护多种
数据源(包括SQL Server、其它的关系型
数据库和
XML)中的
数据。
当你从
XML文档中载入一个
数据集的时候,该
数据集必须把存储在层次
XML表现(representation)中的
数据映射成
数据集的关系表现。例如,如果你的
XML文档包含一个Order元素列表,而它又有一个作为子元素的嵌套的LineItem元素,那么通常这个文档被映射成关系表现中的Orders和LineItems
数据表。这种映射的目的与Open
XML使用Xpath查询构造
XML文档上的关系视图的方法的目的是一样的。但是与使用Xpath规范不同,
数据集有自己的映射
数据的方式。
免费资源www.it55.com 数据集使用
XML大纲定义(XSD)大纲把
数据从
XML文档映射到
数据集的关系
数据缓存中。
数据集为你提供了指定映射
XML数据的大纲的两种方法。首先,你可以引用一个定义了
XML文档中使用的元素,属性和关系的XSD大纲。另一种方法是,你可以直接从文档的结构中推理大纲。换句话说,
数据集可以通过检查
XML文档的结构和内容建立大纲。
当你引用XSD大纲的时候,
数据集使用这个大纲中定义的元素、属性与元素之间的关系来构造关系
数据缓存中的
数据表、
数据列和
数据关系,你可以使用这个
数据缓存存储被映射的
XML数据。我谈到关系
数据缓存中的结构或大纲的时候,一般把它称为
数据缓存的形式。当
数据集处理大纲的时候,它会应用一组规则,这种规则与映射大纲中没有指定注解时Updategrams 和
XML Bulk Load使用的默认映射规则相似,
数据集使用这种规则建立
数据集用于存储被映射的
XML数据的表。
数据集的映射规则概述如下:
www.it55.com在线教程 · 复合元素--即包含其它元素或属性的元素--被映射成表。
· 属性和简单值(simple-valued)子元素--只包含
数据,不包含其它元素或属性的元素--被映射成列。
·
数据类型从XSD类型映射为.NET类型。
推理(Inference)是一种快速、方便的把
XML文档载入
数据集的方法。表、列和关系都是"自我测量"(introspection)自动建立的,"自我测量"是
数据集检查
XML文档的结构和内容的过程。尽管使用推理明显减少了你的编程负担,但是它也给你的实现带来了不可预测性,因为对
XML文档的很小的改动可能引起
数据集建立不同形式的表。这些形式的改变可能引起你的应用程序意外中断。因此,我推荐你一般为应用程序引用一个大纲,建立原型的时候限制推理的使用。
http://www.it55.com/
现在让我们看一看如何使用大纲建立一个可用于更新SQL Server
数据库的客户端
数据集
数据缓存的例子。
http://www.it55.com/
映射XML订单
假定你在编写一个接受用户订单的应用程序,订单是XML格式的,它的XSD大纲如图1定义。该大纲定义了三种复合类型,分别提供订单的客户数据、订单数据和线性数据项。一个顶层Customer元素定义了XML文档的根。这个封闭的系统定义了元素之间的关系:Order元素包含了一个LineItem元素,Customer元素包含一个Order元素。图2显示了符合图1定义的大纲的一个XML文档实例。
图1:XSD大纲
免费资源www.it55.com
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="urn:Sep2003Example" elementFormDefault="qualified"
xmlns="urn:Sep2003Example"
xmlns:xs="http://www.w3.org/2001/
XMLSchema">
<xs:complexType name="OrderType">
<xs:sequence>
<xs:element name="OrderID" type="xs:integer" />
<xs:element name="LineItem" type="LineItemType" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="LineItemType">
<xs:sequence>
<xs:element name="ProductID" type="xs:int" />
<xs:element name="Quantity" type="xs:int" />
<xs:element name="UnitPrice" type="xs:decimal" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="CustomerType">
<xs:sequence>
<xs:element name="CustomerID" type="xs:string" />
<xs:element name="Order" type="OrderType" />
</xs:sequence>
</xs:complexType>
<xs:element name="Customer" type="CustomerType">
sflj www.it55.com kg^&fgd </xs:element>
</xs:schema>
图2:一个
XML文档示例
<?xml version="1.0" ?>
<Customer xmlns="urn:Sep2003Example">
<CustomerID>ALFKI</CustomerID>
<PO>9572658</PO>
<Address>
<Street>One Main Street</Street>
<City>Anywhere</City>
<State>NJ</State>
<Zip>08080</Zip> </Address>
<Order>
<OrderID>10966</OrderID>
(编辑:IT资讯之家 www.it55.com)