Well, if you mean using xml:base to detect
XIncluded content, that could certainly work. It wouldn't work for the
duplicate ids coming from a bibliography collection, which was the topic of this
thread, because XInclude is not used there. The stylesheet directly opens
the database file and processes elements from it.
I'm not sure if there would always be an "original"
one, though. A chapter could have all of its content XIncluded, no?
----- Original Message -----
Sent: Wednesday, April 02, 2008 6:02
AM
Subject: Re: [docbook-apps] Duplicate IDs
mess up FO TOC
While being on this topic,
Bob
don't you think that checking the xmlbase attribute (maybe there is a clever
algorithm hidden) to discover if the id is the original one or an included
one. Your snippet takes the first one as the original one which is not always
the case.
Do you see what I mean? Do you think it is achievable
using the xmlbase attribute?
Regards, Mimil
On Wed, Apr 2, 2008 at 2:49 PM, Mimil Mimil < mimilowns@gmail.com> wrote:
Hello
Bob,
I think I discovered a little bug in the XML snippet you made.
On the test dealing with @xml:id you made a concat with @id instead of
@xml:id
<xsl:when test="$object/@xml:id and
$preceding.xid != 0">
<xsl:value-of
select="concat($object/@xml:id, $preceding.xid)"/>
</xsl:when>
Regards, Mimil
On Wed, Jan 17, 2007 at 7:17 PM, Bob Stayton < bobs@sagehill.net>
wrote:
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
|