Marklogic在XQuery中整理序列

时间:2015-10-01 13:13:00

标签: xquery marklogic

有没有办法修改序列中的元素,以便只返回项目的整理版本?

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

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

3 个答案:

答案 0 :(得分:3)

存储在范围索引(提供构面)中的值实际上是遇到的第一个与其他值相比较的值。 (因为,校对说你不在乎......)

你可以通过电话获得很长的路要走 @foreach($users as $user) {{$user->image->avatar}} @endforeach

这不会完全相同,因为它会覆盖一些东西并使其他东西不足,但它可能对你的目的有好处。

答案 1 :(得分:2)

这是预期的输出吗?没有fn:collat​​ed-only函数,所以我假设你问的是如何编写这样的函数或是否有这样的函数。

问题是,在排序规则比较中没有从一个字符串到另一个字符串的映射,只有一个比较算法(the Unicode Collation Algorithm)所以确实没有规范类型的字符串可以返回给你,并且因此没有API可以这样做。

退后一步,你实际上要解决的问题是什么?根据整理的规则,“美元”和“美元”是等价的,并且通过使用它,您声明您不关心您使用哪种形式,因此您可以使用任何一种形式。

答案 2 :(得分:1)

如果这些值在XML元素中并且您使用BasicDBObject的范围索引,则可以执行以下操作:

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)

......等等。整理将忽略您的样本输入之间的差异。这些结果可以根据需要进行格式化。那是你想要做的吗?