[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: XSLT 2.0 courses?

Subject: Re: XSLT 2.0 courses?
From: "Imsieke, Gerrit, le-tex gerrit.imsieke@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Mon, 21 Sep 2020 10:20:47 -0000
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

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.