XQuery中的Marklogic整理序列

XQuery中的Marklogic整理序列,xquery,marklogic,Xquery,Marklogic,是否有方法修改序列中的元素,以便只返回项目的整理版本 let $currencies := ('dollar', 'Dollar', 'dollar ') return fn:collated-only($currencies, "http://marklogic.com/collation/en/S1/T00BB/AS") => ('dollar', 'dollar', 'dollar') 这是预期产出吗?这里没有fn:collated-only函数,所以我假设您正在询问如何编写这样

是否有方法修改序列中的元素,以便只返回项目的整理版本

let $currencies := ('dollar', 'Dollar', 'dollar ')
return fn:collated-only($currencies, "http://marklogic.com/collation/en/S1/T00BB/AS")

=> ('dollar', 'dollar', 'dollar')

这是预期产出吗?这里没有fn:collated-only函数,所以我假设您正在询问如何编写这样一个函数,或者是否存在这样一个函数

问题是,在排序比较中没有从一个字符串到另一个字符串的映射,只有一个比较算法(),因此实际上没有标准类型的字符串返回给您,因此没有API返回给您


退一步说,你真正想解决的问题是什么?根据排序规则,“dollar”和“dollar”是等价的,通过使用它,您可以声明您不在乎使用哪种形式,因此可以使用任何一种形式。

这是预期的输出吗?这里没有fn:collated-only函数,所以我假设您正在询问如何编写这样一个函数,或者是否存在这样一个函数

问题是,在排序比较中没有从一个字符串到另一个字符串的映射,只有一个比较算法(),因此实际上没有标准类型的字符串返回给您,因此没有API返回给您


退一步说,你真正想解决的问题是什么?根据排序规则,“美元”和“美元”是等价的,使用它可以声明您不在乎使用哪种形式,因此可以使用任何一种形式。

存储在范围索引中的值(为面提供数据)实际上是遇到的第一个与其他值相等的值。(因为,校勘表明你不在乎……)

你打电话可以走很远的路
fn:replace(fn:lower-case(xdmp:diacritic-less(fn:normalize-unicode($str,“NFKC”)),“\p{p},”)


这与覆盖某些内容和覆盖其他内容并不完全相同,但可能对您的目的有好处。

存储在范围索引中的值(为面提供数据)实际上是遇到的第一个与其他内容相等的值。(因为,校勘表明你不在乎……)

你打电话可以走很远的路
fn:replace(fn:lower-case(xdmp:diacritic-less(fn:normalize-unicode($str,“NFKC”)),“\p{p},”)


这与覆盖某些内容和覆盖其他内容不同,但这可能有利于您的目的。

如果这些值在XML元素中,并且您使用
http://marklogic.com/collation/en/S1/T00BB/AS
,您可以执行以下操作:

let $ref := cts:element-reference(xs:QName("currency"), "collation=http://marklogic.com/collation/en/S1/T00BB/AS")
for $curr in cts:values($ref, (), "frequency-order")
return $curr || ": " || cts:frequency($curr)
这将产生如下结果:

"dollar: 15",
"euro: 12"

。。。等等排序规则将忽略示例输入之间的差异。这些结果可以按照您的需要进行格式化。这就是你想要做的吗

如果这些值在XML元素中,并且使用
http://marklogic.com/collation/en/S1/T00BB/AS
,您可以执行以下操作:

let $ref := cts:element-reference(xs:QName("currency"), "collation=http://marklogic.com/collation/en/S1/T00BB/AS")
for $curr in cts:values($ref, (), "frequency-order")
return $curr || ": " || cts:frequency($curr)
这将产生如下结果:

"dollar: 15",
"euro: 12"

。。。等等排序规则将忽略示例输入之间的差异。这些结果可以按照您的需要进行格式化。这就是你想要做的吗

嗨,谢谢你的回复。我试图做的是在xquery中生成一些输出,然后使用search:search facets进行复制。我使用fn:distinct值,然后对匹配节点进行计数。答案不匹配,所以我意识到我在比较错误的东西。我想如果fn:distinct存在的话,一定有一些等价物可以减少序列中的变化。嗨,谢谢你的回复。我试图做的是在xquery中生成一些输出,然后使用search:search facets进行复制。我使用fn:distinct值,然后对匹配节点进行计数。答案不匹配,所以我意识到我在比较错误的东西。我想,如果fn:distinct存在,则必须有一些等价物来减少序列中的变化。谢谢,这将得到我想要的结果,但如果使用相同的排序规则命名空间字符串来确保选择相同的值,我会很高兴。使用XQuery查找货币计数非常棘手。谢谢,这将得到我想要的结果,但如果使用相同的排序规则名称空间字符串来确保选择相同的值,我会很高兴。使用XQuery查找货币计数是相当棘手的。这非常有效,并且基于相同的排序规则,因此风险较小。结合其他答案,我今天学到了一些技巧。谢谢!这是完美的,并且基于相同的排序规则,因此风险较小。结合其他答案,我今天学到了一些技巧。谢谢!