文芸船

HTML4.01変換XSLT

はじめに

 従前まで、当WebサイトはXHTML5を標準として、application/xhtml+xmlに対応しないブラウザにはHTML4.01に自動変換して提供していましたが、にInternet Explorler 8のサポートが終了したことを期に、当サイトのHTML4.01提供を終了することにしました。

 今となっては無用の長物かもしれませんが、せっかくなので自動変換に使用していたXSLTを公開します。従前はセキュリティ等を色々考えて非公開としていたものです。

XSLTコード

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:htm="http://www.w3.org/1999/xhtml">
<xsl:output method="html"
encoding="UTF-8"
version="4.01"
indent="no"
doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system="http://www.w3.org/TR/html4/strict.dtd"/>

<xsl:template match="htm:head">
<xsl:element name="{local-name()}">
<xsl:attribute name="profile">http://example.com/metaprof</xsl:attribute>
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>

<xsl:template match="htm:meta[@itemprop='dateCreated']">
<xsl:element name="{local-name()}">
<xsl:attribute name="name">dcterms.created</xsl:attribute>
<xsl:attribute name="content"><xsl:value-of select="@content"/></xsl:attribute>
</xsl:element>
</xsl:template>

<xsl:template match="htm:meta[@itemprop='dateModified']">
<xsl:element name="{local-name()}">
<xsl:attribute name="name">dcterms.modified</xsl:attribute>
<xsl:attribute name="content"><xsl:value-of select="@content"/></xsl:attribute>
</xsl:element>
</xsl:template>

<xsl:template match="htm:meta[@itemprop='keywords']">
<xsl:element name="{local-name()}">
<xsl:attribute name="name">keywords</xsl:attribute>
<xsl:attribute name="content"><xsl:value-of select="@content"/></xsl:attribute>
</xsl:element>
</xsl:template>

<xsl:template match="htm:link[@itemprop='relatedLink']">
<xsl:element name="{local-name()}">
<xsl:attribute name="rel">relation</xsl:attribute>
<xsl:attribute name="href"><xsl:value-of select="@href"/></xsl:attribute>
</xsl:element>
</xsl:template>

<xsl:template match="htm:dd[htm:meta]/htm:span">
<xsl:element name="{local-name()}">
<xsl:attribute name="title"><xsl:value-of select="following-sibling::htm:meta[@itemprop='latitude']/@content"/>,<xsl:value-of select="following-sibling::htm:meta[@itemprop='longitude']/@content"/></xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>

<xsl:template match="htm:time[parent::htm:article]">
<xsl:element name="p">
<xsl:attribute name="class"><xsl:value-of select="local-name()"/></xsl:attribute><xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>

<xsl:template match="htm:figcaption|htm:canvas">
<xsl:element name="p"><xsl:apply-templates select="node()"/></xsl:element>
</xsl:template>

<xsl:template match="htm:section|htm:aside|htm:time|htm:span[@itemprop and @itemprop!='name']|htm:span[@itemtype='http://schema.org/Person']/htm:span|@datatype">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>

<xsl:template match="htm:article|htm:header|htm:nav|htm:figure">
<xsl:element name="div">
<xsl:attribute name="class"><xsl:value-of select="local-name()"/></xsl:attribute><xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>

<xsl:template match="@xml:lang">
<xsl:attribute name="lang"><xsl:value-of select="."/></xsl:attribute>
</xsl:template>

<xsl:template match="node()[@itemtype='http://schema.org/WebPage']/@itemid|@itemid[contains(.,'/')]"/>

<xsl:template match="@itemid">
<xsl:attribute name="id"><xsl:value-of select="."/></xsl:attribute>
</xsl:template>

<xsl:template match="@itemprop[parent::htm:meta]|@property[parent::htm:meta]">
<xsl:attribute name="name"><xsl:value-of select="."/></xsl:attribute>
</xsl:template>

<xsl:template match="@itemprop[parent::htm:link]">
<xsl:attribute name="rel"><xsl:value-of select="."/></xsl:attribute>
</xsl:template>

<xsl:template match="@content[not(parent::htm:meta)]|@itemscope|@itemtype|@itemprop|@prefix|@property|@resource|@translate|htm:time/@datetime|htm:dd/htm:meta|htm:dd[htm:meta]/text()|htm:section/text()|htm:aside/text()"/>

<xsl:template match="htm:*">
<xsl:element name="{local-name()}"><xsl:apply-templates select="@*|node()"/></xsl:element>
</xsl:template>

<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>

</xsl:stylesheet>
文芸船profile & mail