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的设计目标:

  1. 对于高度结构化和半结构的文件都有效。
  2. 与协议无关,跨平台。
  3. 说明性语言而非过程化语言。
  4. 是强类型的,允许被"编译"。
  5. 允许跨文件查询。
  6. 尽可能多的共享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的主要区别:

  1. XSLT针对整个文件的格式转换操作做了优化,将文件全部写入内存。而XQuery针对数据片段选择进行优化,只将片段写入内存,XQuery被设计成可伸缩的并可以利用数据库的特性(如索引)进行优化。
  2. XQuery的语法更易于阅读。
  3. 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、上下文

不能无缘无故的去计算查询,必须要给出一个查询上下文,由外部程序或查询头部给出。

查询上下文包含的值有:

  1. 当前日期和时间,隐含的时区;
  2. 在查询外部活在查询头部中定义的变量;
  3. 外部函数库。

4、查询处理器

对XQuery进行解析、分析和计算的软件,类似于编译器。就像SQL有很多不同厂商的实现:SQL Server(T-SQL)、Oracle(PL-SQL)…,XQuery同样有很多实现,如SAXON、Zorba、Pathfinder、xbird等。

5、查询结果

XQuery的查询结果可以写入到文件、序列化,或者传递给一个程序做二次处理

 

小结:

    本次学习主要回顾了XML相关技术的特点及其相互关系,为了在合适的场合使用合适的技术做铺垫。下次将学习XQuery的数据模型,深入理解树形结构这一经典的数据结构。

 

posted @ 2010-02-09 21:47  徐州瑞步科技  阅读(1985)  评论(0编辑  收藏  举报