[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[Recent Entries]
[Reply To This Message]
Re: XSLT 2.0 courses?
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 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>
<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 wrote:
On Fri, 2020-09-18 at 19:31 +0000, Wendell 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format
RSS 2.0 |
|
Atom 0.3 |
|
|