XQuery 学习笔记(三)回到定义(上)
上一次我们学习了XQuery中FLOWER表达式的基础知识,了解了下FLOWER的组成与变化情况,后续的篇章会继续对FLOWER展开讨论。本次主要学习XML相关的定义与扩展知识,包括XQuery的设计、XQuery与XML相关标准的关系以及XQuery的处理模型。搞清楚XQuery、XPath、XSL、XSLT等究竟扮演了何种角色。
本系列所有示例代码均在Altova XMLSpy 2010 Enterprise Edition中调试通过。
一、XQuery的设计
1999年W3C开始设计XQuery,XQuery起初使用"Quilt"的XML查询语言作为起点,而"Quilt"又受到更早的两种XML查询语言影响:XQL和XML-QL。
XQuery的设计目标:
- 对于高度结构化和半结构的文件都有效。
- 与协议无关,跨平台。
- 说明性语言而非过程化语言。
- 是强类型的,允许被"编译"。
- 允许跨文件查询。
- 尽可能多的共享W3C的推荐标准。
二、XQuery与其他标准的关系
1、XQuery与XPath
XPath是一种专门从XML中查询元素或属性的语言,它逐层遍历XML文件并过滤掉不需要的内容。XPath目前有两个版本:XPath 1.0 和 XPath 2.0,XPath 1.0提供了基本的但很使用的路径查询语法,而XPath 2.0提供了很多内置函数,包括了多种表达式,不仅仅是路径表达式。
XPath本质上是XQuery的一个子集,他们拥有相同的数据模型、相同的内置函数集和运算符,但是XQuery的功能更加强大,提供了其他新特性,如FLOWER表达式和XML构造器。
2、XQuery与XSLT
XSLT负责把XML转换为其他任何需要的格式 ,XQuery与XSLT在功能上有很多重合的地方,XSLT目前也有两种版本:XSLT 1.0 和 XSLT 2.0。XSLT 2.0是基于 XPath 2.0的,所以XSLT与 XQuery有相同的数据模型,支持相同的内置函数,并且有许多一样的表达式。
XQuery与XSLT的主要区别:
- XSLT针对整个文件的格式转换操作做了优化,将文件全部写入内存。而XQuery针对数据片段选择进行优化,只将片段写入内存,XQuery被设计成可伸缩的并可以利用数据库的特性(如索引)进行优化。
- XQuery的语法更易于阅读。
- XQuery适合于操作文件集合,而XSLT没有针对多文件操作做出优化。
3、XQuery与SQL
XQuery是XML的SQL,针对XML数据进行了优化,而SQL是标准的关系数据库的查询语句,主要针对结构化数据。但是现如今,这两者的界限正变得愈来愈模糊,主流关系数据库均提供了XQuery的实现,能够利用SQL语句来操作XML;而XML数据库的出现,也使得小型项目的实施变得更加容易。
4、XQuery与XML Schema
XML Schema是用来取代DTD来对XML文档进行验证的一种标准,对于维护文档的正确性、结构化非常的重要。XQuery可以利用XML Schema来优化查询,避免无谓的数据类型转换,同时XQuery也提供了部分的数据验证功能。
三、处理查询
1、可以被XQuery处理的对象
1)文本文件形式的XML
2)使用URI从网络路径获取的XML片段。
3)存储在XML数据库中的数据。
4)存储在数据库中的XML数据。
5)内存中的XML数据。
2、XQuery查询
XQuery查询由两部分组成:查询头部和查询主体。
查询头部包括以分号分隔的声明、命名空间、外部schema、变量、函数等其他内容。
查询主体包括以逗号分隔的一个或多个表达式。
3-1 XQueryDemo.xq
xquery version "1.0";(:声明XQuery的版本号:)
declare boundary-space preserve;(:保持边界空白,直译,我也不清楚具体指什么边界,望达人指教一下:)
declare namespace prod = "http://www.google.com";(:声明一个命名空间:)
declare variable $users := doc("../XML/Users.xml")/Users;
<count>{count($users/User)}</count>,
<prod:FirstUser>{$users/User[@id = "1"]}</prod:FirstUser>
查询结果:
<count>3</count><prod:FirstUser xmlns:prod="http://www.google.com"><User id="1"><Name>Tom</Name><Age>12</Age></User></prod:FirstUser>
3、上下文
不能无缘无故的去计算查询,必须要给出一个查询上下文,由外部程序或查询头部给出。
查询上下文包含的值有:
- 当前日期和时间,隐含的时区;
- 在查询外部活在查询头部中定义的变量;
- 外部函数库。
4、查询处理器
对XQuery进行解析、分析和计算的软件,类似于编译器。就像SQL有很多不同厂商的实现:SQL Server(T-SQL)、Oracle(PL-SQL)…,XQuery同样有很多实现,如SAXON、Zorba、Pathfinder、xbird等。
5、查询结果
XQuery的查询结果可以写入到文件、序列化,或者传递给一个程序做二次处理
小结:
本次学习主要回顾了XML相关技术的特点及其相互关系,为了在合适的场合使用合适的技术做铺垫。下次将学习XQuery的数据模型,深入理解树形结构这一经典的数据结构。