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

Re: Bibliography author repetition handling

Subject: Re: Bibliography author repetition handling
From: "Wendell Piez wapiez@xxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Mon, 9 Oct 2017 15:35:25 -0000
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_^

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.