W3C home > Mailing lists > Public > public-qt-comments@w3.org > May 2004

RE: [Serial] additional last call comment about xml:lang

From: Michael Kay <mhk@mhk.me.uk>
Date: Thu, 27 May 2004 11:56:17 +0100
To: "'Martin Duerst'" <duerst@w3.org>, <public-qt-comments@w3.org>
Cc: <w3c-i18n-ig@w3.org>, "'Liam Quin'" <liam@w3.org>
Message-Id: <20040527105650.3F4D0A0D13@frink.w3.org>

Yes, this code looks correct.

Michael Kay 

> -----Original Message-----
> From: public-qt-comments-request@w3.org 
> [mailto:public-qt-comments-request@w3.org] On Behalf Of Martin Duerst
> Sent: 27 May 2004 07:26
> To: Michael Kay; public-qt-comments@w3.org
> Cc: w3c-i18n-ig@w3.org; 'Liam Quin'
> Subject: RE: [Serial] additional last call comment about xml:lang
> 
> 
> At 08:47 04/05/26 +0100, Michael Kay wrote:
> 
> > > Hello Michael,
> > >
> > > Are you saying that this can indeed be done with a single 
> invocation
> > > of an XSLT implementation, with a single stylesheet? Your use of
> > > "pre-processing phase" and so on in your previous mail wasn't
> > > totally clear on this, at least not for me.
> >
> >Yes, it can all be done within a single transformation in a single
> >stylesheet.
> 
> This sounds great!
> 
> > > If this is true, it would be very nice, and I would 
> assume that our
> > > WG would then be very happy with the result. For our 
> reference, can
> > > you please either point to the section in the spec where this
> > > multi-pass thing is described, or can you resend the code in
> > > your earlier mail with some framework code added that shows how
> > > to define the various passes?
> >
> >There's a simple example showing how temporary trees can be 
> used to support
> >multi-phase transformations in section 9.4 of the spec:
> >
> >http://www.w3.org/TR/xslt20/#temporary-trees
> >
> >I'm afraid I'm too busy today to do a worked example for you.
> 
> Okay, I took this example, and the code fragments that you sent
> earlier, and put something together below. I'd appreciate if you
> could check it. I'm not sure I got everything right, in particular
> all the modes.
> 
> How to create a stlyesheet that cleanly copies xml:lang:
> [assuming for simplicity that all xml:lang information
> is comming from the source, not from the stylesheet, and
> that only whole elements are transferred, not independent
> textual pieces]
> [I'm using a tree-pass solution; this could be done in
> many cases as a two-pass solution]
> 
> - Start with your stylesheet.
> - Make sure that on all elements, xml:lang is copied.
> - Assumes that the main mode for the original stylesheet
>    is the default mode.
> 
> 
> <xsl:stylesheet
>    version="2.0"
>    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> 
> <xsl:template match="*" mode="expandXmlLang">
>    <xsl:copy>
>      <xsl:copy-of select="@* | 
> ancestor-or-self::*/@xml:lang[last()]"/>
>      <xsl:apply-templates mode="expandXmlLang"/>
>    </xsl:copy>
> </xsl:template>
> 
> <xsl:template match="*" mode="cleanXmlLang">
>    <xsl:copy>
>      <xsl:copy-of select="@* except @xml:lang[. =
> ancestor::*/@xml:lang[last()]]"/>
>      <xsl:apply-templates mode="cleanXmlLang"/>
>    </xsl:copy>
> </xsl:template>
> 
> <!-- rest of your stylesheet here or somewhere -->
> 
> <xsl:variable name="xmlLangExpanded">
>    <xsl:apply-templates select="/" mode="expandXmlLang"/>
> </xsl:variable>
> 
> <xsl:variable name="processedMain">
>    <xsl:apply-templates select="$xmlLangExpanded" mode="#default"/>
> </xsl:variable>
> 
> <xsl:template match="/">
>    <xsl:apply-templates select"$processedMain" mode="cleanXmlLang"/>
> <xsl:template>
> </xsl:stylesheet>
> 
> 
> Regards,     Martin.
> 
Received on Thursday, 27 May 2004 06:56:50 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 27 March 2012 18:14:33 GMT