|
XSL Transformations, or XSLT, is an XML markup language used for transforming XML documents. It is the XML transformation language part of the XSL specification (the other parts being XSL-FO and XPath). As with XML and HTML, the XSLT specification is a Recommendation developed by the W3C.
To transform in this context means to apply an XSLT stylesheet to an XML document, stored as a source tree, so as to create a result tree. The result tree may be produced in XML, XHTML, HTML or any text-based format including plain text, tab- and comma-separated values, RTF and TeX. It may comprise text and markup from the XSLT stylesheet combined with parts of the incoming XML document, selected using XPath query-strings. Among many other options, the result tree may be written to an output file, transmitted over a network or simply displayed locally.
The language is declarative, i.e. an XSLT stylesheet consists of a collection of template rules which define the transformations to be performed. These template rules can be applied recursively.
The XSLT processor checks which template rules can be applied and executes the associated transformations based on a sequence of priorities.
An XSLT stylesheet is itself an XML document as the example below shows.
STX is intended as a high-speed, low memory consumption alternative to XSLT. The W3C finalised the XSLT 1.0 specification in 1999 and the XSLT 2.0 specification currently has 'Working Draft' status.
Example
Example XSLT Stylesheet:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="xml"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>test1</title>
<style type="text/css">
h1 { padding: 10px; padding-width: 100%; background-color: silver }
td, th { width: 40%; border: 1px solid silver; padding: 10px }
td:first-child, th:first-child { width: 20% }
table { width: 650px }
</style>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="domains/*">
<h1><xsl:value-of select="@ownedBy"/></h1>
<p>The following host names are currently in use at <b><xsl:value-of select="local-name(.)"/></b></p>
<table>
<tr><th>Host name</th><th>URL</th><th>Used by</th></tr>
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="host">
<xsl:variable name="url" select="normalize-space(concat('http://', normalize-space(node()), '.', local-name(..)))"/>
<tr>
<td><xsl:value-of select="node()"/></td>
<td><a href="{$url}"><xsl:value-of select="$url"/></a></td>
<xsl:apply-templates select="use"/>
</tr>
</xsl:template>
<xsl:template match="use">
<td><xsl:value-of select="."/></td>
</xsl:template>
</xsl:stylesheet>
Example of incoming XML for above stylesheet:
<?xml version="1.0" encoding="UTF-8"?>
<domains>
<sun.com ownedBy="Sun Microsystems Inc.">
<host>
www
<use>World Wide Web site</use>
</host>
<host>
java
<use>Java info</use>
</host>
</sun.com>
<w3.org ownedBy="The World Wide Web Consortium">
<host>
www
<use>World Wide Web site</use>
</host>
<host>
validator
<use>web developers who want to get it right</use>
</host>
</w3.org>
</domains>
Output XHTML that this would produce:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><meta content="text/html;charset=UTF-8" http-equiv="Content-Type" /><title>test1</title><style type="text/css">
h1 { padding: 10px; padding-width: 100%; background-color: silver }
td, th { width: 40%; border: 1px solid silver; padding: 10px }
td:first-child, th:first-child { width: 20% }
table { width: 650px }
</style></head><body>
<h1>Sun Microsystems Inc.</h1><p>The following host names are currently in use at <b>sun.com</b></p><table><tr><th>Host name</th><th>URL</th><th>Used by</th></tr>
<tr><td>
www
</td><td><a href="http://www.sun.com">http://www.sun.com</a></td><td>World Wide Web site</td></tr>
<tr><td>
java
</td><td><a href="http://java.sun.com">http://java.sun.com</a></td><td>Java info</td></tr>
</table>
<h1>The World Wide Web Consortium</h1><p>The following host names are currently in use at <b>w3.org</b></p><table><tr><th>Host name</th><th>URL</th><th>Used by</th></tr>
<tr><td>
www
</td><td><a href="http://www.w3.org">http://www.w3.org</a></td><td>World Wide Web site</td></tr>
<tr><td>
validator
</td><td><a href="http://validator.w3.org">http://validator.w3.org</a></td><td>web developers who want to get it right</td></tr>
</table>
</body></html>
External links
- Implementations
- Xalan-Java (http://xml.apache.org/xalan-j/)
- Xalan-C++ (http://xml.apache.org/xalan-c/)
- libxslt (http://xmlsoft.org/XSLT/) the XSLT C library for Gnome
- Sablotron (http://www.gingerall.com/charlie/ga/xml/p_sab.xml)
- SAXON (http://saxon.sourceforge.net/) by Michael Kay
- XT (http://www.blnz.com/xt/index.html) by James Clark
- Mozilla has native XSLT support (http://www.mozilla.org/projects/xslt/)
- X-Smiles has native XSLT support
- Tools
- A sample of XSLT Editor and Debugger (http://www.editix.com) A tool for creating and testing XSLT documents
- XSL Transformation (http://www.ultra-fluide.com/ressources/en/semark/presentation.htm) to provide markup of XML contents from external lexicons
- Netbeans IDE (http://www.netbeans.org) provides an XSLT development environment
|