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

Re: XSLT 4: map serialization

Subject: Re: XSLT 4: map serialization
From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 25 Nov 2020 04:56:00 -0000
Re:  XSLT 4: map serialization
>  works, but while this is doubtless a question of aesthetic bias I don't
consider this solution more elegant than (or preferable to) the XSLT version

The problem stated in the initial post was that:

"This isn't allowed, because map:for-each() takes an XPath function, rather
than an XQuery function, so it hasn't got access to element constructors"

*The pure XPath solution is also an XQuery solution*, as XQuery is a
superset of XPath.

*As for elegance*, one can write a more elegant expression if one defines a
separate inline XPath function:

*let $makeElement := function($k, $v) {*
*  parse-xml('<' || $k '>' || $v '</' || $k '>' )*
* return*
*    ($wordArchive ! $ makeElement('entry', map:for-each(., $makeElement
($k, $x)))*
*       ! parse-xml(.)*
*}*

Not tested, as I am not acquainted with the detailed specific problem, but
a working solution would look similar and this is elegant and easy to read
and understand.

Not to mention that having a comprehensive library of XPath functions is
both powerful and elegant as it provides a set of basic building blocks for
potentially unlimited number and scope of problems.


HTH,
Dimitre

On Tue, Nov 24, 2020 at 8:03 PM Graydon graydon@xxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> On Wed, Nov 25, 2020 at 03:30:12AM -0000, Dimitre Novatchev
> dnovatchev@xxxxxxxxx scripsit:
> > > So if I have a sequence of maps, such as one gets from using
> > > collection() with the metadata flag set in Saxon, and I want to
> > > serialize the result just to see what is in there, I'd like to be
> > > able to use:
> >
> > Demonstrated how to do this in pure XPath  7 years ago at the Balisage
> > 2013 conference:
> >
> >
>
https://www.balisage.net/Proceedings/vol10/print/Novatchev01/BalisageVol10-No
vatchev01.html#d240124e851
>
> <xsl:sequence select="
>   $wordArchive !
>   ('&lt;entry>' || (map:for-each(., function ($k, $x) {
>     if ($k eq 'fetch') then
>       ''
>     else
>       concat('&lt;', $k, '>') || $x || concat('&lt;/', $k, '>')
>   })) => string-join('') || '&lt;/entry>') ! parse-xml(.)" />
>
> works, but while this is doubtless a question of aesthetic bias I don't
> consider this solution more elegant than (or preferable to) the XSLT
> version.
>
> --
> Graydon Saunders  | graydonish@xxxxxxxxx
> CC&s oferC)ode, C0isses swC! mC&g.
> -- Deor  ("That passed, so may this.")

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.