Viewports with regular steps

I assert that this use of viewport:

   $doc  → replace("//section") { $matched → filter() → $replacement }
≫  $result

can be done with this:

   $doc//section ! filter() ≫ $replacements
   xslt([source=$doc,collection=$replacements,stylesheet="stitch.xsl"])
≫  $result

assuming we can bind the default collection and 'stitch.xsl' 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="xs"
    version="2.0">

<xsl:variable name="codes" as="xs:string*">
    <xsl:for-each select="//section">
        <xsl:sequence select="generate-id(.)"/>
    </xsl:for-each>
</xsl:variable>

<xsl:template match="//section">
    <xsl:copy-of
select="subsequence(collection(),index-of($codes,generate-id(.)),1)"/>
</xsl:template>

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="node()" mode="codes">
    <xsl:value-of select="generate-id(.)"/>
</xsl:template>

</xsl:stylesheet>

-- 
--Alex Miłowski
"The excellence of grammar as a guide is proportional to the paucity of the
inflexions, i.e. to the degree of analysis effected by the language
considered."

Bertrand Russell in a footnote of Principles of Mathematics

Received on Wednesday, 16 March 2016 21:01:19 UTC