Re: [xsl] improving performance in creating ids

Subject: Re: [xsl] improving performance in creating ids
From: "Wendell Piez wapiez@xxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 23 Apr 2019 21:40:37 -0000
Oops, hit button too soon -- you'll see the error there.

I leave scoping the correct count as an exercise, but it's in there
somewhere! :-)

Cheers, Wendell

On Tue, Apr 23, 2019 at 5:39 PM Wendell Piez <wapiez@xxxxxxxxxxxxxxx> wrote:
>
> Hi again,
>
> Also note if we had a key we would need no variable --
>
> <xsl:value-of select="local-name() || '-'"/>
> <xsl:number level="any" from="*[@id]" count="key('elem-by-name',local-name())"/>
>
> which suggests we could also use the third argument of key() ...
>
> <xsl:value-of select="local-name() || '-' ||
> count(key('elems-by-name',local-name(),ancestor::*[exists(@id)][1]))"/>
>
> still not tested -- but ought to work, syntax errors aside --
>
> Cheers, Wendell
>
> On Tue, Apr 23, 2019 at 5:31 PM Wendell Piez <wapiez@xxxxxxxxxxxxxxx> wrote:
> >
> > Hey Pieter,
> >
> > If performance were the issue, I might try factoring out the ID
> > labeling into a completely separate pass, in order (for example) to
> > implement it as a sibling traversal, passing parameters forward to
> > increment the ID values. (If your numbering is fancy, for example
> > scoping the increment to the element type as well as the ancestor, you
> > might have to pass a map forward.) I think that ought to be pretty
> > fast, plus it separates this logic from the other logic of the XSLT.
> > It's essentially like treating the XSLT engine like an overpowered SAX
> > parser. (Not that I would know how to make one of those.)
> >
> > But this is only if xsl:number wasn't doing it, after I tried
> > something like what Martin H shows with plain old templates.
> >
> > <xsl:variable name="ilk" select="local-name()"/>
> > <xsl:value-of select="$ilk || '-'"/>
> > <xsl:number level="any" from="*[@id]" count="*[local-name() eq $ilk]"/>
> >
> > -- untested --
> >
> > Cheers, Wendell
> >
> > On Tue, Apr 23, 2019 at 10:57 AM Martin Honnen martin.honnen@xxxxxx
> > <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> > >
> > > On 23.04.2019 16:28, Pieter Lamers pieter.lamers@xxxxxxxxxxxx wrote:
> > >
> > > > Thanks for your quick reply. the node identity comparison helped quite a
> > > > bit, although I am still around a minute for a full book of ids. I am
> > > > not sure how xsl:number would help here, and what kind of performance
> > > > win it would give over count(). I tried something with a nested
> > > > transformation, but what should I feed it?
> > > >
> > > >      <xsl:number select="*[last()]"/>
> > > > works (given a set of preceding nodes) but it is slightly slower than a
> > > > count() in the xquery. Maybe I should be using xsl:number differently?
> > >
> > >
> > > It is difficult for me to suggest that without knowing the XML input
> > > structure and whether you want to generate that id based on a count or
> > > numbering only for certain nodes or some particular element type. In
> > > general if I wanted to delegate counting to xsl:number similar to your
> > > function I would define a template in a mode for that e.g.
> > >
> > >     <xsl:template match="*" mode="number">
> > >        <xsl:number level="any" from="*[@id]"/>
> > >     </xsl:template>
> > >
> > > and then, where you need that number, you would use e.g.
> > >
> > >     <xsl:apply-templates select="." mode="number"/>
> > >
> > > Both the template or the or the select of the apply-templates can of
> > > course be adapted to more particular needs.
> > >
> > > As for being more efficient that using count, that then depends on the
> > > implementation but I would think there is some optimization to be
> > > expected in an XSLT processor for xsl:number.
> > > 
> >
> >
> >
> > --
> > ...Wendell Piez... ...wendell -at- nist -dot- gov...
> > ...wendellpiez.com... ...pellucidliterature.org... ...pausepress.org...
> > ...github.com/wendellpiez... ...gitlab.coko.foundation/wendell...
>
>
>
> --
> ...Wendell Piez... ...wendell -at- nist -dot- gov...
> ...wendellpiez.com... ...pellucidliterature.org... ...pausepress.org...
> ...github.com/wendellpiez... ...gitlab.coko.foundation/wendell...



-- 
...Wendell Piez... ...wendell -at- nist -dot- gov...
...wendellpiez.com... ...pellucidliterature.org... ...pausepress.org...
...github.com/wendellpiez... ...gitlab.coko.foundation/wendell...

Current Thread