XQuery的基本结构

[如需转载,请注明出处]


前两天去给客户做培训,需要讲解XQuery的知识。虽然一直在从事XQuery相关的工作,包括XQuery引擎的实现,XQuery在实际应用中的探索,XQuery和SQL的结合等等,但是从来没有条理性地梳理过XQuery的知识点。正好最近也比较空闲一点,可以开始重新review一下,并记录在blog上。

第一篇先介绍一下XQuery的基本结构。
XQuery语言由模块(Module)组成,模块类似于Java语言的类。模块又分为主模块(Main Module)和库模块(Library Module),主模块可以看作包含了main函数的Java类,而库模块则类似于不包括main函数的Java类。下图说明XQuery的基本结构。可以看到模块还可以包含版本声明,而版本申明并不是必须的。

Structure of XQuery
版本申明还可以包含编码信息,下面是两个版本申明的例子。其中xquery、version和encoding是关键字。
xquery version "1.0";
xquery version "1.0" encoding "utf-8";

库模块由模块申明和序言组成,而主模块则由序言和查询体组成。序言用于查询环境的设定,包括名称空间的申明,
函数的申明等等。图中将库模块和主模块画在一起,其实在应用中他们是相互独立的。主模块通过模块引用的方式在调用库模块。

下面是一个库模块的例子,其中第一行是模块的申明,而接着的两个函数则属于序言。
module namespace math = “http://www.sample.com/math”;
declare function math:factorial($n as xs:integer) as xs:integer {
if($n = 0)
then 1
else ($n * factorial($n-1))
};
declare function math:square($n as xs:integer) as xs:integer {
$n * $n
};

下面再举一个主模块的例子。其中名称空间和函数定义属于序言,而函数调用则属于查询体。查询体由表达式(Expression)构成。
关于表达式会在后面的blog中详细讲解。
declare namespace ns = “http:/www.sample.com”;
declare function factorial($n as xs:integer) as xs:integer {
if($n = 0)
then 1
else ($n * factorial($n-1))
};
factorial(10)

主模块和库模块又是如何关联呢?其实非常简单,只要在主模块的序言中使用import module 的形式引入即可。类似于Java中的import关键字。
下面是一个例子。
import module "http://www.sample.com/math"
这个例子将上面定义的库模块引入了。

从上面的这些讲述可以看出,XQuery之于XML的意义相当于SQL之于RDBMS,但实际上XQuery远比SQL来得灵活,从
形式上来说它更像PL/SQL.。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值