|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Bibliography author repetition handling
Eliot didn't I say "you might prefer a mode"? :-)
Just to remark I agree with your proposal to prefer modes over
parameters for this kind of thing -- most of the time.
This is a case where the only difference between the two pathways over
bibl contents are identical except for a single element ... since
bibl/* includes a lot, that means a fair amount of 'mode overhead' to
handle the single difference.
For that reason I might be willing to put up with an xsl:choose here,
or functional equivalent ...
<xsl:template match="bibl/author[1]">
<xsl:param name=brepeatb tunnel=byesb select=bfalse()b/>
<xsl:apply-templates mode="repeating" select=".[$repeat]"/>
<xsl:if test="not($repeat)">
...
</xsl:if>
</xsl:template>
(Okay, I might leave a comment to help.)
Cheers, Wendell
On Mon, Oct 9, 2017 at 11:13 AM, Eliot Kimber ekimber@xxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> No argument with Wendellbs general solution, just one small coding style
twiddle:
>
> Instead of this:
>
> <xsl:apply-templates select="current-group() except .">
> <xsl:with-param tunnel="yes" name="repeat" select="true()"/>
> </xsl:apply-templates>
>
> I would probably use a distinct mode for the repeated items:
>
> <xsl:apply-templates select="current-group() except ."
mode=brepeated-bib-itemsb/>
>
> Ibve come to accept that preferring templates and modes over passing state
is the best XSLT style.
>
> All the items that have no difference in behavior in the two modes can
simply match in both modes:
>
> <xsl:template match=bbiblb mode=b#default repeated-bib-itemsb>
> <xsl:apply-templates mode=b#current-modeb/>
> </xsl:template>
>
> Otherwise therebs going to have to be a choose instruction to check the
brepeatb parameter:
>
> <xsl:template b&>
> <xsl:param name=brepeatb tunnel=byesb select=bfalse()b/>
> <xsl:choose>
> <xsl:when test=b$repeatb>
> b&
> </xsl:when>
> <xsl:otherwise>
> b&
> </xsl:otherwise>
> </choose>
> </xsl:template>
>
> Better to put the choice in the mode and/or match expression.
>
> Cheers,
>
> E.
> --
> Eliot Kimber
> http://contrext.com
>
>
>
> On 10/9/17, 9:58 AM, "Wendell Piez wapiez@xxxxxxxxxxxxxxx"
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> Hi,
>
> I think Chuck wants group-adjacent.
>
> Chuck, what Martin is hinting is that rather than testing each bibl
> (each as you match it) to see whether it is a "repeat" or not, you
> first group all the bibls by their (analytic) author, then every
> member of the group after the first is a repeat.
>
> (Define "repeat" as "bibl that should get '----' instead of a lead
> author's name by virtue of its having the same lead author as its
> immediate predecessor".)
>
> This means that most of your groups will have only one member, but
> once in a while (when authors are repeated in runs) you will have a
> group of two or even more members, only the first of which is not a
> repeat.
>
> Due to a design quirk in XSLT (semantics of "." inside groups), you
> can code this fairly elegantly:
>
> <xsl:for-each-group select="bibl" group-adjacent="gimme-author()">
> <!-- apply templates to the first member -->
> <xsl:apply-templates select=".">
> <!-- apply templates to the rest w/ a param -->
> <xsl:apply-templates select="current-group() except .">
> <xsl:with-param tunnel="yes" name="repeat" select="true()"/>
> </xsl:apply-templates>
> </xsl:for-each-group>
>
> Notes:
>
> * No element is created for the group since the grouping is only to
> sort them into categories.
>
> * gimme-author() will be whatever XPath (path or other expression)
> indicates the value to be grouped on (i.e. the leading author name
> however normalized).
>
> * inside the group, "." refers only to the first member of the group,
> so "current-group() except ." returns all the others.
>
> * Leaving it to you to figure out what to do at the receiving end with
> the Boolean parameter $repeat ... although I've indicated
> "tunnel='yes'" to leave another clue as to how it might be done. Or
> instead of a parameter you could also use a mode here to distinguish
> between handling the normal cases and the repeat cases. (Presumably
> they are the same except for how they treat that author.)
>
> * group-by will have a similar effect to group-adjacent but only if
> the nodes are already in their final sorted order; if there is some
> anomaly in the listing, group-adjacent is more robust (and will
> reflect that anomaly not reorder around it).
>
> It's been a few days, so you may already have tackled this. Still it's
> a fun little problem.
>
> Cheers, Wendell
>
>
>
> On Wed, Oct 4, 2017 at 4:18 AM, Martin Honnen martin.honnen@xxxxxx
> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> > Am 04.10.2017 um 08:25 schrieb Charles Muller
acmuller@xxxxxxxxxxxxxxx:
> >>
> >> In a TEI <biblStruct> bibliography that uses
biblStruct/*/author/surname
> >> (etc), I have managed to write the code that checks if the author
name in
> >> the prior <biblStruct> is the same, in which case the output is ---.
rather
> >> than the author's name. It works fine, but I'm running into a problem
where
> >> there the first author name is the same as that of the prior
<biblStruct>
> >> entry, but there are also multiple authors, in which case the full
name
> >> should be printed out.
> >>
> >> I thought that one way I might resolve this is to test if the number
of
> >> authors in the prior entry is the same as this one, but I can't get
it to
> >> work. I also don't know if this is even the best way of handling
this. The
> >> XML is like this: (present output here:
> >> http://www.acmuller.net/articles-shisou.html)
> >
> >
> > To me this sounds like a grouping problem where you want to group
your
> > biblStruct elements with a composite key mad up of analytic/author, I
am not
> > sure whether you want group-adjacent or group-by.
> >
> >
>
>
>
> --
> Wendell Piez | http://www.wendellpiez.com
> XML | XSLT | electronic publishing
> Eat Your Vegetables
> _____oo_________o_o___ooooo____ooooooo_^
>
>
>
>
--
Wendell Piez | http://www.wendellpiez.com
XML | XSLT | electronic publishing
Eat Your Vegetables
_____oo_________o_o___ooooo____ooooooo_^
|
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
|

Cart








