8.3 DB 产品中的 XML
Last updated
Last updated
###8.3 DB产品中的XML
SQL Server为XML数据的存储和处理提供了广泛支持
引入XML数据类型
支持无类型和有类型的XML数据
可以为XML列创建索引
DB2中的pureXML
存储方面:混合型模型将XML数据存储在经过解析的DOM树模型中。pureXML以节点和子树(而非文档级)的粒度存储XML
在数据库中,物理存储层的主要存储单元是节点。每个节点中保存了到父节点和子节点的连接。因此,在进行层次遍历或者结构连接操作时,效率都非常高。可以在不更新整个文档的前提下,增加、减少、或修改节点,并将节点重新存储到其它的页中。pureXML所提供的XML数据的底层存储支持,使得DB2能够更有效地处理XML层次数据
DB2中的pureXML
索引方面:XML数据被格式化为缓冲数据页,以便快速导航和执行查询以及简化索引编制。DB2支持在XML列上建立路径特定的索引,因此元素和属性常用作谓词且可以编制跨文档连接的索引,从而高效地管理海量XML文档、提供高查询性能。DB2还通过Net Search Extender为XML数据提供全文检索,可以对完整的或者部分文档建立全文索引
查询方面:DB2为XML数据的检索提供了全面的支持,包括使用常规SQL, SQL/XML, XQuery以及嵌入SQL的XQuery,以实现层次数据的查询、更新,实现关系数据和层次数据的集成
pureXML的混合数据管理模式
采用XML数据类型的数据列进行存储 qq以XML文档的节点和子树为单位进行存储,不同于字符串类型的是,数据以XML内容的内部表示形式进行存储,XML内容包括包容层次结构、文档顺序、元素和属性值等。所有XML数据都存储在使用UTF-8代码集的数据库中
使用大对象进行存储
使用关系数据库表进行存储
带注释的XML模式分解
DB2中数据查询的几种方法
常规SQL查询只能在XML列级别进行查询,只能返回整个XML文档
仅XQuery只能访问XML数据,而无法查询非XML关系数据
嵌入SQL的XQuery可以查询XML数据和关系数据;可以在查询中利用对关系列定义的SQL谓词和索引;可以针对用户自定义函数返回的结果进行查询(因为不能直接通过XQuery调用这些UDF);可以针对使用SQL/XML发布函数通过关系数据构造的XML值进行查询
DB2中的SQL/XML
XMLQUERY函数用于在SQL查询中嵌入XQuery查询
XMLEXISTS函数用于测试一个XQuery表达式是否可以返回包含一个或多个元素的序列,如果其中的XQuery表达式所返回的序列为空,那么XMLEXISTS函数将返回false,否则返回true
XMLTABLE函数可以根据XQuery表达式返回行集
XMLQUERY函数
1
ZhangTao
2
XiaoWang
1
ZhangTao
2
XiaoWang
```
SELECT id FROM classes
WHERE
xmlexists
('$i//name[contains(.,"Wang")]' passing
classes.details
as "i");
```
```
SELECT id, name, gpa
FROM classes, XMLTABLE(
'for $stu in $d//student return $stu' passing classes.details as "d"
COLUMNS name VARCHAR(20) path 'name/text()',
gpa VARCHAR(20) path 'gpa/text()') as student
```
id
name
-
-
1
ZhangTao
1
ZhaoFan
2
XiaoWang
2
XiaoMa
用于发布 XML数据的各种 SQL /XML函数 |函数名称|描述| |-|-| |XMLAGG|返回一个XML序列,包含表示XML值集中的每个非空值的项| |XMLELEMENT|返回作为XML元素节点的XML值| |XMLATTRIBUTES|通过自变量构造XML属性,此函数只能用作XMLELEMENT函数的自变量| |XMLDOCUMENT|返回具有单个XQuery文档节点的XML值,该文档节点有一个或多个子节点。此函数创建一个文档节点,根据定义,每个XML文档都必须有一个文档节点。文档节点在序列化的XML表示中不可视,但是,要存储在DB2表中的每个文档必须包含文档节点| |XMLTEXT|返回具有单个文本节点的XML值,该文本节点将输入自变量作为内容。| |XMLPI|返回具有单个处理指示信息节点的XML值。| |XMLCOMMENT|返回具有单个注释节点的XML值,该注释节点将输入自变量作为内容。| |XMLNAMESPACES|通过自变量构造名称空间声明。此声明只能用作XMLELEMENT、XMLFOREST和XMLTABLE函数的自变量。| |XMLCONCAT|返回一个序列,它包含很多XML输入自变量的并置结果。| |XMLFOREST|返回作为XML元素节点的序列的XML值。|