RE: [xsl] How to merge translated XML files with the same IDs

Subject: RE: [xsl] How to merge translated XML files with the same IDs
From: "Sree" <pdx009@xxxxxxxxx>
Date: Thu, 30 Apr 2009 08:03:49 -0700
That should be the best approach to distinguish the IDs on merge.
BTW, how you are handling the external Cross references (Across Books)?
Thanks,
Sreeni

-----Original Message-----
From: Michael M|ller-Hillebrand [mailto:mmh@xxxxxxxxxxxxx]
Sent: Thursday, April 30, 2009 7:49 AM
To: XSL-List
Subject: [xsl] How to merge translated XML files with the same IDs

Dear experts,

There is a XML document instance using unique IDs for internal cross-
references:

<doc language="en">
   <title id="id003">Wonderful World</title>
   <para>...</para>
   <para>... see <xref idref="id003" format="page" />.</para>
</doc>

Now assume this document is translated into many languages and in the
end all those documents should be merged into a single XML document
for publishing.

<book>
   <doc language="en">
   ...
   </doc>
   <doc language="de">
   ...
   </doc>
   <doc language="zh">
   ...
   </doc>
</book>

Since the translators do not touch the IDs we suddenly would have many
duplicate IDs in the document. I already learned the using doc() it is
possible to access XML files with the same IDs, but of course the
resulting document would not be valid against the DTD.

My approach would be to prefix every @id and @idref with the (unique)
@language of the <doc> element like this:

<xsl:template match="@idref | @id">
   <xsl:attribute name="{name()}">
     <xsl:value-of select="concat(ancestor::doc/@language, '_', .)"/>
   </xsl:attribute>
</xsl:template>

Or is there a more elegant way? I will be using XSLT 2.0.

Thanks,

- Michael M|ller-Hillebrand

--
_______________________________________________________________
Michael M|ller-Hillebrand: Dokumentation Technology
Adobe Certified Expert, FrameMaker
Consulting and Training, FrameScript, XML/XSL, Unicode
Blog [de]: http://cap-studio.de/

Current Thread