xsl-list
[Top] [All Lists]

Re: [xsl] best practices for using XSLT modes

2019-12-06 12:25:41
Whiltespace is definitely a concern.

I especially dislike things like:

<xsl:value-of>, <xsl:value-of> (would be even worse if that was just 
xsl:template instead of xsl:value-of). It's easy for fiddly bits to be misread 
or lost in code cleanup or whatever.

So I tend to prefer either xsl:text or xsl:value-of with concat() or, XPath 3, 
"||" operator.

Using a text value template as the sole value of a template I think will 
satisfy my need for explicitness:

<xsl:template match="@val[. >= 0]">{@val || ': positive'}</xsl:template>

That makes the string construction intent clear while avoiding all unnecessary 
markup and any unintended whitespace.

Cheers,

E.
--
Eliot Kimber
http://contrext.com
 

On 12/6/19, 11:13 AM, "Piez, Wendell A. (Fed) 
wendell(_dot_)piez(_at_)nist(_dot_)gov" 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

    Probably Eliot has in mind unintended whitespace in the results (heh).
    
    
    
    Whitespace. The bane of empires.
    
    
    
    (But oof. I can see I need to do a better job cleaning up after this email 
client.)
    
    
    
    Cheers, Wendell
    
    
    
    -----Original Message-----
    
    From: Eliot Kimber ekimber(_at_)contrext(_dot_)com 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> 
    
    Sent: Friday, December 6, 2019 10:54 AM
    
    To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
    
    Subject: Re: [xsl] best practices for using XSLT modes
    
    
    
    I don't like having literal text as direct children of <xsl:template>--too 
many opportunities for unintended results, so I would use xsl:text where Wendel 
has not:
    
    
    
    <xsl:template match="@val[. >= 0]"><xsl:text>{ . }: 
positive</xsl:text></xsl:template>
    
    
    
    At which point the verbosity is essentially equal my original using 
<xsl:value-of> but maybe a little cleaner.
    
    
    
    Cheers,
    
    
    
    E.
    
    
    
    --
    
    Eliot Kimber
    
    
https://gcc01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcontrext.com&amp;data=02%7C01%7Cwendell.piez%40nist.gov%7C40a5f09f3615437cb95c08d77a648c7f%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C1%7C637112444592037420&amp;sdata=LUMFZBa4Z5OqDN0xSmeW3hTEf27CypRUpldnEbEW%2FS0%3D&amp;reserved=0
    
     
    
    
    
    On 12/6/19, 9:00 AM, "Piez, Wendell A. (Fed) 
wendell(_dot_)piez(_at_)nist(_dot_)gov" 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:
    
    
    
        Tweaked, now in 3.0 with expand-text=’true’:
    
         
    
        <xsl:template match="@val[. >= 0]">{ . }: positive</xsl:template> 
<mailto:%22%3e%7b%20.%20%7d:%20positive%3c/xsl:template%3e%0d%0d%3cxsl:template%20match=%22@val%5b0>
    
          
<mailto:%22%3e%7b%20.%20%7d:%20positive%3c/xsl:template%3e%0d%0d%3cxsl:template%20match=%22@val%5b0>
    
        <xsl:template match="@val[0 
<mailto:%22%3e%7b%20.%20%7d:%20positive%3c/xsl:template%3e%0d%0d%3cxsl:template%20match=%22@val%5b0>
.]">{ . }: negative</xsl:template>
    
         
    
        (Leaving aside discussion of the comparisons.)
    
         
    
        In general I agree with everything that’s been said in this thread. 
Whether I would use templates this way, and whether in a mode, would probably 
depend on the case and possibly on the phase of the moon.
    
         
    
        Cheers, Wendell
    
         
    
        From: Mukul Gandhi gandhi(_dot_)mukul(_at_)gmail(_dot_)com 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com>
    
        
    
        
    
        Sent: Friday, December 6, 2019 12:43 AM
    
        To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
    
        Subject: Re: [xsl] best practices for using XSLT modes
    
         
    
        Hi Eliot,
    
        
    
         
    
        
    
        On Thu, Dec 5, 2019 at 8:21 PM Eliot Kimber 
    
        
    
        ekimber(_at_)contrext(_dot_)com 
