xsl-list
[Top] [All Lists]

Re: [xsl] [Accumulators] Another stupid question

2020-10-06 17:50:44
On 07.10.2020 00:33, Michael Kay mike(_at_)saxonica(_dot_)com wrote:

Your private:block element is matched by a different "accumulator
instance" from the one that matches the page element; an accumulator
instance corresponds to one document, and accumulator instances for
different documents don't interact. Otherwise, there would be a terrible
dependency on order of processing.

Saxon evaluates unstreamed accumulators lazily: the first time you
evaluate accumulator-before, or accumulator-after, on any node in a
particular document, the accumulator values are computed for all nodes
in that document.

Now I wonder whether nevertheless the sample shows that the accumulator
wrongly did not fire for the parentless element.

A shorter test case is


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    xmlns:xs="http://www.w3.org/2001/XMLSchema";
    exclude-result-prefixes="#all"
    version="3.0">

  <xsl:accumulator name="a1" as="xs:string" initial-value="'init'">
      <xsl:accumulator-rule match="foo" select="$value || ', matched '
|| path()"/>
  </xsl:accumulator>

  <xsl:param name="p1">
      <foo/>
  </xsl:param>

  <xsl:param name="p2" as="element(foo)">
      <foo/>
  </xsl:param>

  <xsl:template name="xsl:initial-template">
      <xsl:apply-templates select="$p1/node(), $p2"/>
  </xsl:template>

  <xsl:template match="foo">
      <foo-processed accumulator-value="{accumulator-before('a1')}"
root="{node-name(root())}"/>
  </xsl:template>

</xsl:stylesheet>

when run with Saxon 10.2 HE with option -it it outputs

<?xml version="1.0" encoding="UTF-8"?><foo-processed
accumulator-value="init, matched /Q{}foo[1]" root=""/><foo-processed
accumulator-value="init" root="foo"/>

Shouldn't the rule for `foo` elements be applied as well to the
parentless `foo` and therefore it should have an accumulator-before
value different from the "init" initial value?

--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>