如何检查我的cts:和查询或cts:或查询是否包含任何元素查询

时间:2019-06-20 06:51:18

标签: xquery marklogic marklogic-9

我有一个函数,它将返回cts:and-query()cts:or-query()

如何验证查询是否为空(其中没有任何元素或集合查询)?

我想过滤如下查询

cts:and-query(cts:or-query((), ()), ())

1 个答案:

答案 0 :(得分:4)

根据您的定义验证查询是否为空的最可靠方法是递归遍历查询,直到遇到非空查询元素为止;否则,返回true。

首先将查询转换为XML,这样做会容易一些:

declare function local:is-empty-query(
  $q as schema-element(cts:query)*
)
{
  if (empty($q)) then true()
  else if (every $e in $q satisfies ($e/self::cts:and-query or $e/self::cts:or-query))
  then local:is-empty-query($q/*)
  else false()
};


local:is-empty-query(document { cts:and-query((cts:or-query((), ()))) }/*)
=> true()

local:is-empty(document { cts:and-query((cts:or-query((cts:word-query('test'), ())))) }/*)
=> false()