Skip to content

Commit 6afce45

Browse files
authored
Merge pull request #124 from w3c/AlternativeToPR122
Improves the section about the Sum set function
2 parents ef0ad55 + ae8c77c commit 6afce45

File tree

1 file changed

+76
-35
lines changed

1 file changed

+76
-35
lines changed

spec/index.html

Lines changed: 76 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -9703,16 +9703,25 @@ <h5>Sum</h5>
97039703
be 6.0 (float).</p>
97049704
<div class="defn">
97059705
<p><b>Definition: <span id="defn_aggSum">Sum</span></b></p>
9706-
<pre class="code nohighlight">numeric Sum(sequence S)</pre>
9707-
<p>L = Flatten(S)</p>
9708-
<p>Sum(S) = Sum(L)</p>
9709-
<p>Sum(L) = op:numeric-add(L<sub>1</sub>, Sum(L<sub>2..n</sub>)) if <a href="#defn_Card">Card</a>(L) &gt;
9710-
1<br>
9711-
Sum(L) = op:numeric-add(L<sub>1</sub>, 0) if <a href="#defn_Card">Card</a>(L) = 1<br>
9712-
Sum(L) = "0"^^xsd:integer if <a href="#defn_Card">Card</a>(L) = 0</p>
9713-
<p>In this way, Sum( (1, 2, 3) ) = op:numeric-add(1, op:numeric-add(2,
9714-
op:numeric-add(3, 0))).</p>
9706+
<pre class="code nohighlight">numeric <var>Sum</var>(sequence <var>S</var>)</pre>
9707+
<p><var>Sum</var>(<var>S</var>) = <var>SumList</var>(<var>L</var>),</p>
9708+
<p>where <var>L</var> = Flatten(<var>S</var>) and
9709+
<var>SumList</var>(<var>L</var>) is defined recursively as follows.</p>
9710+
<ul>
9711+
<li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 0, then
9712+
<var>SumList</var>(<var>L</var>) = "0"^^<code>xsd:integer</code>.</li>
9713+
<li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 1, then
9714+
<var>SumList</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>
9715+
<li>If <a href="#defn_Card">Card</a>(<var>L</var>) > 1, then
9716+
<var>SumList</var>(<var>L</var>) = <a data-cite="XPATH-FUNCTIONS-31#func-numeric-add">op:numeric-add</a>(<var>L</var><sub>1</sub>,
9717+
<var>SumList</var>(<var>L</var><sub>2..n</sub>)).</li>
9718+
</ul>
9719+
<p>Note that <var>L</var><sub>1</sub> is the first element in
9720+
<var>L</var>, and <var>L</var><sub>2..n</sub> is <var>L</var>
9721+
without its first element.</p>
97159722
</div>
9723+
<p>In this way, <var>Sum</var>( [(1), (2), (3)] ) = <var>SumList</var>( (1, 2, 3) ) =
9724+
op:numeric-add(1, op:numeric-add(2, op:numeric-add(3, 0))).</p>
97169725
</section>
97179726
<section id="aggAvg">
97189727
<h5>Avg</h5>
@@ -9734,12 +9743,19 @@ <h5>Min</h5>
97349743
arbitrarily typed expressions.</p>
97359744
<div class="defn">
97369745
<p><b>Definition: <span id="defn_aggMin">Min</span></b></p>
9737-
<pre class="code nohighlight">term Min(sequence S)</pre>
9738-
<p>L = Flatten(S)</p>
9739-
<p>Min(S) = Min(L)</p>
9740-
<p>The flattened list L of values is ordered as per the <code>ORDER BY ASC</code> clause.</p>
9741-
<p>Min(L) = L<sub>1</sub> if <a href="#defn_Card">Card</a>(L) > 0<br>
9742-
Min(L) = error if <a href="#defn_Card">Card</a>(L) = 0</p>
9746+
<pre class="code nohighlight">term <var>Min</var>(sequence <var>S</var>)</pre>
9747+
<p><var>Min</var>(<var>S</var>) = <var>MinList</var>(<var>L</var>),</p>
9748+
<p>where <var>L</var> is the list of values obtained by Flatten(<var>S</var>)
9749+
and then ordered as per the <code>ORDER BY ASC</code> clause,
9750+
and <var>MinList</var>(<var>L</var>) is defined as follows.</p>
9751+
<ul>
9752+
<li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 0, then
9753+
<var>MinList</var>(<var>L</var>) = error.</li>
9754+
<li>If <a href="#defn_Card">Card</a>(<var>L</var>) > 0, then
9755+
<var>MinList</var>(<var>L</var>) = <var>L</var><sub>1</sub>,
9756+
where <var>L</var><sub>1</sub> is the first element in
9757+
<var>L</var>.</li>
9758+
</ul>
97439759
</div>
97449760
</section>
97459761
<section id="aggMax">
@@ -9750,12 +9766,19 @@ <h5>Max</h5>
97509766
arbitrarily typed expressions.</p>
97519767
<div class="defn">
97529768
<p><b>Definition: <span id="defn_aggMax">Max</span></b></p>
9753-
<pre class="code nohighlight">term Max(sequence S)</pre>
9754-
<p>L = Flatten(S)</p>
9755-
<p>Max(S) = Max(L)</p>
9756-
<p>The flattened list L of values is ordered as per the <code>ORDER BY DESC</code> clause.</p>
9757-
<p>Max(L) = L<sub>1</sub> if <a href="#defn_Card">Card</a>(L) > 0<br>
9758-
Max(L) = error if <a href="#defn_Card">Card</a>(L) = 0</p>
9769+
<pre class="code nohighlight">term <var>Max</var>(sequence <var>S</var>)</pre>
9770+
<p><var>Max</var>(<var>S</var>) = <var>MaxList</var>(<var>L</var>),</p>
9771+
<p>where <var>L</var> is the list of values obtained by Flatten(<var>S</var>)
9772+
and then ordered as per the <code>ORDER BY DESC</code> clause,
9773+
and <var>MaxList</var>(<var>L</var>) is defined as follows.</p>
9774+
<ul>
9775+
<li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 0, then
9776+
<var>MaxList</var>(<var>L</var>) = error.</li>
9777+
<li>If <a href="#defn_Card">Card</a>(<var>L</var>) > 0, then
9778+
<var>MaxList</var>(<var>L</var>) = <var>L</var><sub>1</sub>,
9779+
where <var>L</var><sub>1</sub> is the first element in
9780+
<var>L</var>.</li>
9781+
</ul>
97599782
</div>
97609783
</section>
97619784
<section id="aggGroupConcat">
@@ -9766,20 +9789,38 @@ <h5>GroupConcat</h5>
97669789
SEPARATOR.</p>
97679790
<div class="defn">
97689791
<p><b>Definition: <span id="defn_aggGroupConcat">GroupConcat</span></b></p>
9769-
<pre class="code nohighlight">literal GroupConcat(sequence S, function scalarvals)</pre>
9770-
<p>If the scalarvals argument is absent from GROUP_CONCAT, then scalarvals is taken to
9771-
be the empty function.</p>
9772-
<p>|separator| = scalarvals("separator") if scalarvals is defined for the argument "separator"</p>
9773-
<p>|separator| = the "space" character, unicode codepoint U+0020, if scalarvals is undefined for the argument "separator"</p>
9774-
<p>L = Flatten(S)</p>
9775-
<p>GroupConcat(S, scalarvals) = GroupConcat(L, |separator|)</p>
9776-
<p>GroupConcat(L, sep) = "" if <a href="#defn_Card">Card</a>(L) = 0</p>
9777-
<p>GroupConcat(L, sep) = CONCAT("", L<sub>1</sub>) if
9778-
<a href="#defn_Card">Card</a>(L) = 1</p>
9779-
<p>GroupConcat(L, sep) = CONCAT(L<sub>1</sub>, sep, GroupConcat(L<sub>2..n</sub>,
9780-
sep)) if <a href="#defn_Card">Card</a>(L) &gt; 1</p>
9781-
</div>
9782-
<p>For example, GroupConcat([("a"), ("b"), ("c")], {"separator" → "."}) = "a.b.c".</p>
9792+
<pre class="code nohighlight">literal <var>GroupConcat</var>(sequence <var>S</var>, function <var>scalarvals</var>)</pre>
9793+
<p>If the <var>scalarvals</var> argument is absent from <code>GROUP_CONCAT</code>,
9794+
then <var>scalarvals</var> is taken to be the empty function.</p>
9795+
<p>Let <var>sep</var> be a string that is defined as follows.</p>
9796+
<ul>
9797+
<li>If <var>scalarvals</var> is defined for the argument "separator",
9798+
then <var>sep</var> = <var>scalarvals</var>("separator").</li>
9799+
<li>If <var>scalarvals</var> is undefined for the argument "separator",
9800+
then <var>sep</var> is the "space" character (i.e., unicode codepoint U+0020).</li>
9801+
</ul>
9802+
<p><var>GroupConcat</var>(<var>S</var>, <var>scalarvals</var>) =
9803+
<var>GCList</var>(<var>L</var>, <var>sep</var>),</p>
9804+
<p>where <var>L</var> = Flatten(<var>S</var>) and
9805+
<var>GCList</var>(<var>L</var>, <var>sep</var>)
9806+
is defined recursively as follows.</p>
9807+
<ul>
9808+
<li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 0, then
9809+
<var>GCList</var>(<var>L</var>, <var>sep</var>) = "".</li>
9810+
<li>If <a href="#defn_Card">Card</a>(<var>L</var>) = 1, then
9811+
<var>GCList</var>(<var>L</var>, <var>sep</var>) =
9812+
<a href="#func-concat"><code>CONCAT</code></a>("", <var>L</var><sub>1</sub>).</li>
9813+
<li>If <a href="#defn_Card">Card</a>(<var>L</var>) > 1, then
9814+
<var>GCList</var>(<var>L</var>, <var>sep</var>) =
9815+
<a href="#func-concat"><code>CONCAT</code></a>(<var>L</var><sub>1</sub>, <var>sep</var>, <var>GCList</var>(<var>L</var><sub>2..n</sub>, <var>sep</var>)).</li>
9816+
</ul>
9817+
<p>Note that <var>L</var><sub>1</sub> is the first element in
9818+
<var>L</var>, and <var>L</var><sub>2..n</sub> is <var>L</var>
9819+
without its first element.</p>
9820+
</div>
9821+
<p>For example, <var>GroupConcat</var>([("a"), ("b"), ("c")], {"separator" → "."})
9822+
= <var>GCList</var>( ("a", "b", "c"), "." )
9823+
= "a.b.c".</p>
97839824
</section>
97849825
<section id="aggSample">
97859826
<h5>Sample</h5>

0 commit comments

Comments
 (0)