数据文件、架构和转换组成基本的 XML
系统。下图显示了这种系统通常是如何工作的。数据文件先根据架构进行验证,然后通过转换以任意可用方式呈现。在本例中,转换向网页中的表部署数据。

XML 还不受平台的限制,这意味着,无论硬件或操作系统是什么,为使用 XML
而构建的任何程序都可以读取和处理 XML 数据。例如,利用正确的 XML
标记,就可以使用桌面程序打开和处理大型机中的数据。另外,无论是谁创建了
XML 数据体,您都可以通过若干 Microsoft Office 2003 和 Microsoft Office
专业版 2007 程序(包括 Microsoft Office Access 2007、Microsoft Office
Word 2007、Microsoft Office InfoPath 2007 和 Microsoft Office Excel
2007)处理相同的数据。由于 XML
具有可移植性,它已成为用于在数据库和用户桌面之间交换数据的最受欢迎的技术之一。

1、单击“外部数据”选项卡。 2、请执行下列操作之一:
-在“导入”组中,单击“XML 文件”。 -在“导出”组中,单击“更多”,然后单击“XML
文件”。

XML 数据类型查询和数据修改

如前所述,XML
还可以提供使用或重复使用数据的强大功能。重复利用数据的机制称为可扩展样式表语言转换
,或简称为转换。转换是 XML
的真正优点所在。例如,在根据架构验证数据文件之后,您可以应用一种转换使数据在
Microsoft Office Word 2003
中以市场宣传册的形式出现,然后应用另一种转换在 Office Excel 2007
中创建销售报表。

图片 1

目前为止没什么问题,但是,如果 XML 数据没有架构会怎么样呢?支持 XML 的
Office 程序有办法帮助您处理数据。例如,如果您在 Word
中打开没有附加架构的 XML 文件,Word
将同时显示标记和数据,并允许您在文件创建者或 IT
部门提供转换的情况下应用转换。至少,您可以查看文件中的标记和数据。

  查询执行在运行时处理每个 XML 实例;如果 XML
值比较大或需要在表的许多行中对查询进行求值,则查询执行就会变得非常费时。因此提供了一种索引
XML 列的机制来加速查询。

使所有此类工作更为方便的是:Microsoft
和日益增多的其他供应商正创建应用于各种任务的转换。不久的将来,您可以下载符合需要的转换,也可以调整转换以满足需要。这意味着,XML
的使用成本将随时间的推移而逐渐降低。

除了使用标准格式的标记数据之外,XML
系统通常还使用其他两种组件:架构和转换。以下部分将介绍这两种组件的工作方式。

启动 Office Access 2007 中的 XML 工具

  用户可以在同一个数据库中存储关系数据和 XML
数据。简而言之,数据库引擎除了知道如何遵循关系数据模型之外,还知道如何遵循
XML 数据模型。在升级到 SQL Server 2005 之后,关系数据和 SQL
应用程序仍然能够正常工作。在服务器上,可以将驻留在文件和文本或图像列中的
XML 数据移到 XML 数据类型的列中。通过使用 XML 数据类型的方法,可以建立
XML 列的索引,并对其进行查询和修改。

Altered

您不必了解创建标准格式 XML 的规则,但确实需要记住:只有在 XML
数据采用了标准格式的情况下,才可以在程序和系统之间共享该数据。如果某个
XML 文件无法打开,则该文件很可能不是标准格式的。

启动 Office Excel 2007 和 Office Word 2007 中的 XML 工具

  SQLXMLOLEDB Provider。SQLXMLOLEDB Provider 是一个 OLE DB
提供程序,它通过 ADO 公开 Microsoft SQLXML 功能。

Breed

