XQuery表达式之比较表达式(Comparison Expression)

XQuery中比较表达式主要分为三类:
1。值比较
2。大体比较
3。节点比较

1。值比较:
值比较是通过eq,ne,lt,le,gt和ge比较符(操作符)来比较两个单个的值(原子类型值和节点),这里说的单个值是指左右两个操作数原子化后是单个的值.

计算时首先原子化操作符左边的表达式,如果结果是空序列,那么比较的结果是空序列,或者继续原子化右边的表达式看右边表达式原子化是
是否抛错(和具体实现相关)
如果左边的序列的操作数原子化后是长度大于1的序列,则抛错。
如果操作数原子化后的类型是xdt:untypedAtomic, 那么将他们转为xs:string
如果左右两个操作数原子化后都是单个的值,则直接比较他们的大小。

例  $book1/author eq "Kennedy" 如果路径表达式 $book1/author的计算结果是一个值并且值是xs:string或xdt:untypedAtomic
的“Kennedy”,则返回true,如果是空序列,那么也返回空序列,否则false
<a>5</a> eq <a>5</a>   返回true
<a>5</a> eq <b>5</b>   返回true,因为原子化后值都是5

2.大体比较
大体比较符=, !=, <, <=, >, 和>=用于“存在满足”的方式比较序列,大体比较不抛错,它的返回值不是true就是false。
什么是“存在满足”呢?只要左右两个序列中的项配成的对(Pair)满足比较符号的定义的关系,那么比较就返回true,否则false
举个例子就清楚了
($book/genre = “fiction”) 如果存在一个genre的元素它的值为fiction,那么比较就返回true。“fiction”是长度为1的序列。
(1,3) =(2,3)  返回true
(1,3) !=(2,3) 也返回true

3.节点比较
节点比较特指通过节点标识(Node Identity)(is 操作符)或文档顺序(document order)(<<,>>操作符)来比较两个单个节点。
两个操作数必须是单个节点或空序列,否则抛错。
如果一个操作数是空序列,那么比较返回空序列。
如果用is比较符,并且两个操作数是两个节点,并且他们的标识是一样的,那么返回true,否则false
如果用<<比较符,那么如果左边的节点在文档中出现在右边的节点之前,比较返回true,否则false
如果用>>比较符,那么如果左边的节点在文档中出现在右边的节点之后,比较返回true,否则false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值