gpt4 book ai didi

string - Xquery ( XDMP-ARGTYPE error ) 函数输入的预期类型与实际类型不同

转载 作者:行者123 更新时间:2023-12-01 15:29:54 26 4
gpt4 key购买 nike

我正在尝试使用此函数从 MarkLogic 8 中的文本中删除停用词:

declare function rec:remove-stop-words($string, $stop_words)  {  
(: This is a recursive function. :)
if(not(empty($stop_words))) then
rec:remove-stop-words(
replace($string, $stop_words[1], '', 'i'),
(: This passes along the stop words after
the one just evaluated. :)
$stop_words[position() > 1]
)
else normalize-space($string)
};

这里我称之为

for $r in /rec:Record
return
rec:remove-stop-words(data($r/rec:Abstract), $stop_words}

它给了我以下错误

XDMP-ARGTYPE: (err:XPTY0004) fn:replace((xs:untypedAtomic(" chapter utilized asymmetry of n..."), xs:untypedAtomic(" book interrelationship between ...")), "a", "", "i") -- arg1 is not of type xs:string?

该函数需要一个string类型,但实际类型是untypedAtomic。我不知道该怎么办!注意:((问题不在函数中,因为我尝试将它用于不同的文本并且效果很好))。

我尝试通过将 untypedAtomic 转换为 string 来编写代码:

return
<info>{rec:remove-stop-words(data(xs:string($r/rec:Abstract)), $stop_words)}</info>

但是我收到了这个错误:

XDMP-ARGTYPE: (err:XPTY0004) fn:replace((" chapter utilized asymmetry of n...", " book interrelationship between ..."), "a", "", "i") -- arg1 is not of type xs:string

最佳答案

问题是,当您迭代 /rec:Record 并传递 $r/rec:Abstract 作为输入时,至少有一个记录返回的值超过一份rec:Abstractrec:remove-stop-words 的函数签名允许将一系列值作为 $string 的输入,但调用 fn:replace< 的函数体 仅处理单个值的输入,因此它会引发参数异常(给定 xs:string+ 并期望 xs:string?)。

您可以在调用函数之前通过迭代 rec:Abstract 来处理序列:

for $r in /rec:Record
for $a in $r/rec:Abstract
return
rec:remove-stop-words($a, $stop_words)

如果您使用更严格的函数签名,它可以帮助避免此类问题,或者至少使它们更易于调试。例如,如果您将函数定义为仅允许第一个参数使用单个输入:

rec:remove-stop-words($string as xs:string, $stop_words as xs:string*)
...

$string 传递一个序列时,这将引发类似的异常,但位于调用堆栈的较高位置,这有助于使这些类型的错误更加明显。

关于string - Xquery ( XDMP-ARGTYPE error ) 函数输入的预期类型与实际类型不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38033257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com