Xquery 无效强制:()作为xs:string+;执行搜索时:搜索($qtext)

Xquery 无效强制:()作为xs:string+;执行搜索时:搜索($qtext),xquery,marklogic,Xquery,Marklogic,我正在向MarkLogic服务器发送一个http get请求,类似-。使用xdmp:get-Request-field(“q”)捕获请求,该字段接受变量中的查询,比如$qtext,并将其传递给search:search($qtext) 这将返回一个404未找到错误,说明 1.0-ml无效强制XDMP-AS:(err:XPTY0004)$qtext作为xs:string+--无效强制:()作为xs:string+ 我做错了什么?我找到了解决办法。基本上,$qtext是空序列(),这在search:

我正在向MarkLogic服务器发送一个http get请求,类似-。使用
xdmp:get-Request-field(“q”)
捕获请求,该字段接受变量中的查询,比如$qtext,并将其传递给
search:search($qtext)

这将返回一个404未找到错误,说明
1.0-ml无效强制XDMP-AS:(err:XPTY0004)$qtext作为xs:string+--无效强制:()作为xs:string+


我做错了什么?

我找到了解决办法。基本上,$qtext是空序列(),这在search:search中是不允许的。我所做的是-
let$query:=如果(fn:empty($q-text))那么“else$q-text

您还可以将请求更改为类似于
localhost:7040/index.xqy?q=
这个链接有帮助


正如所建议的,这是更好的
xdmp:get请求字段(“q”),我找到了解决方案。基本上,$qtext是空序列(),这在search:search中是不允许的。我所做的是-
let$query:=如果(fn:empty($q-text))那么“else$q-text

您还可以将请求更改为类似于
localhost:7040/index.xqy?q=
这个链接有帮助


正如所建议的,这是更好的
xdmp:get请求字段(“q”和“”)

在XQuery中简洁地提供默认值的一个非常有用的习惯用法依赖于xs:string到xs:boolean的转换规则以及

$sequence[.]
使用“.”作为序列表达式中的谓词将序列中的每个项作为布尔值进行计算,如果为true,则包含该项,如果为false,则排除该项。xs:string到boolean的转换规则对于非零长度字符串为“true”,对于零长度或空序列为“false”。下面是xs:string序列的详细等效项

对于$sequence中的$item 返回 if(非(空($item))和字符串长度($item)>0) 然后是$item else()

因此,以下模式通常用于表示“如果$x不是空的或长度不为零,则使用$x,否则使用$y

( $x , $y )[.][1]
请注意“[1]”,它选择由上一个表达式生成的第一项。 为$x like提供默认值的示例

 ($x , "Default value")[.][1]
函数的结果或参数也是如此:

cts:search( doc() , ( get-the-search-string() , "default")[.][1] )
其中“get-the-search-string()”可能返回空序列、零长度字符串或一个或多个字符串的序列

在您的示例中,您需要一个空字符串作为默认值,因此可以使用一个微小的变量来允许“”而不是()


在XQuery中简洁地提供默认值的一个非常有用的习惯用法依赖于xs:string到xs:boolean的转换规则以及

$sequence[.]
使用“.”作为序列表达式中的谓词将序列中的每个项计算为布尔值,如果为true,则包含该项,如果为false,则排除该项。对于非零长度字符串,xs:string到boolean的转换规则为“true”,对于零长度或空序列,则为“false”。以下是序列的详细等效值:xs:string的ce

对于$sequence中的$item 返回 if(非(空($item))和字符串长度($item)>0) 然后是$item else()

因此,以下模式通常用于表示“如果$x不是空的或长度不为零,则使用$x,否则使用$y

( $x , $y )[.][1]
请注意“[1]”,它选择由上一个表达式生成的第一项。 为$x like提供默认值的示例

 ($x , "Default value")[.][1]
函数的结果或参数也是如此:

cts:search( doc() , ( get-the-search-string() , "default")[.][1] )
其中“get-the-search-string()”可能返回空序列、零长度字符串或一个或多个字符串的序列

在您的示例中,您需要一个空字符串作为默认值,因此可以使用一个微小的变量来允许“”而不是()


xdmp:get-request-field()还接受可选的第二个参数,这是字段的默认值。您可以执行
xdmp:get-request-field(“q”和“”)
。xdmp:get-request-field()还接受可选的第二个参数,这是字段的默认值。您可以执行
xdmp:get请求字段(“q”和“)
。绝对简洁。而且它看起来很准确。但是对可读性/可维护性有什么担心吗?绝对简洁。而且它看起来很准确。但是对可读性/可维护性有什么顾虑吗?