OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   RE: [xml-dev] Rethinking namespaces, attribute remapping(wasRe:[xml-dev]

[ Lists Home | Date Index | Thread Index ]

On Fri, 2002-09-27 at 19:26, Didier PH Martin wrote:

> Didier replies:
> If for each domain language I have to use a different stylesheet then I
> do not re-enforce re-use of the existing stylesheets. It sounds like a
> quick fix but not as a sound long term solution. 

OK, here is a generic stylesheet to tranform internal HLinks into XLinks
(could easily be adapted for external ones too):

Source:

<html xmlns="http://www.w3.org/1999/xhtml";
xmlns:hlink="http://www.w3.org/2002/06/hlink";
xmlns:vdv="http://eric.van-der-vlist.com/whatever";>
<head>
<hlink:hlink namespace="http://www.w3.org/1999/xhtml";
       element="img"
       locator="@src"
       effect="embed"
       actuate="onLoad"
       onFailure="warn"/>
</head>
<body>
<br vdv:foo="bar"/>
<img src="whatever" vdv:foo="bar"/>
</body>
</html>

XSLT (could easily be adapted to external HLinks):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
  xmlns:xhtml="http://www.w3.org/1999/xhtml";
        xmlns:hlink="http://www.w3.org/2002/06/hlink";
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; >

        <xsl:template match="@*">
                <xsl:param name="hlink"/>
                <xsl:if test="not(concat('@', name()) =
$hlink/@locator)">
                        <xsl:copy>
                                <xsl:apply-templates/>
                        </xsl:copy>
                </xsl:if>
        </xsl:template>

        <xsl:template match="*">
                <xsl:copy>
                        <xsl:variable name="hlink"
select="/xhtml:html/xhtml:head/hlink:hlink[@element=local-name(current()) and @namespace=namespace-uri(current())]"/>
                        <xsl:apply-templates select="$hlink/@*"
mode="hlink">
                                <xsl:with-param name="node" select="."/>
                        </xsl:apply-templates>
                        <xsl:apply-templates select="@*">
                                <xsl:with-param name="hlink"
select="$hlink"/>
                        </xsl:apply-templates>
                        <xsl:apply-templates/>
                </xsl:copy>
        </xsl:template>
        
        <xsl:template match="@*" mode="hlink"/>
        <xsl:template match="@element" mode="hlink">
                <xsl:attribute name="xlink:type"
namespace="http://www.w3.org/1999/xlink";>
                        <xsl:text>simple</xsl:text>
                </xsl:attribute>
        </xsl:template>
        <xsl:template match="@effect" mode="hlink">
                <xsl:attribute name="xlink:show"
namespace="http://www.w3.org/1999/xlink";>
                        <xsl:value-of select="."/>
                </xsl:attribute>
        </xsl:template>
        <xsl:template match="@actuate" mode="hlink">
                <xsl:attribute name="xlink:actuate"
namespace="http://www.w3.org/1999/xlink";>
                        <xsl:value-of select="."/>
                </xsl:attribute>
        </xsl:template>
        <xsl:template match="@locator" mode="hlink">
                <xsl:attribute name="xlink:href"
namespace="http://www.w3.org/1999/xlink";>
                        <xsl:value-of select="."/>
                </xsl:attribute>
        </xsl:template>
        <xsl:template match="@locator[starts-with(., '@')]"
mode="hlink">
          <xsl:param name="node"/>
                <xsl:attribute name="xlink:href"
namespace="http://www.w3.org/1999/xlink";>
                        <xsl:value-of select="$node/@*[name() =
substring-after(current(),
'@')]"/>
                </xsl:attribute>
        </xsl:template>

<!-- more attributes to be defined -->

</xsl:stylesheet>

Result:

vdv@ibook:~/repros/libxslt$ xslt hlink.xml hlink.xsl 
using libxslt
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml";
xmlns:hlink="http://www.w3.org/2002/06/hlink";
xmlns:vdv="http://eric.van-der-vlist.com/whatever";>
<head>
<hlink:hlink namespace="http://www.w3.org/1999/xhtml"; element="img"
locator="@src" effect="embed" actuate="onLoad" onFailure="warn"/>
</head>
<body>
<br vdv:foo="bar"/>
<img xmlns:xlink="http://www.w3.org/1999/xlink"; xlink:type="simple"
xlink:href="whatever" xlink:show="embed" xlink:actuate="onLoad"
vdv:foo="bar"/>
</body>
</html>


Enjoy,

Eric

 

-- 
Rendez-vous à Paris.
                          http://www.technoforum.fr/integ2002/index.html
------------------------------------------------------------------------
Eric van der Vlist       http://xmlfr.org            http://dyomedea.com
(W3C) XML Schema ISBN:0-596-00252-1 http://oreilly.com/catalog/xmlschema
------------------------------------------------------------------------





 

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS