XSL Languages
It started with XSL and ended up with XSLT, XPath, and
XSL-FO. XSL
stands for EXtensible Stylesheet Language. The World Wide
Web Consortium (W3C) started to develop XSL because there was a need for an
XML-based Stylesheet Language.
CSS = Style Sheets for
HTML
HTML uses predefined
tags, and the meaning of each tag is well understood. The
<table> tag in HTML defines a table - and a browser knows how to
display it. Adding styles to HTML elements are simple. Telling a browser to
display an element in a special font or color, is easy with CSS.
XSL = Style Sheets for
XML
XML does not use predefined tags (we can use any tag-names we
like), and therefore the meaning of each tag is not well understood.
A <table> tag could mean an HTML table, a piece of
furniture, or something else - and a browser does not know how to display it.
XSL describes how the XML document should be displayed!
XSL - More Than a Style
Sheet Language
XSL consists of three
parts:
- XSLT - a language for transforming XML documents
- XPath - a language for navigating in XML documents
- XSL-FO - a language for formatting XML documents
XSLT Introduction
XSLT
is a language for transforming XML documents into XHTML documents or to other
XML documents. XPath is a language for navigating in XML documents.
What is XSLT?
- XSLT stands for XSL Transformations
- XSLT is the most important part of XSL
- XSLT transforms an XML document into another XML document
- XSLT uses XPath to navigate in XML documents
- XSLT is a W3C Recommendation
XSLT = XSL Transformations
XSLT is used to
transform an XML document into another XML document, or another type of
document that is recognized by a browser, like HTML and XHTML. Normally XSLT
does this by transforming each XML element into an (X)HTML element.
With XSLT you can add/remove elements and attributes to or from
the output file. You can also rearrange and sort elements, perform tests and
make decisions about which elements to hide and display, and a lot more. A
common way to describe the transformation process is to say that XSLT transforms an XML
source-tree into an XML result-tree.
How Does it Work?
In the transformation
process, XSLT uses XPath to define parts of the source document that should
match one or more predefined templates. When a match is found, XSLT will
transform the matching part of the source document into the result document.
XSLT Browsers
All major browsers have support for
XML and XSLT.
Correct Style Sheet
Declaration
The root element that
declares the document to be an XSL style sheet is <xsl:stylesheet> or
<xsl:transform>.
Note: <xsl:stylesheet>
and <xsl:transform> are completely synonymous and either can be used!
The correct way to
declare an XSL style sheet according to the W3C XSLT Recommendation is:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
or:
<xsl:transform
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
To get access to the
XSLT elements, attributes and features we must declare the XSLT namespace at
the top of the document.
The
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" points to the
official W3C XSLT namespace. If you use this namespace, you must also include
the attribute version="1.0".
Start with a Raw XML
Document
We want to transform the
following XML document ("cdcatalog.xml") into XHTML:
<?xml version="1.0"
encoding="ISO-8859-1"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
</catalog>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
</catalog>
Viewing XML Files in Firefox and Internet
Explorer: Open
the XML file (typically by clicking on a link) - The XML document will be
displayed with color-coded root and child elements. A plus (+) or minus sign
(-) to the left of the elements can be clicked to expand or collapse the
element structure. To view the raw XML source (without the + and - signs),
select "View Page Source" or "View Source" from the browser
menu.
Create an XSL Style Sheet
Then you create an XSL
Style Sheet ("cdcatalog.xsl") with a transformation template:
<?xml version="1.0"
encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Link the XSL Style Sheet
to the XML Document
Add the XSL style sheet reference to your XML document
("cdcatalog.xml"):
<?xml
version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
</catalog>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
</catalog>
If you have an XSLT compliant browser it will nicely transform your XML into XHTML.
XSLT <xsl:template> Element
An
XSL style sheet consists of one or more set of rules that are called templates.
A template contains rules to apply when a specified node is matched.
The <xsl:template>
Element
The <xsl:template> element is used to build templates.
The match attribute is used to associate a template with an XML element. The
match attribute can also be used to define a template for the entire XML
document. The value of the match attribute is an XPath expression (i.e.
match="/" defines the whole document).
Example
<?xml version="1.0"
encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td>.</td>
<td>.</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td>.</td>
<td>.</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Example Explained
Since an XSL style sheet
is an XML document, it always begins with the XML declaration: <?xml
version="1.0" encoding="ISO-8859-1"?>.
The next element, <xsl:stylesheet>, defines that this
document is an XSLT style sheet document (along with the version number and
XSLT namespace attributes).
The <xsl:template> element defines a template. The match="/" attribute associates the
template with the root of the XML source document.
The content inside the
<xsl:template> element defines some HTML to write to the output.
The last two lines
define the end of the template and the end of the style sheet.
The result from this
example was a little disappointing, because no data was copied from the XML
document to the output. In the next chapter you will learn how to use the <xsl:value-of> element to select values from the XML elements.
XSLT <xsl:value-of> Element
The <xsl:value-of> element can be used to extract the value
of an XML element and add it to the output stream of the transformation:
XSLT <xsl:for-each> Element
The XSL <xsl:for-each> element can be used to select every
XML element of a specified node-set:
Filtering the Output
We can also filter the output from the XML file by adding a
criterion to the select attribute in the <xsl:for-each> element. <xsl:for-each
select="catalog/cd[artist='Bob Dylan']">
Legal filter operators are:
- = (equal)
- != (not equal)
- < less than
- > greater than
Take a look at the adjusted XSL style sheet:
<?xml
version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body> </html> </xsl:template> </xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body> </html> </xsl:template> </xsl:stylesheet>






0 comments:
Post a Comment