[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
|