<mailto:ekimber(_at_)contrext(_dot_)com> 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:
    
        
    
        
    
        but I would replace the choice that acts on different @val values with 
templates applied to the @val attribute, i.e.:
    
        
    
        
    
                <xsl:template match="a">
    
        
    
                  <val><xsl:apply-templates select="@val"/></val>
    
        
    
               </xsl:template>
    
        
    
        
    
             <xsl:template match="@val[. ge 0]">
    
        
    
                <xsl:value-of select="@val || ': positive'"/>
    
        
    
            </xsl:template>
    
        
    
        
    
             <xsl:template match="@val[. lt  0]">
    
        
    
                <xsl:value-of select="@val || ': negative"/>
    
        
    
            </xsl:template>
    
        
    
        
    
         
    
        
    
        Thanks for suggesting this. It looks intuitive.
    
        
    
         
    
        
    
        
    
        Note that I handle the bug in the original in that it would produce no 
result when @val is "0" (zero).
    
        
    
        
    
         
    
        
    
        I actually, deliberately didn't include processing for the case @val 
being zero (my XML & XSLT codes were merely examples for discussion, and were 
not a real use case). But thanks, for pointing this fact.
    
        
    
         
    
        
    
        
    
        The use of templates rather than xsl:choose makes the code cleaner, I 
think, puts the focus at the template level on the @val attribute, which is the 
focus of the business logic
    
        
    
        
    
         
    
        
    
        I agree.
    
        
    
         
    
        
    
         
    
        
    
        
    
         
    
        
    
        -- 
    
        Regards,
    
        
    
        Mukul Gandhi
    
        
    
        
    
        
    
        
    
        XSL-List
    
        
    
         info and archive 
<https://gcc01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.mulberrytech.com%2Fxsl%2Fxsl-list&amp;data=02%7C01%7Cwendell.piez%40nist.gov%7C40a5f09f3615437cb95c08d77a648c7f%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C1%7C637112444592037420&amp;sdata=zb2EUsZVWDmrzTRxw8pw9u2S%2B3kyXnYdjNs1VNceIqI%3D&amp;reserved=0>
 
    
        EasyUnsubscribe 
<https://gcc01.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.mulberrytech.com%2Funsub%2Fxsl-list%2F3302254&amp;data=02%7C01%7Cwendell.piez%40nist.gov%7C40a5f09f3615437cb95c08d77a648c7f%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C1%7C637112444592037420&amp;sdata=pcdD41LDdZU0bGK9Nxvm9EvXDEz7ut2bMze79VwsgE4%3D&amp;reserved=0>
    
        
    
         (by email <>)
    
        
    
        
    
        
    
        
    
        
    
        XSL-List info and archive 
<https://gcc01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.mulberrytech.com%2Fxsl%2Fxsl-list&amp;data=02%7C01%7Cwendell.piez%40nist.gov%7C40a5f09f3615437cb95c08d77a648c7f%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C1%7C637112444592037420&amp;sdata=zb2EUsZVWDmrzTRxw8pw9u2S%2B3kyXnYdjNs1VNceIqI%3D&amp;reserved=0>EasyUnsubscribe
 
<https://gcc01.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.mulberrytech.com%2Funsub%2Fxsl-list%2F1278982&amp;data=02%7C01%7Cwendell.piez%40nist.gov%7C40a5f09f3615437cb95c08d77a648c7f%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C1%7C637112444592037420&amp;sdata=O%2FaPBHUdF4pdLCK4UfXIcPZgLLf0HCyr3Szc7b0kFrU%3D&amp;reserved=0>
    
        (by email <>)
    
        
    
        
    
        
    
    
    
    
    
    
--~----------------------------------------------------------------
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>