您可能听 IT 部门的人员说过“标准格式”的 XML。标准格式的 XML
文件遵循一组管理 XML 的、非常严格的规则。如果文件不遵循这些规则,XML
就会停止运行。例如,在上面的代码示例中,每一个开始标记都有对应的结束标记,因此该示例遵循一种标准格式的规则。如果您删除一个标记,然后尝试在一个
Office
程序中打开该文件,您将会看到一条错误消息,并且该程序会阻止您使用该文件。

1、在 Excel 或 Word 中,单击“Office
按钮”图片 2,然后单击“Excel
选项”或“Word 选项”,具体取决于所打开的程序。 2、单击“个性化”。
3、在“使用应用程序名称
时采用的首选项”下,选择“在功能区显示‘开发工具’选项卡”,然后单击“确定”。

  例:将数据插入类型化的 XML 列

您还可以使用转换在数据库等后端系统之间交换数据。例如,假设数据库 A
在适用于销售部门的表结构中存储销售数据。数据库 B
在适用于财务部门的表结构中存储收入和支出数据。数据库 B 可以通过转换接受
A 中的数据,并将该数据写至正确的表中。

注释:功能区是 Microsoft Office Fluent 用户界面的一部分。

XML 数据类型

License

-Office Excel 2007、Office Word 2007 和 Office PowerPoint 2007 都使用
XML 作为默认文件格式,此更改具有多种优点。 -较小的文件大小。与 Office
早期版本中使用的二进制格式相比,新格式使用 ZIP
和其他压缩技术使文件大小减少 75%。
-简化了信息恢复过程并具有更强的安全性。XML
是用户可读的,因此如果文件已损坏,您可以在 Microsoft
记事本或其他文本阅读器中打开该文件,然后至少可以恢复一些信息。另外,新文件会更安全,因为它们不能包含
Visual Basic for Applications 代码。如果您使用新格式创建模板,则所有
ActiveX 控件和 VBA
宏都驻留在文件中的单独且更安全的部分中。另外,您还可以使用文档检查器等工具删除所有个人数据。有关使用文档检查器的详细信息,请参阅从
Office 文档中删除隐藏数据和个人信息一文。 -更强的可移植性和灵活性。由于
XML
以文本格式而不是专用的二进制格式存储数据,因此客户可以定义他们自己的架构并以多种方式使用您的数据而无须支付版税。有关新格式的详细信息,请参阅开放式
XML 文件格式简介。 -每个 Office 程序都附带不同的工具集。您在 Word
中使用的用户界面和过程与您在 Excel 或 PowerPoint
中使用的用户界面和过程不同。这是为什么?因为适用于 Word
的功能不一定适用于 Excel,等等。 -只要 XML 是标准格式的,Office
程序就可以使用其他供应商的架构、转换和数据。 -某些 Office 程序在后台使用
XML,而某些程序(如 Microsoft Office OneNote™)根本不支持 XML。了解
Office 程序如何支持 XML 的最好方法是启动相应程序的联机帮助,并搜索 XML。

