xquery- 如何从一组值中获取最小/最大值,这些值是通过从列表中减去连续成员获得的



在 xquery 表达式中,我在 for-expression 中获得了一组值,其中一个值位于单独的变量中。

现在,我想从列表的第一个值中减去单个值,然后相互减去列表的连续成员 - 在结果差值集中,我想获得最小/最大值...

到目前为止的查询如下所示——

let $value1:= 1998
let $rows_citations:= 
         $doc//div[@id="patent_citations"]
                     /div[@id="patent_citations_v"]
                          /table[@class="rel_patent"]
                             /tbody/tr[1]
                                      /following-sibling::tr
for $pos in $rows_citations/position()
let $date2_c := customfn:dateconverter1($rows_citations[$pos]/td[3])

现在我想要的减法是在 date2_c 的第一个值和值 1 之间,之后是 date2_c 的连续成员之间......从结果列表中,我想要最小/最大值...我该怎么做?

我对创建一个存储所有差异的新列表变量感到困惑,尤其是当我们已经在 for 循环中并且正在迭代列表的每个值(通过变量 date2_c)

I.此 XQuery 3.0 查询(也是纯 XPath 3.0 表达式):

let $pVal := 1,
    $vList := (2,4,7,11,16),
    $vList2 := ($pVal, subsequence($vList, 1, count($vList)-1)),
    $vSubtactedList :=
            map-pairs(function($m as xs:integer, $n as xs:integer) as xs:integer
                        {
                         $m - $n
                        },
                        $vList,
                        $vList2
                      )
    return
      (min($vSubtactedList), max($vSubtactedList))

从减法列表中生成所需的最小值和最大值:

1 5

二、XQuery 1.0解决方案

let $pVal := 1,
    $vList := (2,4,7,11,16),
    $vList2 := ($pVal, subsequence($vList, 1, count($vList)-1)),
    $vSubtactedList :=
                for $i in 1 to count($vList)
                 return
                    $vList[$i] - $vList2[$i]
 return
    (min($vSubtactedList), max($vSubtactedList))

这再次产生相同的正确结果

1 5

最新更新