浅探SQL Server 2005对XML的支持

1.    引言

可扩展标记语言 (XML) 作为一种与平台无关的数据表示形式已被广泛采用。它对于在松散耦合且完全不同的系统,以及各种企业到企业 (B2B) 应用和工作流范畴内交换信息是很有用的。数据交换已成为 XML 技术的主要驱动力之一。

经过长时间的发展和改进,关系数据库在数据安全性、并发性控制、数据共享、数据传输、数据备份和恢复方面已经相当的成熟,关系数据库将为XML数据存储的数据管理、查询和修改处理等方面提供强有力支持;同时,我们可以利用关系数据库的索引功能为XML数据建立索引,从而优化XML数据的查询。

XML数据可以方便地与现有的关系数据和SQL应用程序互操作,这样我们可以在不破坏原有应用程序的前提下进行数据建模,为系统引入XML;数据库的服务器还为XML数据提供了备份、恢复和复制等管理功能。

2.    XML的方式获取信息

XML的支持的首要一点就是允许用户直接从数据库中取出,并以XML的方式显示出来。为此,需要为SELETE语句配置一个FOR XML子句,其语法如下:

[ FOR { XML { RAW | AUTO | EXPLICIT }

[ , XMLDATA ]

[ , ELEMENTS ]

[ , BINARY BASE64 ] } ]

 

 

 

 

 

 

 

 

 

 

 

 


FOR XML子句的XML有三种模式:RAWAUTO或者EXPLICIT,选择的模式决定了结果XML文件的形式和组成。

RAW 模式将查询结果的每一行以一个带有类属标识符 row  XML 元素显示出来,SELECT语句中的列作为元素属性。

AUTO模式是默认模式,此时返回的查询结果以简单的XML树显示。结果集中元素的嵌套或者层次由 SELECT 语句中指定列所标识的表顺序决定。最左边的表将成为最顶层元素,次左边的表(由 SELECT 语句中的列标识)将嵌套在顶层元素内,依次类推。

EXPLICIT 模式下,查询编程人员可以显式地定义结果 XML 树的形状。使用该模式要求以特殊方式书写查询,有关所需嵌套的附加信息也作为查询的一部分显式指定。

FOR XML还有另外三个可选项:XMLDATABINARY base64ELEMENTS

XMLDATA:指定该选项时,XML文档架构将包含在XML文档中显示出来。

ELEMENTS:如果指定了该选项,列将以子元素形式返回,否则,列将被映射为 XML 属性。该选项只支持在 AUTO 模式下使用。

BINARY base64:在查询中指定该选项可以返回 base64 编码格式的二进制数据。在 RAW EXPLICIT 模式下,不指定该选项检索二进制数据的结果是产生错误。

可以使用在URL处的执行SQL 语句、XML模板进行查询、HTML事件集成等方式完成上述查询。下面举几个简单的例子。


ROW模式:

AUTO模式:


指定ELEMENTS项:

3.    XML数据的存储

SQL Server 2005用户可以用普通的CREATE TABLE语句创建带有XML列的表,然后就可以通过多种方式存储XML数据。

非类型化的XML数据类型

XML数据的架构为未知;或架构为已知,但映射到关系数据模型非常复杂并且难于维护等情况,可以使用非类型化的XML数据类型。非类型化的XML允许存储XML内容片段。例:

CREATE TABLE student (number INT PRIMARY KEY, xCol XML not null)

 

 

 


类型化的XML数据类型

XML数据的架构为已知时可以使用类型化的XML数据类型。使用类型化的XML有利于对数据的有效性验证以及存储和查询的优化处理。对于类型化的XML,使用 DOCUMENT(不允许片段)或 CONTENT(允许片段)规范指定是否允许存储内容片段,同时必须提供XML的架构集合。例:

CREATE TABLE student(

number INT PRIMARY KEY,

doc XML(CONTENT con))

 

 

 

 

 

 

 

 

 


使用约束

可以在类型化和非类型化的 XML 数据类型的列中使用关系约束,除主键和外键约束外大部分SQL 约束同样可应用于 XML 列。

XML数据的存储

1.      直接把数据插入到XML列中,在插入过程中会进行格式良好性检查,同时对于类型化的XML,必须声明XML架构的命名空间。

2.      将来自文件的数据插入非类型化的 XML 列。

3.      存储有 TYPE 指令的 FOR XML 生成的 XML 数据。

4.    XML数据的查询和修改

Xquery语言

Xquery语言是一种巧妙地使用 XML 结构的查询语言,可以跨各种数据表示查询,而不管这些数据是物理存储在 XML 中,还是通过中间件被视为 XML

