- From: Eric van der Vlist <vdv@dyomedea.com>
- Date: 27 Sep 2002 20:38:21 +0200
- To: Didier PH Martin <martind@netfolder.com>
- Cc: www-tag@w3.org
On Fri, 2002-09-27 at 19:15, Didier PH Martin wrote:
> Didier replies:
> I would probably would do that myself but now we end up with something
> more complex then SGML architectural forms. Also, I didn't achieve the
> goal to write a generic linking stylesheet that I can re-use. Thus, we
> achieved something less useful than SGML+DSSSL. Is this what we call
> entropy? Degradation of the matter with time :-)
Since you seem to feel that it's an important issue, I have done the exercise and that's not *that* complex!
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
------------------------------------------------------------------------
Received on Friday, 27 September 2002 14:38:56 UTC