xsl-list
[Top] [All Lists]

Re: [xsl] XSLT3 generic grouping functions

2020-07-09 06:21:16
In the other xsl I pointed 
https://github.com/ELSGestion/els-sie-xsl-lib/blob/master/src/main/xsl/nest-titles.xsl
 I use a kind on “interface” pattern :

This common xsl module defines function which returns a fatal error saying 
“please override me to define your case”
<xsl:function name="xslLib:nest-title.getDeepLevel" as="xs:integer">
  <xsl:param name="e" as="element()"/>
  <xsl:sequence select="-1"/>
  <xsl:message terminate="yes">[FATAL] Please implement an overriding function 
for xslLib:nest-title.getDeepLevel() in your own XSLT</xsl:message>
</xsl:function>

That’s what the nest-html-titles.xsl does defining level for HTML titles :
<xsl:function name="xslLib:nest-title.getDeepLevel" as="xs:integer">
  <xsl:param name="e" as="element()"/>
  <xsl:variable name="deepLlevel" as="xs:string">
    <xsl:choose>
      <xsl:when test="matches(local-name($e), '^h\d+$')">
        <xsl:sequence select="substring-after(local-name($e), 'h')"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="'-1'"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:variable>
  <xsl:sequence select="$deepLlevel cast as xs:integer"/>
</xsl:function>

I could define any other XSLT for this kind of title grouping by just importing 
the common module and overriding this function according to the XML grammar of 
title to nest.

I like this pattern even if I’m not sure this is a good practice or is used by 
others.
Any thought about it ?
--~----------------------------------------------------------------
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>