@@ -9702,13 +9702,21 @@ <h5>Sum</h5>
9702
9702
<div class="defn">
9703
9703
<p><b>Definition: <span id="defn_aggSum">Sum</span></b></p>
9704
9704
<pre class="code nohighlight">numeric <var>Sum</var>(sequence <var>S</var>)</pre>
9705
- <p>|Sum|(|S|) = <var>Sum'</var>(|L|),
9706
- where |L| = Flatten(|S|)
9707
- and <var>Sum'</var>(|L|) is defined recursively as follows.</p>
9708
- <p><var>Sum'</var>(|L|) = op:numeric-add(|L|<sub>1</sub>, <var>Sum'</var>(|L|<sub>2..n</sub>)) if <a href="#defn_Card">Card</a>(|L|) >
9709
- 1<br>
9710
- <var>Sum'</var>(|L|) = op:numeric-add(|L|<sub>1</sub>, 0) if <a href="#defn_Card">Card</a>(|L|) = 1<br>
9711
- <var>Sum'</var>(|L|) = "0"^^xsd:integer if <a href="#defn_Card">Card</a>(|L|) = 0</p>
9705
+ <p><var>Sum</var>(<var>S</var>) = <var>Sum'</var>(<var>L</var>),</p>
9706
+ <p>where <var>L</var> = Flatten(<var>S</var>) and
9707
+ <var>Sum'</var>(<var>L</var>) is defined recursively as follows.</p>
9708
+ <ul>
9709
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 0, then
9710
+ <var>Sum'</var>(<var>L</var>) = "0"^^<code>xsd:integer</code>.</li>
9711
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 1, then
9712
+ <var>Sum'</var>(<var>L</var>) = <a data-cite="XPATH-FUNCTIONS-31#func-numeric-add">op:numeric-add</a>(<var>L</var><sub>1</sub>, 0).</li>
9713
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) > 1, then
9714
+ <var>Sum'</var>(<var>L</var>) = <a data-cite="XPATH-FUNCTIONS-31#func-numeric-add">op:numeric-add</a>(<var>L</var><sub>1</sub>,
9715
+ <var>Sum'</var>(<var>L</var><sub>2..n</sub>)).</li>
9716
+ </ul>
9717
+ <p>Note that <var>L</var><sub>1</sub> is the first element in
9718
+ <var>L</var>, and <var>L</var><sub>2..n</sub> is <var>L</var>
9719
+ without its first element.</p>
9712
9720
</div>
9713
9721
<p>In this way, <var>Sum</var>( [(1), (2), (3)] ) = <var>Sum'</var>( (1, 2, 3) ) =
9714
9722
op:numeric-add(1, op:numeric-add(2, op:numeric-add(3, 0))).</p>
@@ -9733,12 +9741,19 @@ <h5>Min</h5>
9733
9741
arbitrarily typed expressions.</p>
9734
9742
<div class="defn">
9735
9743
<p><b>Definition: <span id="defn_aggMin">Min</span></b></p>
9736
- <pre class="code nohighlight">term Min(sequence S)</pre>
9737
- <p>L = Flatten(S)</p>
9738
- <p>Min(S) = Min(L)</p>
9739
- <p>The flattened list L of values is ordered as per the <code>ORDER BY ASC</code> clause.</p>
9740
- <p>Min(L) = L<sub>1</sub> if <a href="#defn_Card">Card</a>(L) > 0<br>
9741
- Min(L) = error if <a href="#defn_Card">Card</a>(L) = 0</p>
9744
+ <pre class="code nohighlight">term <var>Min</var>(sequence <var>S</var>)</pre>
9745
+ <p><var>Min</var>(<var>S</var>) = <var>Min'</var>(<var>L</var>),</p>
9746
+ <p>where <var>L</var> is the list of values obtained by Flatten(<var>S</var>)
9747
+ and then ordered as per the <code>ORDER BY ASC</code> clause,
9748
+ and <var>Min'</var>(<var>L</var>) is defined as follows.</p>
9749
+ <ul>
9750
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 0, then
9751
+ <var>Min'</var>(<var>L</var>) = error.</li>
9752
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) > 0, then
9753
+ <var>Min'</var>(<var>L</var>) = <var>L</var><sub>1</sub>,
9754
+ where <var>L</var><sub>1</sub> is the first element in
9755
+ <var>L</var>.</li>
9756
+ </ul>
9742
9757
</div>
9743
9758
</section>
9744
9759
<section id="aggMax">
@@ -9749,12 +9764,19 @@ <h5>Max</h5>
9749
9764
arbitrarily typed expressions.</p>
9750
9765
<div class="defn">
9751
9766
<p><b>Definition: <span id="defn_aggMax">Max</span></b></p>
9752
- <pre class="code nohighlight">term Max(sequence S)</pre>
9753
- <p>L = Flatten(S)</p>
9754
- <p>Max(S) = Max(L)</p>
9755
- <p>The flattened list L of values is ordered as per the <code>ORDER BY DESC</code> clause.</p>
9756
- <p>Max(L) = L<sub>1</sub> if <a href="#defn_Card">Card</a>(L) > 0<br>
9757
- Max(L) = error if <a href="#defn_Card">Card</a>(L) = 0</p>
9767
+ <pre class="code nohighlight">term <var>Max</var>(sequence <var>S</var>)</pre>
9768
+ <p><var>Max</var>(<var>S</var>) = <var>Max'</var>(<var>L</var>),</p>
9769
+ <p>where <var>L</var> is the list of values obtained by Flatten(<var>S</var>)
9770
+ and then ordered as per the <code>ORDER BY DESC</code> clause,
9771
+ and <var>Max'</var>(<var>L</var>) is defined as follows.</p>
9772
+ <ul>
9773
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 0, then
9774
+ <var>Max'</var>(<var>L</var>) = error.</li>
9775
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) > 0, then
9776
+ <var>Max'</var>(<var>L</var>) = <var>L</var><sub>1</sub>,
9777
+ where <var>L</var><sub>1</sub> is the first element in
9778
+ <var>L</var>.</li>
9779
+ </ul>
9758
9780
</div>
9759
9781
</section>
9760
9782
<section id="aggGroupConcat">
@@ -9765,20 +9787,38 @@ <h5>GroupConcat</h5>
9765
9787
SEPARATOR.</p>
9766
9788
<div class="defn">
9767
9789
<p><b>Definition: <span id="defn_aggGroupConcat">GroupConcat</span></b></p>
9768
- <pre class="code nohighlight">literal GroupConcat(sequence S, function scalarvals)</pre>
9769
- <p>If the scalarvals argument is absent from GROUP_CONCAT, then scalarvals is taken to
9770
- be the empty function.</p>
9771
- <p>|separator| = scalarvals("separator") if scalarvals is defined for the argument "separator"</p>
9772
- <p>|separator| = the "space" character, unicode codepoint U+0020, if scalarvals is undefined for the argument "separator"</p>
9773
- <p>L = Flatten(S)</p>
9774
- <p>GroupConcat(S, scalarvals) = GroupConcat(L, |separator|)</p>
9775
- <p>GroupConcat(L, sep) = "" if <a href="#defn_Card">Card</a>(L) = 0</p>
9776
- <p>GroupConcat(L, sep) = CONCAT("", L<sub>1</sub>) if
9777
- <a href="#defn_Card">Card</a>(L) = 1</p>
9778
- <p>GroupConcat(L, sep) = CONCAT(L<sub>1</sub>, sep, GroupConcat(L<sub>2..n</sub>,
9779
- sep)) if <a href="#defn_Card">Card</a>(L) > 1</p>
9780
- </div>
9781
- <p>For example, GroupConcat([("a"), ("b"), ("c")], {"separator" → "."}) = "a.b.c".</p>
9790
+ <pre class="code nohighlight">literal <var>GroupConcat</var>(sequence <var>S</var>, function <var>scalarvals</var>)</pre>
9791
+ <p>If the <var>scalarvals</var> argument is absent from GROUP_CONCAT,
9792
+ then <var>scalarvals</var> is taken to be the empty function.</p>
9793
+ <p>Let <var>sep</var> be a string that is defined as follows.</p>
9794
+ <ul>
9795
+ <li>If <var>scalarvals</var> is defined for the argument "separator",
9796
+ then <var>sep</var> = <var>scalarvals</var>("separator").</li>
9797
+ <li>If <var>scalarvals</var> is undefined for the argument "separator",
9798
+ then <var>sep</var> is the "space" character (i.e., unicode codepoint U+0020).</li>
9799
+ </ul>
9800
+ <p><var>GroupConcat</var>(<var>S</var>, <var>scalarvals</var>) =
9801
+ <var>GroupConcat'</var>(<var>L</var>, <var>sep</var>),</p>
9802
+ <p>where <var>L</var> = Flatten(<var>S</var>) and
9803
+ <var>GroupConcat'</var>(<var>L</var>, <var>sep</var>)
9804
+ is defined recursively as follows.</p>
9805
+ <ul>
9806
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 0, then
9807
+ <var>GroupConcat'</var>(<var>L</var>, <var>sep</var>) = "".</li>
9808
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 1, then
9809
+ <var>GroupConcat'</var>(<var>L</var>, <var>sep</var>) =
9810
+ CONCAT("", <var>L</var><sub>1</sub>).</li>
9811
+ <li>If <a href="#defn_Card">Card</a>(<var>L</var>) > 1, then
9812
+ <var>GroupConcat'</var>(<var>L</var>, <var>sep</var>) =
9813
+ CONCAT(<var>L</var><sub>1</sub>, <var>sep</var>, <var>GroupConcat'</var>(<var>L</var><sub>2..n</sub>, <var>sep</var>)).</li>
9814
+ </ul>
9815
+ <p>Note that <var>L</var><sub>1</sub> is the first element in
9816
+ <var>L</var>, and <var>L</var><sub>2..n</sub> is <var>L</var>
9817
+ without its first element.</p>
9818
+ </div>
9819
+ <p>For example, <var>GroupConcat</var>([("a"), ("b"), ("c")], {"separator" → "."})
9820
+ = <var>GroupConcat'</var>( ("a", "b", "c"), "." )
9821
+ = "a.b.c".</p>
9782
9822
</section>
9783
9823
<section id="aggSample">
9784
9824
<h5>Sample</h5>
0 commit comments