Project

Profile

Help

Bug #5190 ยป Re_ [Saxon-JS - Bug #5190] xsl_iterate problem where the name of an xsl_iterate parameter duplicates the name of a local variable - 2021-12-27T15_17_24Z.eml

John Lumley, 2021-12-27 16:17

 
X-He-Spam-Score: -1.7
Return-Path: <john@saxonica.com>
Delivered-To: dropbox@plan.io
Received: from m.launch.gmbh ([127.0.0.1])
by m.launch.gmbh with LMTP id wEI7K/jYyWHVHQAAJzdhvw
for <dropbox@plan.io>; Mon, 27 Dec 2021 16:17:12 +0100
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on m.launch.gmbh
X-Spam-Level:
X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,DMARC_NONE,
HTML_MESSAGE,HTML_SINGLET_MANY,MIME_QP_LONG_LINE,RCVD_IN_DNSWL_NONE,
SPF_HELO_NONE,SPF_NONE,SPF_NONE_IGNORE autolearn=no autolearn_force=no
version=3.4.2
X-Spam-Report:
* -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at
* https://www.dnswl.org/, no trust
* [72.167.218.223 listed in list.dnswl.org]
* -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1%
* [score: 0.0000]
* 0.1 DMARC_NONE DMARC record not found
* 2.0 SPF_NONE SPF record not found
* -2.0 SPF_NONE_IGNORE m.launch.gmbh does not consider absent SPF
* records
* 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record
* 0.0 HTML_MESSAGE BODY: HTML included in message
* 0.0 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76
* chars
* 0.1 HTML_SINGLET_MANY Many single-letter HTML format blocks
X-Spam-Score: -1.7
Envelope-to: inbox+saxonica+f38e+saxon-js@plan.io
Authentication-Results: m.launch.gmbh; dmarc=none (p=none dis=none) header.from=saxonica.com
Authentication-Results: m.launch.gmbh; spf=none smtp.mailfrom=john@saxonica.com
Authentication-Results: m.launch.gmbh; dkim=none; dkim-atps=neutral
Received: from p3plwbeout04-02.prod.phx3.secureserver.net (p3plsmtp04-02-2.prod.phx3.secureserver.net [72.167.218.223])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by m.launch.gmbh (Postfix) with ESMTPS id F34A68096F
for <inbox+saxonica+f38e+saxon-js@plan.io>; Mon, 27 Dec 2021 16:17:11 +0100 (CET)
Received: from mailex.mailcore.me ([94.136.40.141])
by :WBEOUT: with ESMTP
id 1rkKndb0dvCcy1rkLn4PgJ; Mon, 27 Dec 2021 08:17:09 -0700
X-CMAE-Analysis: v=2.4 cv=YtbK+6UX c=1 sm=1 tr=0 ts=61c9d8f5
a=bheWAUFm1xGnSTQFbH9Kqg==:117 a=RMpG09xm24yrcX4E7m5GWw==:17
a=p2XD31sAdHhaPMeO:21 a=saBqZGb5OYQA:10 a=IOMw9HtfNCkA:10 a=SSmOFEACAAAA:8
a=2z1OXlWFAAAA:8 a=zKiKQOHbAAAA:8 a=Fl-p5b_N0JTHJrq1Yl0A:9 a=QEXdDO2ut3YA:10
a=TeuQqM9sAAAA:8 a=_ejgbluhaNNjil0EshkA:9 a=qCoXkYnsvs2dOani:21
a=_W_S_7VecoQA:10 a=5KWgKTd3SvJaVEFEReuA:22 a=SNRPda0NjyR9MlWdJ_lJ:22
a=lIhSIjdgpsPn7NjMZNrW:22
X-SECURESERVER-ACCT: john@saxonica.com
X-SID: 1rkKndb0dvCcy
Received: from 62.82.143.202.static.user.ono.com ([62.82.143.202] helo=smtpclient.apple)
by smtp01.mailcore.me with esmtpa (Exim 4.94.2)
(envelope-from <john@saxonica.com>)
id 1n1rkJ-0000U2-Ig
for inbox+saxonica+f38e+saxon-js@plan.io; Mon, 27 Dec 2021 15:17:08 +0000
Content-Type: multipart/alternative; boundary=Apple-Mail-1D649F84-762D-4DF7-974E-375BC621F9FA
Content-Transfer-Encoding: 7bit
From: John Lumley <john@saxonica.com>
Mime-Version: 1.0 (1.0)
Subject: Re: [Saxon-JS - Bug #5190] xsl:iterate problem where the name of an xsl:iterate parameter duplicates the name of a local variable
Date: Mon, 27 Dec 2021 15:17:05 +0000
Message-Id: <ABEA920B-0A82-46D9-8555-D9EF259FCE65@saxonica.com>
References: <redmine.journal-18939.20211227094758.d376cc48d2db0961@plan.io>
In-Reply-To: <redmine.journal-18939.20211227094758.d376cc48d2db0961@plan.io>
To: Saxonica Developer Community <inbox+saxonica+f38e+saxon-js@plan.io>
X-Mailer: iPad Mail (18H107)
X-Mailcore-Auth: 439400283
X-Mailcore-Domain: 1881035
X-123-reg-Authenticated: john@saxonica.com
X-Originating-IP: 62.82.143.202
X-CMAE-Envelope: MS4xfEMRIE+IWODq2VrPgk1I5b6h+uesJmyqe3774F6prlZYeX0VoQ7v9GUOMMhMOhquTs3I/IEyQmh7nXogA93637CjhHA3T5wTkR4cpB6GSruNg5O4RVpU
Gu9vbtL20F7Rm7pzKAlf0yqLgVU9T8Ldrw4R+RcVHOK4hYcV6guS2IAy8ZZ47RJ4ICEyeEy9EJrJKurP5UHaN0V7FL0OvS8U2ho=


--Apple-Mail-1D649F84-762D-4DF7-974E-375BC621F9FA
Content-Type: text/plain;
charset=utf-8
Content-Transfer-Encoding: quoted-printable

It never ceases to amaze me the number of =E2=80=98corner cases=E2=80=99 tha=
t =E2=80=98come out of the woodwork=E2=80=99. When I wrote the XX processing=
of xsl:iterate it never occurred to me we might have a duplication of local=
variable and parameter names=E2=80=A6=E2=80=A6..

Sent from my iPad

> On 27 Dec 2021, at 09:48, Saxonica Developer Community <notifications@plan=
.io> wrote:
>=20
> =EF=BB=BF
> --- In your reply, please do not write below this line ---
>=20
> Issue #5190 has been updated by Michael Kay.
> Subject changed from xsl:iterate problem where on-completion select=3D"$pa=
ram" doesn't return the parameter value as part of the xsl:iterate result to=
xsl:iterate problem where the name of an xsl:iterate parameter duplicates t=
he name of a local variable
> Bug #5190: xsl:iterate problem where the name of an xsl:iterate parameter d=
uplicates the name of a local variable
> Author: Martin Honnen
> Status: New
> Priority: Normal
> Assignee:
> Category: XSLT Conformance
> Sprint/Milestone: Saxon-JS 2.3
> Applies to JS Branch: 2
> Fix Committed on JS Branch:
> Fixed in JS Release:
> SEF Generated with:
> Platforms:
> Company:
> Contact person:
> Additional contact persons:
> I was experimenting with xsl:iterate and found that the code
>=20
> <?xml version=3D"1.0" encoding=3D"utf-8"?>
> <xsl:stylesheet xmlns:xsl=3D"http://www.w3.org/1999/XSL/Transform"
> version=3D"3.0"
> xmlns:xs=3D"http://www.w3.org/2001/XMLSchema"
> exclude-result-prefixes=3D"#all"
> expand-text=3D"yes">
>=20
> <xsl:output method=3D"xml" indent=3D"yes"/>
>=20
> <xsl:mode on-no-match=3D"shallow-copy"/>
>=20
> <xsl:template match=3D"table">
> <xsl:copy>
> <xsl:iterate select=3D"row">
> <xsl:param name=3D"row" as=3D"element(row)?" select=3D"()"/>
> <xsl:on-completion select=3D"$row"/>
> <xsl:variable name=3D"row" as=3D"element(row)">
> <xsl:apply-templates select=3D"."/>
> </xsl:variable>
> <xsl:copy-of select=3D"$row"/>
> <xsl:next-iteration>
> <xsl:with-param name=3D"row" select=3D"$row"/>
> </xsl:next-iteration>
> </xsl:iterate>
> </xsl:copy>
> </xsl:template>
>=20
> <xsl:template match=3D"/" name=3D"xsl:initial-template">
> <xsl:next-match/>
> <xsl:comment xmlns:saxon=3D"http://saxon.sf.net/">Run with {system-pro=
perty('xsl:product-name')} {system-property('xsl:product-version')} {system-=
property('Q{http://saxon.sf.net/}platform')}</xsl:comment>
> </xsl:template>
>=20
> </xsl:stylesheet>
> when run with xslt3 from Saxon-JS 2.3 against a sample like
>=20
> <table>
> <row>row 1</row>
> <row>row 2</row>
> <row>row 3</row>
> </table>
> outputs "only" three rows
>=20
> <?xml version=3D"1.0" encoding=3D"UTF-8"?>
> <table>
> <row>row 1</row>
> <row>row 2</row>
> <row>row 3</row>
> </table>
> <!--Run with Saxon-JS 2.3 Node.js-->
> while Saxon HE Java 10.6 outputs the third row two times
>=20
> <?xml version=3D"1.0" encoding=3D"UTF-8"?>
> <table>
> <row>row 1</row>
> <row>row 2</row>
> <row>row 3</row>
> <row>row 3</row>
> </table>
> <!--Run with SAXON HE 10.6 -->
> as does SaxonCS.
>=20
> The spec for xsl:iterate https://www.w3.org/TR/xslt-30/#iterate states tha=
t "The result of the xsl:iterate instruction is the concatenation of the seq=
uences that result from the repeated evaluation of the contained sequence co=
nstructor, followed by the sequence that results from evaluating the xsl:bre=
ak or xsl:on-completion element if any" so I think Saxon-JS has a bug here, f=
ailing to output the on-completion result.
>=20
> You have received this notification because you have either subscribed to o=
r are involved in a project on Saxonica Developer Community site. To change y=
our notification preferences, please click here: https://saxonica.plan.io/my=
/account?tour=3Dmail_preferences
>=20
>=20
> This notification was cheerfully delivered by

--Apple-Mail-1D649F84-762D-4DF7-974E-375BC621F9FA
Content-Type: text/html;
charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html><head><meta http-equiv=3D"content-type" content=3D"text/html; charset=3D=
utf-8"></head><body dir=3D"auto">It never ceases to amaze me the number of =E2=
=80=98corner cases=E2=80=99 that =E2=80=98come out of the woodwork=E2=80=99.=
When I wrote the XX processing of xsl:iterate it never occurred to me we mi=
ght have a duplication of local variable and parameter names=E2=80=A6=E2=80=A6=
..<br><br><div dir=3D"ltr">Sent from my iPad</div><div dir=3D"ltr"><br><bloc=
kquote type=3D"cite">On 27 Dec 2021, at 09:48, Saxonica Developer Community &=
lt;notifications@plan.io&gt; wrote:<br><br></blockquote></div><blockquote ty=
pe=3D"cite"><div dir=3D"ltr">=EF=BB=BF


<!--[if !mso]><!-- -->
<link href=3D"https://assets.plan.io/stylesheets/fonts.css" rel=3D"styleshee=
t" type=3D"text/css">
<!--<![endif]-->

<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DUTF-8"><st=
yle>a:link{color:#0088b7}
a:visited{color:#0088b7}
a:hover{color:#0088b7}
a:active{color:#0088b7}</style>

<table class=3D"planio_mail" width=3D"100%" cellspacing=3D"0" cellpadding=3D=
"0" style=3D"border-collapse:collapse;margin-bottom:1em;border:1px solid #bb=
b;padding:4px;border-spacing:0;margin-bottom:0;width:100%;border:none;paddin=
g:0">
<tbody><tr><td class=3D"planio_mail header" style=3D"border:1px solid #bbb;p=
adding:4px;text-align:center;width:100%;font-family:MarketWeb, Helvetica, Ar=
ial, sans-serif;font-size:0.8em;color:#D7D7D7;border:none;padding:0"><p>--- I=
n your reply, please do not write below this line ---</p></td></tr>
<tr><td class=3D"planio_mail" style=3D"border:1px solid #bbb;padding:4px;bor=
der:none;padding:0">Issue <a href=3D"https://saxonica.plan.io/issues/5190?pn=
=3D1#change-18939" style=3D"color:#0088b7">#5190</a> has been updated by Mic=
hael Kay.
<hr style=3D"width:100%;height:1px;background:#ccc;border:0;margin:1.2em 0">=


<ul class=3D"journal details" style=3D"color:#959595;margin-bottom:1.5em">
<li><strong>Subject</strong> changed from <i>xsl:iterate problem where on-=
completion select=3D"$param" doesn't return the parameter value as part of t=
he xsl:iterate result</i> to <i>xsl:iterate problem where the name of an xsl=
:iterate parameter duplicates the name of a local variable</i></li>
</ul>


<hr style=3D"width:100%;height:1px;background:#ccc;border:0;margin:1.2em 0">=

<h1 style=3D"font-family:&quot;ProximaNova-Bold&quot;, Helvetica, Arial, san=
s-serif;font-weight:normal;margin:0px;font-size:1.3em;line-height:1.4em"><a h=
ref=3D"https://saxonica.plan.io/issues/5190?pn=3D1#change-18939" style=3D"co=
lor:#0088b7;text-decoration:none">Bug #5190: xsl:iterate problem where the n=
ame of an xsl:iterate parameter duplicates the name of a local variable</a><=
/h1>

<ul class=3D"details" style=3D"color:#959595;margin-bottom:1.5em"><li><stron=
g>Author: </strong>Martin Honnen</li>
<li><strong>Status: </strong>New</li>
<li><strong>Priority: </strong>Normal</li>
<li><strong>Assignee: </strong></li>
<li><strong>Category: </strong>XSLT Conformance</li>
<li><strong>Sprint/Milestone: </strong>Saxon-JS 2.3</li>
<li><strong>Applies to JS Branch: </strong>2</li>
<li><strong>Fix Committed on JS Branch: </strong></li>
<li><strong>Fixed in JS Release: </strong></li>
<li><strong>SEF Generated with: </strong></li>
<li><strong>Platforms: </strong></li>
<li><strong>Company: </strong></li>
<li><strong>Contact person: </strong></li>
<li><strong>Additional contact persons: </strong></li></ul>

<p>I was experimenting with <code style=3D"font-family:Hack, Consolas, Menlo=
, &quot;Liberation Mono&quot;, Courier, monospace;font-size:85%;background-c=
olor:#ececec;word-wrap:break-word;border-radius:3px;padding:0.2em;margin:0">=
xsl:iterate</code> and found that the code</p>
<pre style=3D"font-family:Hack, Consolas, Menlo, &quot;Liberation Mono&quot;=
, Courier, monospace;font-size:85%;background-color:#ececec;word-wrap:break-=
word;margin:1em 0;padding:8px;border:none;border-radius:3px;width:auto;overf=
low-x:auto;overflow-y:hidden"><code class=3D"xml syntaxhl" style=3D"font-fam=
ily:Hack, Consolas, Menlo, &quot;Liberation Mono&quot;, Courier, monospace;f=
ont-size:85%;background-color:#ececec;word-wrap:break-word;border-radius:3px=
;padding:0.2em;margin:0;padding:0"><span class=3D"CodeRay"><span class=3D"pr=
eprocessor">&lt;?xml version=3D"1.0" encoding=3D"utf-8"?&gt;</span>
<span class=3D"tag">&lt;xsl:stylesheet</span> <span class=3D"attribute-name"=
>xmlns:xsl</span>=3D<span class=3D"string"><span class=3D"delimiter">"</span=
><span class=3D"content">http://www.w3.org/1999/XSL/Transform</span><span cl=
ass=3D"delimiter">"</span></span>
<span class=3D"attribute-name">version</span>=3D<span class=3D"string"><sp=
an class=3D"delimiter">"</span><span class=3D"content">3.0</span><span class=
=3D"delimiter">"</span></span>
<span class=3D"attribute-name">xmlns:xs</span>=3D<span class=3D"string"><s=
pan class=3D"delimiter">"</span><span class=3D"content">http://www.w3.org/20=
01/XMLSchema</span><span class=3D"delimiter">"</span></span>
<span class=3D"attribute-name">exclude-result-prefixes</span>=3D<span clas=
s=3D"string"><span class=3D"delimiter">"</span><span class=3D"content">#all<=
/span><span class=3D"delimiter">"</span></span>
<span class=3D"attribute-name">expand-text</span>=3D<span class=3D"string"=
><span class=3D"delimiter">"</span><span class=3D"content">yes</span><span c=
lass=3D"delimiter">"</span></span><span class=3D"tag">&gt;</span>

<span class=3D"tag">&lt;xsl:output</span> <span class=3D"attribute-name">m=
ethod</span>=3D<span class=3D"string"><span class=3D"delimiter">"</span><spa=
n class=3D"content">xml</span><span class=3D"delimiter">"</span></span> <spa=
n class=3D"attribute-name">indent</span>=3D<span class=3D"string"><span clas=
s=3D"delimiter">"</span><span class=3D"content">yes</span><span class=3D"del=
imiter">"</span></span><span class=3D"tag">/&gt;</span>

<span class=3D"tag">&lt;xsl:mode</span> <span class=3D"attribute-name">on-=
no-match</span>=3D<span class=3D"string"><span class=3D"delimiter">"</span><=
span class=3D"content">shallow-copy</span><span class=3D"delimiter">"</span>=
</span><span class=3D"tag">/&gt;</span>

<span class=3D"tag">&lt;xsl:template</span> <span class=3D"attribute-name"=
>match</span>=3D<span class=3D"string"><span class=3D"delimiter">"</span><sp=
an class=3D"content">table</span><span class=3D"delimiter">"</span></span><s=
pan class=3D"tag">&gt;</span>
<span class=3D"tag">&lt;xsl:copy&gt;</span>
<span class=3D"tag">&lt;xsl:iterate</span> <span class=3D"attribute-na=
me">select</span>=3D<span class=3D"string"><span class=3D"delimiter">"</span=
><span class=3D"content">row</span><span class=3D"delimiter">"</span></span>=
<span class=3D"tag">&gt;</span>
<span class=3D"tag">&lt;xsl:param</span> <span class=3D"attribute-na=
me">name</span>=3D<span class=3D"string"><span class=3D"delimiter">"</span><=
span class=3D"content">row</span><span class=3D"delimiter">"</span></span> <=
span class=3D"attribute-name">as</span>=3D<span class=3D"string"><span class=
=3D"delimiter">"</span><span class=3D"content">element(row)?</span><span cla=
ss=3D"delimiter">"</span></span> <span class=3D"attribute-name">select</span=
>=3D<span class=3D"string"><span class=3D"delimiter">"</span><span class=3D"=
content">()</span><span class=3D"delimiter">"</span></span><span class=3D"ta=
g">/&gt;</span>
<span class=3D"tag">&lt;xsl:on-completion</span> <span class=3D"attr=
ibute-name">select</span>=3D<span class=3D"string"><span class=3D"delimiter"=
>"</span><span class=3D"content">$row</span><span class=3D"delimiter">"</spa=
n></span><span class=3D"tag">/&gt;</span>
<span class=3D"tag">&lt;xsl:variable</span> <span class=3D"attribute=
-name">name</span>=3D<span class=3D"string"><span class=3D"delimiter">"</spa=
n><span class=3D"content">row</span><span class=3D"delimiter">"</span></span=
> <span class=3D"attribute-name">as</span>=3D<span class=3D"string"><span cl=
ass=3D"delimiter">"</span><span class=3D"content">element(row)</span><span c=
lass=3D"delimiter">"</span></span><span class=3D"tag">&gt;</span>
<span class=3D"tag">&lt;xsl:apply-templates</span> <span class=3D"=
attribute-name">select</span>=3D<span class=3D"string"><span class=3D"delimi=
ter">"</span><span class=3D"content">.</span><span class=3D"delimiter">"</sp=
an></span><span class=3D"tag">/&gt;</span>
<span class=3D"tag">&lt;/xsl:variable&gt;</span>
<span class=3D"tag">&lt;xsl:copy-of</span> <span class=3D"attribute-=
name">select</span>=3D<span class=3D"string"><span class=3D"delimiter">"</sp=
an><span class=3D"content">$row</span><span class=3D"delimiter">"</span></sp=
an><span class=3D"tag">/&gt;</span>
<span class=3D"tag">&lt;xsl:next-iteration&gt;</span>
<span class=3D"tag">&lt;xsl:with-param</span> <span class=3D"attri=
bute-name">name</span>=3D<span class=3D"string"><span class=3D"delimiter">"<=
/span><span class=3D"content">row</span><span class=3D"delimiter">"</span></=
span> <span class=3D"attribute-name">select</span>=3D<span class=3D"string">=
<span class=3D"delimiter">"</span><span class=3D"content">$row</span><span c=
lass=3D"delimiter">"</span></span><span class=3D"tag">/&gt;</span>
<span class=3D"tag">&lt;/xsl:next-iteration&gt;</span>
<span class=3D"tag">&lt;/xsl:iterate&gt;</span>
<span class=3D"tag">&lt;/xsl:copy&gt;</span>
<span class=3D"tag">&lt;/xsl:template&gt;</span>

<span class=3D"tag">&lt;xsl:template</span> <span class=3D"attribute-name"=
>match</span>=3D<span class=3D"string"><span class=3D"delimiter">"</span><sp=
an class=3D"content">/</span><span class=3D"delimiter">"</span></span> <span=
class=3D"attribute-name">name</span>=3D<span class=3D"string"><span class=3D=
"delimiter">"</span><span class=3D"content">xsl:initial-template</span><span=
class=3D"delimiter">"</span></span><span class=3D"tag">&gt;</span>
<span class=3D"tag">&lt;xsl:next-match</span><span class=3D"tag">/&gt;</=
span>
<span class=3D"tag">&lt;xsl:comment</span> <span class=3D"attribute-name=
">xmlns:saxon</span>=3D<span class=3D"string"><span class=3D"delimiter">"</s=
pan><span class=3D"content">http://saxon.sf.net/</span><span class=3D"delimi=
ter">"</span></span><span class=3D"tag">&gt;</span>Run with {system-property=
('xsl:product-name')} {system-property('xsl:product-version')} {system-prope=
rty('Q{http://saxon.sf.net/}platform')}<span class=3D"tag">&lt;/xsl:comment&=
gt;</span>
<span class=3D"tag">&lt;/xsl:template&gt;</span>

<span class=3D"tag">&lt;/xsl:stylesheet&gt;</span>
</span></code></pre>
<p>when run with <code style=3D"font-family:Hack, Consolas, Menlo, &quot;Lib=
eration Mono&quot;, Courier, monospace;font-size:85%;background-color:#ecece=
c;word-wrap:break-word;border-radius:3px;padding:0.2em;margin:0">xslt3</code=
> from Saxon-JS 2.3 against a sample like</p>
<pre style=3D"font-family:Hack, Consolas, Menlo, &quot;Liberation Mono&quot;=
, Courier, monospace;font-size:85%;background-color:#ececec;word-wrap:break-=
word;margin:1em 0;padding:8px;border:none;border-radius:3px;width:auto;overf=
low-x:auto;overflow-y:hidden"><code class=3D"xml syntaxhl" style=3D"font-fam=
ily:Hack, Consolas, Menlo, &quot;Liberation Mono&quot;, Courier, monospace;f=
ont-size:85%;background-color:#ececec;word-wrap:break-word;border-radius:3px=
;padding:0.2em;margin:0;padding:0"><span class=3D"CodeRay"><span class=3D"ta=
g">&lt;table&gt;</span>
<span class=3D"tag">&lt;row&gt;</span>row 1<span class=3D"tag">&lt;/row&gt=
;</span>
<span class=3D"tag">&lt;row&gt;</span>row 2<span class=3D"tag">&lt;/row&gt=
;</span>
<span class=3D"tag">&lt;row&gt;</span>row 3<span class=3D"tag">&lt;/row&gt=
;</span>
<span class=3D"tag">&lt;/table&gt;</span>
</span></code></pre>
<p>outputs "only" three rows</p>
<pre style=3D"font-family:Hack, Consolas, Menlo, &quot;Liberation Mono&quot;=
, Courier, monospace;font-size:85%;background-color:#ececec;word-wrap:break-=
word;margin:1em 0;padding:8px;border:none;border-radius:3px;width:auto;overf=
low-x:auto;overflow-y:hidden"><code class=3D"xml syntaxhl" style=3D"font-fam=
ily:Hack, Consolas, Menlo, &quot;Liberation Mono&quot;, Courier, monospace;f=
ont-size:85%;background-color:#ececec;word-wrap:break-word;border-radius:3px=
;padding:0.2em;margin:0;padding:0"><span class=3D"CodeRay"><span class=3D"pr=
eprocessor">&lt;?xml version=3D"1.0" encoding=3D"UTF-8"?&gt;</span>
<span class=3D"tag">&lt;table&gt;</span>
<span class=3D"tag">&lt;row&gt;</span>row 1<span class=3D"tag">&lt;/row&g=
t;</span>
<span class=3D"tag">&lt;row&gt;</span>row 2<span class=3D"tag">&lt;/row&g=
t;</span>
<span class=3D"tag">&lt;row&gt;</span>row 3<span class=3D"tag">&lt;/row&g=
t;</span>
<span class=3D"tag">&lt;/table&gt;</span>
<span class=3D"comment">&lt;!--Run with Saxon-JS 2.3 Node.js--&gt;</span>
</span></code></pre>
<p>while Saxon HE Java 10.6 outputs the third row two times</p>
<pre style=3D"font-family:Hack, Consolas, Menlo, &quot;Liberation Mono&quot;=
, Courier, monospace;font-size:85%;background-color:#ececec;word-wrap:break-=
word;margin:1em 0;padding:8px;border:none;border-radius:3px;width:auto;overf=
low-x:auto;overflow-y:hidden"><code class=3D"xml syntaxhl" style=3D"font-fam=
ily:Hack, Consolas, Menlo, &quot;Liberation Mono&quot;, Courier, monospace;f=
ont-size:85%;background-color:#ececec;word-wrap:break-word;border-radius:3px=
;padding:0.2em;margin:0;padding:0"><span class=3D"CodeRay"><span class=3D"pr=
eprocessor">&lt;?xml version=3D"1.0" encoding=3D"UTF-8"?&gt;</span>
<span class=3D"tag">&lt;table&gt;</span>
<span class=3D"tag">&lt;row&gt;</span>row 1<span class=3D"tag">&lt;/row&g=
t;</span>
<span class=3D"tag">&lt;row&gt;</span>row 2<span class=3D"tag">&lt;/row&g=
t;</span>
<span class=3D"tag">&lt;row&gt;</span>row 3<span class=3D"tag">&lt;/row&g=
t;</span>
<span class=3D"tag">&lt;row&gt;</span>row 3<span class=3D"tag">&lt;/row&g=
t;</span>
<span class=3D"tag">&lt;/table&gt;</span>
<span class=3D"comment">&lt;!--Run with SAXON HE 10.6 --&gt;</span>
</span></code></pre>
<p>as does SaxonCS.</p>
<p>The spec for <code style=3D"font-family:Hack, Consolas, Menlo, &quot;Libe=
ration Mono&quot;, Courier, monospace;font-size:85%;background-color:#ececec=
;word-wrap:break-word;border-radius:3px;padding:0.2em;margin:0">xsl:iterate<=
/code> <a href=3D"https://www.w3.org/TR/xslt-30/#iterate" class=3D"external"=
style=3D"color:#0088b7">https://www.w3.org/TR/xslt-30/#iterate</a> states t=
hat "The result of the xsl:iterate instruction is the concatenation of the s=
equences that result from the repeated evaluation of the contained sequence c=
onstructor, followed by the sequence that results from evaluating the xsl:br=
eak or xsl:on-completion element if any" so I think Saxon-JS has a bug here,=
failing to output the <code style=3D"font-family:Hack, Consolas, Menlo, &qu=
ot;Liberation Mono&quot;, Courier, monospace;font-size:85%;background-color:=
#ececec;word-wrap:break-word;border-radius:3px;padding:0.2em;margin:0">on-co=
mpletion</code> result.</p>


<div itemscope=3D"itemscope" itemtype=3D"http://schema.org/EmailMessage"><di=
v itemscope=3D"itemscope" itemprop=3D"action" itemtype=3D"http://schema.org/=
ViewAction"><link itemprop=3D"url" href=3D"https://saxonica.plan.io/issues/5=
190?pn=3D1#change-18939"><meta itemprop=3D"name" content=3D"View Issue"></di=
v><meta itemprop=3D"description" content=3D"View this issue update on Planio=
"></div>

</td></tr>
<tr><td class=3D"planio_mail footer" style=3D"border:1px solid #bbb;padding:=
4px;font-size:0.8em;width:100%;border:none;padding:0"><hr style=3D"width:100=
%;height:1px;background:#ccc;border:0;margin:1.2em 0"><p>You have received t=
his notification because you have either subscribed to or are involved in a p=
roject on Saxonica Developer Community site.
To change your notification preferences, please click here: <a href=3D"https=
://saxonica.plan.io/my/account?tour=3Dmail_preferences" class=3D"external" s=
tyle=3D"color:#0088b7">https://saxonica.plan.io/my/account?tour=3Dmail_prefe=
rences</a></p></td></tr>
<tr><td class=3D"planio_mail planio_footer" style=3D"border:1px solid #bbb;p=
adding:4px;text-align:center;width:100%;font-family:MarketWeb, Helvetica, Ar=
ial, sans-serif;font-size:1.2em;color:#D7D7D7;border:none;padding:0"><br><di=
v><a href=3D"https://plan.io/" style=3D"color:#0088b7;color:#D7D7D7;text-dec=
oration:none">This notification was cheerfully delivered by</a></div></td></=
tr>
<tr><td class=3D"planio_mail planio_footer_logo" style=3D"border:1px solid #=
bbb;padding:4px;text-align:center;width:100%;border:none;padding:0"><a href=3D=
"https://plan.io/" title=3D"Planio" style=3D"color:#0088b7"><img src=3D"http=
s://assets.plan.io/images/planio_logo_gray_204x50.png" height=3D"25" width=3D=
"102" border=3D"0" alt=3D"Planio" style=3D"vertical-align:middle;border:none=
" data-unique-identifier=3D""></a></td></tr>
</tbody></table>


</div></blockquote></body></html>=

--Apple-Mail-1D649F84-762D-4DF7-974E-375BC621F9FA--
    (1-1/1)