XQuery 语言之于 XML 正如 SQL 语言之于关系数据库。它是使得查询简洁易懂,而又相当灵活,可以查询大范围的 XML 信息源,其中包括数据库和文档。

XML数据类型的五种操作方法

XML数据类型提供了四个检索XML值或实例的方法:query()value()exist() nodes(),以及修改XML数据的modify() 方法。

query() 方法用于提取 XML 实例的部分。XQuery 表达式求值为一个 XML 节点列表。以这些节点中的每一个为根的子树按照文档顺序返回。结果类型为非类型化的XML

SELECT number, doc.query('/doc[@id = 503]//section')  
FROM   student

 

 

 

 

 

 


value() 方法从 XML 实例提取标量值。它返回 XQuery 表达式所求值的节点的值。该值被转换为 value() 方法的第二个参数所指定的 T-SQL 类型。例:

SELECT doc.value( 'data((/doc//section[@num = 3]/heading)[1])', 'nvarchar(max)')

FROM student

 

 

 

 

 

 


exist() 方法用于对 XML 实例进行存在性检查。如果 XQuery 表达式求值为非空节点列表,则返回 1;否则,返回 0

nodes() 方法产生特定 XML 数据类型的实例,每个实例都将其上下文设置为 XQuery 表达式所求值的不同节点。特定的 XML 数据类型支持 query()value() nodes() exist() 方法,并且可以用于 count(*) 聚合和 NULL 检查。所有其他的使用都会产生错误。

modify() 方法允许修改 XML 实例的某些部分,例如添加或删除子树,或者更新标量值。例:

UPDATE student SET doc.modify('

replace value of (/doc[@number="1458"]/last-name)[1] with "wang"')

 

 

 

 

 

 


5.    创建XML索引

XML 数据是以内部二进制形式存储的,其存储容量可达到2GB。对于XML数据的查询在运行时可能需要一次或多次地解析表中每一行的XML BLOB,这会使查询处理的速度变得很慢。如果在工作负荷中常常需要进行查询,可以为XML列建立索引,提高查询的处理速度。

SQL Server 2005中,XML索引包括主XML索引、次XML索引和内容索引。

XML索引

XML索引可以通过CREATE PRIMARY XML INDEX语句创建,它在 XML 节点的信息集项的一个子集中创建一个B+树。B+树的列表示标记,例如元素和属性名称、节点值和节点类型。其他的列捕获XML数据中的文档顺序和结构,以及从XML实例的根节点到每个节点的路径,从而有效地对路径表达式进行求值。基表的主键在主XML索引中复制,以使索引行与基表行相关。例:

CREATE PRIMARY XML INDEX index_doc on student (doc)

 

 

 


需要 XML 数据类型方法的查询使用主 XML 索引,从索引本身返回标量值或 XML 子树。如:从 XML 列检索的(SELECT * FROM student SELECT doc FROM student)。

XML索引

在主XML索引的基础上,可以创建次索引来加速不同类型的查询处理。SQL Server 2005提供了三种次XML索引分别为不同类型的查询服务:

PATH索引加速基于路径的查询,PATH索引在主XML索引的列(path, value)中构建 B+ 树。利用PATH索引提高查询速度的常见例子为:SELECT语句的WHERE子句中对XML列使用exist()方法。例:

CREATE XML INDEX index_doc_Path on student (doc)
   USING XML INDEX index_doc FOR PATH

 

 

 

 

 

 


PROPERTY索引有利自定义属性管理方案,索引在主 XML 索引的列 (PK, path, value) 中创建 B+ 树。PROPERTY索引对 XML 实例中的属性值查找有利。例:

CREATE XML INDEX index_doc_Property on student (doc)
   USING XML INDEX index_doc FOR PROPERTY

 

 

 

 

 

 

 

 

 


VALUE索引加速基于值的查询,VALUE索引对节点的值已知,但是其路径没有准确指定的查询有利。例:

CREATE XML INDEX index_doc_Value on docs (doc)
   USING XML INDEX index_doc FOR VALUE

 

 

 

 

 

 


内容索引

可以为XML列创建全文本索引,此时XML标记会因为全文本索引的建立而被忽略。查询时可以把全文本索引和XML索引组合起来使用,首先利用全文本索引作为筛选器来缩小查询范围,再利用XML索引进行查询。

6.    结论

本文从以XML方式获取信息、XML数据的存储、XML数据的查询和修改以及XML索引的创建等方面对SQL Server 2005XML的支持进行了简要的讨论。我们看到SQL Server 2005已经为XML数据提供了强有力的支持,在业已发展成熟的关系数据库这个温床上,XML技术将在未来发挥更大的影响。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值