xsl-list
[Top] [All Lists]

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

2009-04-30 10:49:27
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/


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>