Skip to content

Commit 21afc91

Browse files
committed
more improvements in the definition of the 'Sum' set function, and an adaptation of the same type of improvements for 'Min', 'Max', and 'GroupConcat'
1 parent 2de324d commit 21afc91

File tree

1 file changed

+73
-33
lines changed

1 file changed

+73
-33
lines changed

spec/index.html

Lines changed: 73 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -9702,13 +9702,21 @@ <h5>Sum</h5>
97029702
<div class="defn">
97039703
<p><b>Definition: <span id="defn_aggSum">Sum</span></b></p>
97049704
<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|) &gt;
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>
97129720
</div>
97139721
<p>In this way, <var>Sum</var>( [(1), (2), (3)] ) = <var>Sum'</var>( (1, 2, 3) ) =
97149722
op:numeric-add(1, op:numeric-add(2, op:numeric-add(3, 0))).</p>
@@ -9733,12 +9741,19 @@ <h5>Min</h5>
97339741
arbitrarily typed expressions.</p>
97349742
<div class="defn">
97359743
<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>
97429757
</div>
97439758
</section>
97449759
<section id="aggMax">
@@ -9749,12 +9764,19 @@ <h5>Max</h5>
97499764
arbitrarily typed expressions.</p>
97509765
<div class="defn">
97519766
<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>
97589780
</div>
97599781
</section>
97609782
<section id="aggGroupConcat">
@@ -9765,20 +9787,38 @@ <h5>GroupConcat</h5>
97659787
SEPARATOR.</p>
97669788
<div class="defn">
97679789
<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) &gt; 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>
97829822
</section>
97839823
<section id="aggSample">
97849824
<h5>Sample</h5>

0 commit comments

Comments
 (0)