What is XSLT?
XSLT, which stands for eXtensible
Stylesheet Language: Transformations, is a language
which, according to the very first sentence in the specification (found at http://www.w3.org/TR/xslt), is
primarily designed for transforming one XML document into another. However,
XSLT is more than capable of transforming XML to HTML and many other text-based
formats, so a more general definition might be as
XSLT is a language for
transforming the structure of an XML document.
Why should you want to do that? In order to answer this
question properly, we first need to remind ourselves why XML has proved such a
success and generated so much excitement.
Why Transform XML?
XML is a simple, standard way to interchange structured
textual data between computer programs. Part of its success comes because it is
also readable and writable by humans, using
nothing more complicated than a text editor, but this doesn't alter the fact
that it is primarily intended for communication between software systems. As
such, XML satisfies two compelling requirements:
Separating data from presentation. The need to separate information (such as a weather forecast) from details of
the way it is to be presented on a particular device. This need is becoming
ever more urgent as the range of internet-capable devices grows. Organizations
that have invested in creating valuable information sources need to be able to
deliver them not only to the traditional PC-based web browser (which itself now
comes in many flavors), but also to TV sets and WAP phones, not to mention the
continuing need to produce print-on-paper.
Transmitting data between applications. The need to transmit information (such as orders
and invoices) from one organization to another without investing in bespoke
software integration projects. As electronic commerce gathers pace, the amount
of data exchanged between enterprises increases daily and this need becomes
ever more urgent.
Of course, these two ways of using XML are not mutually
exclusive. An invoice can be presented on the screen as well as being input to
a financial application package, and weather forecasts can be summarized,
indexed, and aggregated by the recipient instead of being displayed directly.
Another of the key benefits of XML is that it unifies the worlds of documents
and data, providing a single way of representing structure regardless of
whether the information is intended for human or machine consumption. The main
point is that, whether the XML data is ultimately used by people or by a
software application, it will very rarely be used directly in the form it
arrives: it first has to be transformed into something else.
In order to communicate with a human reader, this something
else might be a document that can be displayed or printed: for example an HTML
file, a PDF file, or even audible sound. Converting XML to HTML for display is
probably the most common application of XSLT today, and it is the one I will
use in most of the examples in this book. Once
you have the data in HTML format, it can be displayed on any browser.
In order to transfer data between different applications we
need to be able to transform data from the data model used by one application
to the model used in another. To load the data into an application, the
required format might be a comma-separated-values file, a SQL script, an HTTP
message, or a sequence of calls on a particular programming interface.
Alternatively, it might be another XML file using a different vocabulary from
the original. As XML-based electronic commerce becomes widespread, so the role
of XSLT in data conversion between applications also becomes ever more
important. Just because everyone is using XML does not mean the need for data
conversion will disappear. There will always be multiple standards in use. For example, the newspaper industry is
likely to use different formats for exchanging news articles from the format
used in the TV industry. Equally, there will always be a need to do things like
extracting an address from a purchase order and adding it to an invoice. So
linking up enterprises to do e-Commerce will increasingly become a case
of defining how to extract and combine data from one set of XML documents to
generate another set of XML documents: and XSLT is the ideal tool for the job.
At the end of this chapter we will come back to specific
examples of when XLST should be used to transform XML. For now, I just wanted
to establish just a general feel for the importance and usefulness of
transforming XML. Before we move on to discuss XSLT in more detail and have a
first look at how it works, let's take a look at an example that clearly
demonstrates the variety of formats to which we can transform XML, using XSLT.
An Example: Transforming Music
There is an excellent registry of XML vocabularies and
schemas at http://www.xml.org/xmlorg_registry/index.shtml.
If you look there, you will find
at least three different XML schemas for describing music; and if you follow
the links, you will find several more. These were all invented with different
purposes in mind: a markup language used by a publisher for printing sheet
music has different requirements from one designed to let you listen to the
music from a browser. MusicML, for example, is oriented to displaying music
notation graphically; ChordML is designed for encoding the harmonic
accompaniment to vocal lyrics, while the much more comprehensive Music Markup
Language (MML) from the University of Pretoria is designed for serious
musicological analysis, embracing Eastern and African as well as Western
So you could use XSLT to process marked-up music in many
You could use XSLT to convert music from one of these
representations to another, for example from MusicML to MML.
You could use XSLT to convert music
from any of these representations into visual music notation, by generating the
XML-based vector graphics format SVG.
You could use XSLT to play the music
on a synthesizer, by generating a MIDI (Musical Instrument Digital Interface)
You could use XSLT to perform a
musical transformation, such as transposing the music into a different key.
You could use XSLT to extract the
lyrics, into HTML or into a text-only XML document.