OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

docbook-apps message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [docbook-apps] Duplicate IDs mess up FO TOC


Here is a solution that will appear in the forthcoming Fourth Edition of my 
book (no release date yet).

The object.id template is used to generate the output id attribute as well 
as the link for any element.  As long as it produces consistent output for 
the same element, your links should work.

In this customization, it counts the number of preceding elements with the 
same id.  If the count is greater than zero, then it appends the count to 
the id value.  It works with both @id and @xml:id for db5 documents.

<xsl:template name="object.id">
  <xsl:param name="object" select="."/>

  <xsl:variable name="id" select="@id"/>
  <xsl:variable name="xid" select="@xml:id"/>

  <xsl:variable name="preceding.id"
        select="count(preceding::*[@id = $id])"/>

  <xsl:variable name="preceding.xid"
        select="count(preceding::*[@xml:id = $xid])"/>

  <xsl:choose>
    <xsl:when test="$object/@id and $preceding.id != 0">
      <xsl:value-of select="concat($object/@id, $preceding.id)"/>
    </xsl:when>
    <xsl:when test="$object/@id">
      <xsl:value-of select="$object/@id"/>
    </xsl:when>
    <xsl:when test="$object/@xml:id and $preceding.xid != 0">
      <xsl:value-of select="concat($object/@id, $preceding.xid)"/>
    </xsl:when>
    <xsl:when test="$object/@xml:id">
      <xsl:value-of select="$object/@xml:id"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="generate-id($object)"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

Bob Stayton
Sagehill Enterprises
DocBook Consulting
bobs@sagehill.net


----- Original Message ----- 
From: "Claus Rasmussen" <claus@webclaus.com>
To: <docbook-apps@lists.oasis-open.org>
Sent: Wednesday, January 17, 2007 7:02 AM
Subject: [docbook-apps] Duplicate IDs mess up FO TOC


> Hi folks,
>
> I'm reusing quite a few sections using xincludes and my table of contents
> gets confused when generating PDF output: It can not correctly determine 
> the
> page number of all sections since multiple sections have the same ID (the
> ones that are reused).
>
> I'm fully aware that duplicate ID attributes in my aggregated document 
> makes
> it invalid, but ignoring that for a while, would any of you know how to
> solve this problem and get a nice printed TOC?
>
> Of course there's the laborous approach suggested by Bob
> (http://www.sagehill.net/docbookxsl/DuplicateIDs.html) but that's not 
> really
> feasible in this case.
>
> Best,
> Claus
>
> -- 
> http://techwriter.dk/
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: docbook-apps-unsubscribe@lists.oasis-open.org
> For additional commands, e-mail: docbook-apps-help@lists.oasis-open.org
>
>
> 




[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]