I understand the problem, but I don't have a better
solution for your situation. A link references a single id, and I'm not
clear how a template to resolve a linkend could determine which of several
duplicate ids it should reference. I suppose you could compare ancestors
until you find a common one, but that might not guarantee a unique choice.
Anyone else have ideas?
----- Original Message -----
Sent: Friday, April 04, 2008 4:35
AM
Subject: Re: [docbook-apps] Duplicate IDs
mess up FO TOC
Hello,
Indeed I was not talking about a particular case
of inclusion, just talking about the *problem* of your template when using
XInclude.
Your template considers the first id occurrence as the
original one (I mean conserving the id as is) and appends to all others a
number. So if you make links to this id it will point to the first occurrence
found and this may be not what you want. Imagine you have an appendix and
you include some parts of it within your chapters content (it avoids writing
the same things multiple times) and if in another part you make link to the
appendix content you will be redirected to the first part within the chapter
content instead of the appendix part.
This is maybe an unusual case but
if it is possible to take care of it, it will not be anymore a
problem.
Regards, Cedric,
On Wed, Apr 2, 2008 at 5:34 PM, Bob Stayton < bobs@sagehill.net> wrote:
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
|