Re: [xsl] XSLT 2.0 courses?

Subject: Re: [xsl] XSLT 2.0 courses?
From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Mon, 21 Sep 2020 11:30:40 -0000
When you see "respectively" used as a conjunction, you know it's English
written by a native speaker of German: "his respectively her", "blue
respectively green". The correct translation of "X bzw Y" in such cases is
probably "X/Y", or "X or, where appropriate, Y", or "X and/or Y", or "X or Y
respectively", none of which work in a programming language!

Michael Kay
Saxonica

> On 21 Sep 2020, at 12:18, Imsieke, Gerrit, le-tex gerrit.imsieke@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> In its original sense, bzw. (beziehungsweise) means 'respectively', but yes,
it has assumed the additional meaning of something like 'or', 'or else', or
'or rather'.
>
> https://en.m.wiktionary.org/wiki/beziehungsweise
>
> 'or else' is appropriate for the operator, but it might be a nightmare
grammar-wise (XPath grammar, not English grammar).
>
>
> On 21.09.2020 13:01, Michael Kay mike@xxxxxxxxxxxx wrote:
>> Perhaps we should call it "bzw" - a German word that is sadly missing from
English.
>> Mike
>>> On 21 Sep 2020, at 11:58, Imsieke, Gerrit, le-tex gerrit.imsieke@xxxxxxxxx
<mailto:gerrit.imsieke@xxxxxxxxx> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx
<mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>> wrote:
>>>
>>> Thank you, this is convincing.
>>>
>>> One might consider naming the 'otherwise' operator 'alternatively', but
this is not the hill I'm going to die on.
>>>
>>> Gerrit
>>>
>>> On 21.09.2020 12:53, Michael Kay mike@xxxxxxxxxxxx
<mailto:mike@xxxxxxxxxxxx> wrote:
>>>> Well, I thought about using EBV, so it means (if ($a) then $a else $b),
but zero is falsey, so you get surprises with, for example
>>>> @price * (1 + (@VAT_Rate otherwise 0.2))
>>>> which potentially gives the wrong answer if @VAT_Rate is present but
zero. And it also gets complicated with atomization: if the attribute is
present but set to a zero length string, which way do you go?
>>>> Michael Kay
>>>> Saxonica
>>>>> On 21 Sep 2020, at 11:21, Imsieke, Gerrit, le-tex
gerrit.imsieke@xxxxxxxxx <mailto:gerrit.imsieke@xxxxxxxxx>
<mailto:gerrit.imsieke@xxxxxxxxx <mailto:gerrit.imsieke@xxxxxxxxx>>
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx
<mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
<mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx
<mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>>> wrote:
>>>>>
>>>>> If the boolean variable $a is false() instead of an empty sequence,
>>>>>
>>>>> $a otherwise $b
>>>>>
>>>>> will return false(). This is the specified behaviour, but I find it a
bit counterintuitive. I have a slight preference for the otherwise operator to
return $b if $a is false().
>>>>>
>>>>> Have you thought about defining the otherwise operator as "it returns $a
unless it's an empty sequence or a boolean value equal to false(), in which
case it returns $b"? I'm not sure which one will seem more natural to most
users.
>>>>>
>>>>> Gerrit
>>>>>
>>>>> On 21.09.2020 10:46, Michael Kay mike@xxxxxxxxxxxx
<mailto:mike@xxxxxxxxxxxx> <mailto:mike@xxxxxxxxxxxx
<mailto:mike@xxxxxxxxxxxx>> wrote:
>>>>>> I've been proposing ($a otherwise $b) to meet this requirement: it
returns $a unless it's an empty sequence, in which case it returns $b.
>>>>>> For example @price - (@discount otherwise 0)
>>>>>> It's actually implemented in Saxon 10 if you switch syntax extensions
on.
>>>>>> Michael Kay
>>>>>> Saxonica
>>>>>>> On 21 Sep 2020, at 02:34, Pieter Lamers pieter.lamers@xxxxxxxxxxxx
<mailto:pieter.lamers@xxxxxxxxxxxx> <mailto:pieter.lamers@xxxxxxxxxxxx
<mailto:pieter.lamers@xxxxxxxxxxxx>> <mailto:pieter.lamers@xxxxxxxxxxxx
<mailto:pieter.lamers@xxxxxxxxxxxx> <mailto:pieter.lamers@xxxxxxxxxxxx
<mailto:pieter.lamers@xxxxxxxxxxxx>>> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx
<mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
<mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx
<mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>>
<mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx
<mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
<mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx
<mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>>>> wrote:
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> An avid user of ($a, $b)[1] myself, which winks at TransactSQL
ISNULL($a, $b) and MySQL IFNULL($a, $b), I do have to remind myself that $a
has to be a single item for the /if/else /shortcut to work.
>>>>>>>
>>>>>>> So, in
>>>>>>>
>>>>>>> let $a := ('one','two','three')
>>>>>>> let $b := ('none')
>>>>>>>
>>>>>>> return ($a, $b)[1] will return just the first item in the sequence,
'one', and not 'one','two','three', which might be what you want to achieve in
this quasi shorthanded /if/else /construction.
>>>>>>>
>>>>>>> Not that you wouldn't know, Liam, just as a heads up to some others in
this audience who might not.
>>>>>>>
>>>>>>> Best,
>>>>>>> Pieter
>>>>>>>
>>>>>>> On 19/09/2020 01:54, Liam R. E. Quin liam@xxxxxxxxxxxxxxxx
<mailto:liam@xxxxxxxxxxxxxxxx> <mailto:liam@xxxxxxxxxxxxxxxx
<mailto:liam@xxxxxxxxxxxxxxxx>> wrote:
>>>>>>>> On Fri, 2020-09-18 at 19:31 +0000, Wendell Piezwapiez@xxxxxxxxxxxxxxx
<mailto:Piezwapiez@xxxxxxxxxxxxxxx> <mailto:Piezwapiez@xxxxxxxxxxxxxxx
<mailto:Piezwapiez@xxxxxxxxxxxxxxx>>
>>>>>>>> wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> In addition to Liam's list I think there are a couple more vital
>>>>>>>>> features
>>>>>>>>> one needs to get a taste of in XSLT 2.0 or XSLT 3.0, if one has
been
>>>>>>>>> subsisting on an XSLT 1.0 diet:
>>>>>>>>>
>>>>>>>>> * <xsl:for-each-group> and its uses
>>>>>>>>> * temporary trees -
>>>>>>>>> * regex support in functions and xsl:analyze-string
>>>>>>>>> * tunnel parameters?
>>>>>>>> Yeah, those are all huge, although i think easier to learn than
things
>>>>>>>> like ($a, 'none')[1], which are startling because XSLT 1 didn't have
>>>>>>>> sequences.
>>>>>>>>
>>>>>>>> For those wondering, ($a, $b, $c, ...)[1] returns the first
non-empty
>>>>>>>> non-false item out of $a, $b and $c, so it's a shortcut for
>>>>>>>>     <xsl:sequence select="if ($a) then $a else $b" />
>>>>>>>>
>>>>>>>>
>>>>>>>> On regular expressions - it's huge, but it's also dangerous, as e.g.
>>>>>>>> replace(price div 100, '\.\d*$', '') is not a good way to write
>>>>>>>> math:floor().
>>>>>>>>
>>>>>>>> An XSLT-3-from-scratch course could easily take a full week and be
>>>>>>>> woefully incomplete. Or totally overwhelming. Or both.
>>>>>>>>
>>>>>>>> On the other hand, i try & include "don't be afraid of the specs" in
>>>>>>>> the courses i teach, and then not cover every detail. So maybe it's
>>>>>>>> possible.
>>>>>>>>
>>>>>>>> Liam

Current Thread