INSERT XmlCatalog VALUES(2,'

图片 3

-无论在哪个程序中,请在“开发工具”选项卡上单击“XML”组中的任何可用命令。

SQL Server 2005 中的 XML 支持概述

Declawed

注释:Microsoft Office Access 2007 在默认情况下会启用其 XML
工具,因此如果您使用的是 Access,则可以跳过前面的步骤。

Age

相反,如果您打开没有架构的 XML 文件,Excel
将自行推断架构,随后会允许您选择将此数据加载到只读文件中,或将数据映射到
XML 列表(在 Microsoft Office Excel 2003 中)或 XML 表(在 Office Excel
2007 中)中。您可以使用 XML 列表和表对数据进行排序、筛选或计算。

INSERT INTO docs VALUES (1,'

此示例显示一种转换类型的编码形式,但是请记住,您只能用简单的英文描述您想要从数据中获得什么。例如,您可以对
IT
部门说您需要打印特定区域过去两年的销售数据,并指出“我希望数据的外观是这样的”。这样,IT
部门就可以编写一个可执行该任务的转换。

Microsoft Office 2003 和 2007 Office 发布版的专业版都提供强大的 XML
支持。

  一、简介

 Name

Office 专业版 2007 和 Microsoft Office 2003 都提供相同的 XML 工具集。在
Office 专业版 2007 中,必须先启用 XML
支持,然后从不同的位置启动这些工具。不过,在启动这些工具后,它们在
Microsoft Office 2003 和 Office 专业版 2007
中的工作方式相同。以下步骤介绍如何启动 Office Excel 2007 和 Office Word
2007 的 XML 工具。

  NULL 返回值可以在外部 SELECT 语句中过滤掉。或者也可以使用 exist()
方法,如下一个示例所示。

Owner

启用 Office Excel 2007 和 Office Word 2007 中的 XML 工具

  例:表中非类型化的 XML 列

下面的代码示例显示编写转换的一种方法。它将
数据加载到网页上的表中。再次声明一下,这里的示例并不是教您如何编写转换,而是向您展示一种转换形式。

对 XML 数据类型的客户端访问

  您可以使用普通的 CREATE TABLE 语句来创建带有 XML
列的表。然后就可以采用一种特别的方式来建立 XML 的索引。

DECLARE @xVar XMLSET   @xVar = (SELECT * FROM docs FOR XML AUTO,TYPE)存储表示XML 数据类型的实例存储在内部的二进制表示中,该表示是可流化的,并且经过了优化,从而可以更有效地进行解析。标记映射到整型值,而映射的值存储在内部表示中。这也产生了一些数据的压缩。对于非类型化的 XML,节点值存储为 Unicode (UTF-16) 字符串,因此需要进行运行时类型转换才能执行操作。例如,为了求谓词 /book/price > 9.99 的值,必须将该书的价格值转换为小数。而对于类型化的 XML,值的编码类型为在 XML 架构中指定的类型。这使得数据的解析更加有效,并且还不必进行运行时转换。存储的二进制形式被限制为每 XML 实例 2 GB,这可以适应大部分的 XML 数据。此外,XML 层次的深度还被限制为 128 层。XML 数据的信息集内容被保留。但是,它不可能是与文本 XML 一模一样的副本,因为下列信息没有保留:无关紧要的空白、属性的顺序、命名空间前缀和 XML 声明。数据建模考虑事项通常,关系数据类型和 XML 数据类型的列的组合比较适合数据建模。可以将 XML 数据中的一些值存储在关系列中,而将其余的值或全部的 XML 值存储在 XML 列中。这可以产生更好的性能和锁定特性。对于 singleton 值(即单值属性),XML 数据中的值可以提升为同一个表中的计算列。多值属性需要单独的属性表,该表必须使用触发器进行填充和维护。查询需要直接针对属性表进行编写。对于锁定和更新特性,存储在 XML 列中的 XML 数据的粒度是至关重要的。SQL Server 将相同的锁定机制用于 XML 和非 XML 数据。如果粒度比较大,则在多用户的情况下,为了更新而锁定大的 XML 实例会引起吞吐量的下降。而另一方面,严格的分解会失去对象的封装性并增加重新组合的成本。查询和修改 XML 数据查询存储在 XML 列中的 XML 实例需要解析列中的二进制 XML 数据。与解析文本形式的 XML 数据相比,解析二进制的 XML 要快得多。XML 索引避免了重新解析,这将在“建立 XML 数据的索引”一节中进行讨论。XML 数据类型中的方法如果感兴趣,可以检索全部 XML 值,也可以检索部分 XML 实例。这可以使用四个 XML 数据类型的方法来实现:query()、value()、exist() 和 nodes(),它们接受 XQuery 表达式作为参数。第五个方法 modify() 允许修改 XML 数据并接受 XML 数据修改语句作为输入。query() 方法用于提取 XML 实例的部分。XQuery 表达式求值为一个 XML 节点列表。以这些节点中的每一个为根的子树按照文档顺序返回。结果类型为非类型化的 XML。value() 方法从 XML 实例提取标量值。它返回 XQuery 表达式所求值的节点的值。该值被转换为 value() 方法的第二个参数所指定的 T-SQL 类型。exist() 方法用于对 XML 实例进行存在性检查。如果 XQuery 表达式求值为非空节点列表,则返回 1;否则,返回 0。nodes() 方法产生特定 XML 数据类型的实例,每个实例都将其上下文设置为 XQuery 表达式所求值的不同节点。特定的 XML 数据类型支持 query()、value()、 nodes() 和 exist() 方法,并且可以用于 count(*) 聚合和 NULL 检查。所有其他的使用都会产生错误。modify() 方法允许修改 XML 实例的某些部分,例如添加或删除子树,或者更新标量值(如将书的价格从 9.99 替换为 39.99)。例:使用 query() 方法考虑下面的表 docs 的 XML 列 xCol 中的查询,它提取 元素下的任何位置的 id 为 123 的 元素。该查询也从整型主键列检索值。SELECT 列表中的 query() 方法会为生成 元素序列的表中的每一行进行求值, 元素及其子树是按照文档顺序进行检索的。对于每个 XML 实例,如果没有 id 为 123 的 元素或者其下没有 元素,则不会返回结果,也就是说,query() 方法的返回值为 NULL。SELECT pk, xCol.query('/doc[@id = 123]//section') FROM  docs

  数据库利用现有的关系基础结构和引擎组件(例如存储引擎和查询处理器)来进行
XML 处理。例如,XML 索引可以创建 B+ 树,而且可以在 Showplan
输出中查看查询计划。通过集成到关系框架中,数据管理功能(如备份/恢复和复制)可用于
XML 数据。同样地,新的数据管理功能(如数据库镜像和快照隔离)可以处理 XML
数据类型,以提供无缝的用户体验。

  例:将数据插入非类型化的 XML 列

  当架构不是已知先验的
并且因此而导致基于映射的解决方案不可能实现时,就可以使用非类型化的
XML。如果架构是已知的,但映射到关系数据模型非常复杂并且难于维护,或者存在多个架构而且这些架构是后来根据外部要求绑定到数据的,也可以使用非类型化的
XML。

自定义属性管理

  整个查询树会进行查询优化并产生物理查询计划,该计划是根据基于成本的评估得出的。Showplan
输出显示了大部分关系运算符和一些新的运算符(例如,用于 XML 处理的
UDX)。

  XML 数据变得越来越普遍.它可以表示客户数据,带有或不带有描述数据的
XML 架构均可。XML 数据和 XML 架构需要在一起进行管理。实际应用程序的 XML
架构通常比较复杂,因而将这样的 XML 架构映射到表和列是一项复杂的任务。当
XML
架构改变或新的架构加入系统时,长时间维护这样的映射是一件很麻烦的事情。通常,XML
数据存储在文件系统或数据库服务器的文本列中。文本列有数据管理方面的好处(例如,复制和备份/恢复),但是不提供任何基于数据的
XML 结构的查询支持。在具有原生 XML 支持的情况下,使用 XML
进行应用程序开发变得更快。

CREATE TABLE docs (pk INT PRIMARY KEY, xCol XML not null)

  可以使用 T-SQL SELECT 语句来检索 XML 实例。在 XML
数据类型中提供了五种内置的方法来查询和修改 XML 实例。

  像电子邮件之类的文档本质上是半结构化的。带有 XML
标记的文档正变得越来越容易创建,例如,使用 Office 2003。可以将这些 XML
文档存储在 XML 列中,并建立索引,进行查询和更新。因此,通过利用原生 XML
支持,开发人员可以做更多的事情。

  SQL Server 2005 将 XML 数据存储为 Unicode
(UTF-16)。从服务器检索的XML 数据,其结果也是 UTF-16
编码的。如果想要采用一种不同的编码方式,就需要在检索数据之后进行必要的转换,转换的方法有两种,一种是通过强制类型转换,另一种是在中间层执行转换。例如,可以在服务器上将
XML 数据强制转换成 varchar 类型,在这种情况下,数据库引擎会通过 varchar
类型的排序所确定的编码方式来序列化 XML。

  本文探讨 SQL Server 2005 中内置的 XML 支持。描述了这种支持如何与
.NET 框架 V2.0 和本机代码(例如 OLEDB 和
SQLXML)均支持的客户端编程相集成。

  对于类型化的 XML,需要检查提供的值是否符合已注册到类型化 XML 列的
XML 架构集合的 XML 架构。如果该 XML
实例没有通过这种有效性验证,则拒绝它。此外,仅当 CONTENT 允许提供 XML
文档和内容时,类型化的 XML 中的 DOCUMENT 标记才将所接受的值限制为 XML
文档。

  XML
在企业应用程序中的使用正日益广泛,它主要用于对半结构化和非结构化数据进行建模。文档管理就是这样的一种应用程序。像电子邮件这样的文档是半结构化性质的。如果文档以
XML
的形式存储在数据库服务器中,就可以开发功能强大的应用程序来根据文档内容检索文档、查询部分内容(例如查找标题包含单词“背景”的部分),以及查询文档聚合。如果存在能够生成和使用
XML 的应用程序,则这样的方案就变得可行了。例如,Microsoft Office 2003
系统允许用户以 XML 标记的形式生成 Word、Excel、Visio 和 Infopath 文档。

  XML 列、变量和参数可以绑定到一个 XML 架构集合(请参阅本文后面的“XML
架构处理”一节以获得更多的详细信息和示例)。假定 myCollection
代表这样一个集合。下面的语句创建一个表 XmlCatalog,带有使用 myCollection
进行类型化的 XML 列文档。类型化的 XML 列还被指定为接受 XML
片段,而不只是 XML 文档。

  在SQL Server 2000 中,有两种访问 SQLXML 功能的主要方法:

  CREATE TABLE docs (pk INT PRIMARY KEY, xCol XML not nullCONSTRAINT
CK_name CHECK (xCol.exist(‘/book/author[first-name = last-name]’) =
0))

非类型化的 XML

XML 数据类型

SELECT pk, xCol.query('  for $s in /doc[@id = 123]//section  where $s/@num >= 3  return {data($s/heading)}') FROM docs

  SQL Server 2005 提供了 XML
架构集合,可以将其作为一种方法来以元数据的形式管理 W3C XML 架构。XML
数据类型可以与 XML 架构集合相关联,以便对 XML 实例强加架构限制。当 XML
数据与 XML 架构集合相关联时,它称为类型化的 XML;否则,就称为非类型化的
XML。在一个框架中可以同时容纳类型化的 XML 和非类型化的 XML,保留 XML
数据模型,并且强制采用 XML
语义进行查询处理。底层关系基础结构被广泛用于这一目的。它支持关系数据和
XML 数据之间的互操作,这为更广泛地采用 XML 功能开辟了道路。

XQuery 语言

  SQLXML 还支持您创建 XML 模板,这使得您可以创建带有动态部分的 XML
文档。在 XML 文档中,您可以嵌入 FOR XML 查询和/或映射查询之上的 XPath
1.0 表达式。在执行 XML
模板时,可以用查询的结果来替换查询块。通过这种方式,您可以创建带有某些静态内容和某些数据驱动的动态内容的
XML 文档。

  作为隐式转换到 XML 数据类型的字符或二进制 SQL 类型。

INSERT INTO docsSELECT 10, xColFROM  (SELECT * FROM OPENROWSET   (BULK 'C: empxmlfile.xml',   SINGLE_BLOB) AS xCol) AS R(xCol)

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注