XSL Transformations

XSL変換（、XSLT）は、W3Cにより標準化されたXML文書の変換用言語である。3つの仕様から成るXSLのうちの、ひとつの仕様である。XSLT の仕様はジェームズ・クラークを中心とした人々が設計した。XSLT と XSL-FO はDSSSLをもとにして設計された。
XSLT 1.0 は1999年11月23日にW3C勧告となり、2007年には JIS X 4169 としてJIS規格へ翻訳された。XSLT 2.0 は2007年1月23日に、3.0は2017年6月8日にW3C勧告となった。
XSLTはXML形式の文書を変換する。 による選択と検索にもとづき、XML文書全体または文書の一部に対して変換を行い、XML として出力する他、XML（整形式）ではないその他任意のテキスト形式としても出力できる。
例としては次のような応用がある。
変換の指定は関数型言語として見ることもでき、実のところチューリング完全であるため、コンピュータ・プログラムを書くようにしてどんな応用も可能である。裏返せば、その機能を十分に発揮させるためには利用者に通常のプログラミングと同様の能力と作業が必要であり、しばしばXMLに対して持たれている「プログラミングが不要」という期待を裏切るものではある。
変換の対象となるXML文書は木構造であり、XSLTによる変換は宣言的に指定される。つまり、XSLTプログラムは、変換をどう行うべきか指定する規則をいくつか集めたものからなり、この規則を再帰的に適用することによって変換を行う。
XSLT処理系はまずどの規則が適用できるかチェックし、優先順にもとづいて該当する変換を行う。
XSLTプログラムは、以下のようにXML文書の形式をとる。
<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
</xsl:stylesheet>
データ変換.
XML 形式のデータを様々な形式のデータに変換できる。ここではその例を示す。
変換前のXML
<?xml version="1.0" ?>
<persons>
 <person username="JS1">
 <name>John</name>
 <family-name>Smith</family-name>
 </person>
 <person username="MI1">
 <name>Morka</name>
 <family-name>Ismincius</family-name>
 </person>
</persons>
テンプレート関数.
XSLT はテンプレートの関数を再帰的な形で定義ができる純粋関数型言語でもある。
下記のものはテンプレート関数 codice_1である。これは、パラメーター codice_2 で指定した文字列中にある、パラメーター codice_3 で指定した部分文字列をすべて、パラメーター codice_4 で指定する文字列に置換した文字列を返す関数。これの例から以下の点が分かる。
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="String_replaceAll">
 <!-- 引数 -->
 <xsl:param name="this" select=""" />
 <xsl:param name="substring" />
 <xsl:param name="replacement" />
 <xsl:if test="not ($this=")">
 <xsl:choose>
 <!-- this に substring が含まれる場合の値 -->
 <xsl:when test="contains ($this, $substring)">
 <xsl:value-of select="substring-before ($this, $substring)" />
 <xsl:copy-of select="$replacement" />
 <xsl:call-template name="String_replaceAll"> <!-- 再帰呼び出し -->
 <xsl:with-param name="this" select="substring-after ($this, $substring)" />
 <xsl:with-param name="substring" select="$substring" />
 <xsl:with-param name="replacement" select="$replacement" />
 </xsl:call-template>
 </xsl:when>
 <!-- そうでない場合の値 -->
 <xsl:otherwise>
 <xsl:value-of select="$this" />
 </xsl:otherwise>
 </xsl:choose>
 </xsl:if>
</xsl:template>
</xsl:stylesheet> 
メディア型.
XSLTのメディア型は、「codice_17」としてに登録されており、「codice_17」または「codice_19」が望ましいMIMEタイプである。しかし、Internet Explorerなど一部のユーザーエージェントには、これらのMIMEではXSLTを認識しないものや、「codice_20」などの独自に定めたMIMEのみを認識するものも多い。