Jon Allen
instructional media + magic, inc.
As presented at the JA-SIG Winter Conference Bal Harbor, Florida, December 6, 2003
Introduction to XSLT
XS
LT
, X
Path
an
d
uP
ort
al
The Abstract…
Looking for a methodology to quickly and effectively create Transformations? Interested in the basics of XSLT and Xpath, and a good way to get started? If so, this workshop is for you! We will be discussing the fundamental concepts of XSLT and Xpath, and the methodologies that have emerged from months of developing stylesheet transformations for the uPortal 2.0 project.
We will discuss the design aspects related to converting structured information in XML into device-dependent markup languages such as HTML, and WML, and the guidelines and best practices evolving from this experience. No prior XSLT experience is necessary.
XS
LT
, X
Path
an
d
uP
ort
al
Overview
• Introduction• uPortal• Basic XPath• Basic XSLT• Markup: XHTML • Cascading Style Sheets• Tools• The Creation Process• Hands-on
Introduction
XS
LT
, X
Path
an
d
uP
ort
al
Background
• Who: W3C• What: XPath and XSLT Specs.• When: 11/16/1999• Why:A need arose for a
specification to define the syntax and semantics for transforming XML documents.
XS
LT
, X
Path
an
d
uP
ort
al
References
• “The” definitivereference…• Michael Kay• Wrox Press Inc• ISBN: 1861005067
XS
LT
, X
Path
an
d
uP
ort
al
References
• Great practicalreference…• Jeni Tennison• Hungry Minds• ISBN: 0764547763
XS
LT
, X
Path
an
d
uP
ort
al
References
• Practical use oftransformationsin Java code• Eric Burke• O'Reilly & Assoc.• ISBN: 0596001436
JA-SIG’s uPortal
XS
LT
, X
Path
an
d
uP
ort
al
Use of XSLT in uPortal
• XSLT is used to render the "Structure", "Theme" and "Channels"• Structure is an XML to XML
Transformation of Abstract Layout to Structured Layout (such as Tab and Column)
• Theme is an XML to Markup Language Transformation (XHTML, WAP, etc) which renders the container for headers, navigation, channels, footers, etc.
• Channels have XML to Markup Language Transformations that render content
XS
LT
, X
Path
an
d
uP
ort
al
Structure XSLT
Tab/Col/Row
Tab/Column
Tree/Column
XSLTProcessor
User Layout XML
StructureXSLT
XML
XS
LT
, X
Path
an
d
uP
ort
al
Conceptual Structure
The Structure is XML at this point, the illustrations are representational
XS
LT
, X
Path
an
d
uP
ort
al
Theme XSLT
HTML 4.0Browser
HTML 3.2 PDA
WML Mobile Phone
XSLTProcessor
StructureXML
ThemeXSLT
XS
LT
, X
Path
an
d
uP
ort
al
Theme
XS
LT
, X
Path
an
d
uP
ort
al
Channel XSLT
Channel XML and Stylesheets
Output Streamto Device
Final Output
XS
LT
, X
Path
an
d
uP
ort
al
Final Output
XS
LT
, X
Path
an
d
uP
ort
al
Basic Architecture
FrameworkStructure XSLT
Theme XSLT
Skins - CSS
ChanneChannel XSLTl XSLT
ChanneChannel XSLTl XSLT
ChanneChannel XSLTl XSLT
XS
LT
, X
Path
an
d
uP
ort
al
Channel
• Elementary unit of presentation, defined by the IChannel interface
IChannel
User InteractionExternal Information
Channel Content(Presentation)
XS
LT
, X
Path
an
d
uP
ort
al
IChannel content must
• Be well-formed XML such as XHTML, RSS, SVG, SMIL, or a SOAP message (HTML is not well formed XML)
• Rendered by an XSL transformation using an XSL stylesheet
XS
LT
, X
Path
an
d
uP
ort
al
Framework Organization
uPortal Framework
User Interaction Presentation
Channel Channel Channel
XS
LT
, X
Path
an
d
uP
ort
al
User Layout
• User Layout is an abstract structure defining the overall content available to the user
• userLayout is a tree structure consisting of “folders” and “channels”, the later always being the leaf nodes
XS
LT
, X
Path
an
d
uP
ort
al
User Layout
C ha nn e l C ha nn e l C ha nn e l
C ha nn e l
F o ld er
F o ld er C ha nn e l
F o ld er
C ha nn e l
F o ld er
F o ld er
C ha nn e l C ha nn e l
F o ld er
U ser L ayo u t
XS
LT
, X
Path
an
d
uP
ort
al
Structure Transformation
C ha nn e l C ha nn e l C ha nn e l
C ha nn e l
F o ld er
F o ld er C ha nn e l
F o ld er
C ha nn e l
F o ld er
F o ld er
C ha nn e l C ha nn e l
F o ld er
U ser L ayo u t
Channel Channel Channel Channel
Column Channel
Tab
Channel
Tab
Channel Channel
Tab
User Layout
Column
XS
LT
, X
Path
an
d
uP
ort
al
Theme Transformation
ChannelDictionary.com
Column
ChannelBookmarks
ChannelCartoon
Column
TabJim Smith
Channel
TabFinancial Aid
Channel Channel
TabLibrary
User Layout
XS
LT
, X
Path
an
d
uP
ort
al
Compiling the Presentation
Structuretransformation
Themetransformation
userLayout
structuredLayout
HTML, WML VoiceML...
XSLT
XSLT
setRuntimeData()
renderXML()
Channels
XS
LT
, X
Path
an
d
uP
ort
al
XML
Stylesheet
XHTML: Web Browser
WML: Cell Phone
HTML: PDA
XSLTProcessor
Content Transformation
XS
LT
, X
Path
an
d
uP
ort
al
Multiple Target Devices
XS
LT
, X
Path
an
d
uP
ort
al
Skins: Cascading Stylesheets
XS
LT
, X
Path
an
d
uP
ort
al
Skin: im+m
XS
LT
, X
Path
an
d
uP
ort
al
Skin: VSAC
XS
LT
, X
Path
an
d
uP
ort
al
Skin: matrix
XS
LT
, X
Path
an
d
uP
ort
al
User Preferences
• Swappable layout and preference management modules
• Profile management module• Tab-column specific prefs. module• Skin selection
XS
LT
, X
Path
an
d
uP
ort
al
User Preferences
XS
LT
, X
Path
an
d
uP
ort
al
Publish/Subscribe
• Channel publishing document• Channel parameters
• Default values• Modification permissions• Descriptions
• Publish/Subscribe steps• Step sequence• Instructions, help
• A complex channel with multiple XSL views
XS
LT
, X
Path
an
d
uP
ort
al
uPortal Base Channel Types
XS
LT
, X
Path
an
d
uP
ort
al
Applet Channel
XS
LT
, X
Path
an
d
uP
ort
al
Image Channel
XS
LT
, X
Path
an
d
uP
ort
al
Inline Frame
XS
LT
, X
Path
an
d
uP
ort
al
Remote Channel
XS
LT
, X
Path
an
d
uP
ort
al
RSS Channel
XS
LT
, X
Path
an
d
uP
ort
al
Web Proxy Channel
XS
LT
, X
Path
an
d
uP
ort
al
XSLT Channel
XS
LT
, X
Path
an
d
uP
ort
al
Channel Controls
XS
LT
, X
Path
an
d
uP
ort
al
Channel Review
XHTML
XS
LT
, X
Path
an
d
uP
ort
al
Why XHTML?
• XSLT Stylesheets are XML documents• If you plan to output HTML, it will
reside in the template bodies of the XSLT Stylesheet, and the markup will be output as literal output.
• When the XSLT Stylesheet contains Markup, it has to be well formed
XS
LT
, X
Path
an
d
uP
ort
al
Differences with HTML 4
• Due to the fact that XHTML is an XML application, certain practices that were perfectly legal in HTML 4 must be changed.
• Documents must be well-formed• Well-formedness is a new concept introduced by
[XML]. Essentially this means that all elements must either have closing tags or be written in a special form (as described below), and that all the elements must nest.
• CORRECT: nested elements.<p>here is an emphasized <em>paragraph</em>.</p>
• INCORRECT: overlapping elements<p>here is an emphasized <em>paragraph.</p></em>
XS
LT
, X
Path
an
d
uP
ort
al
Differences with HTML 4
• Element and attribute names must be in lower case• XHTML documents must use lower case
for all HTML element and attribute names. This difference is necessary because XML is case-sensitive e.g. <li> and <LI> are different tags.
XS
LT
, X
Path
an
d
uP
ort
al
Differences with HTML 4
• In HTML 4 certain elements were permitted to omit the end tag; with the elements that followed implying closure. This omission is not permitted in XML-based XHTML. All elements must have an end tag.
• CORRECT: terminated elements<p>here is a paragraph.</p><p>here is another paragraph.</p>
• INCORRECT: unterminated elements<p>here is a paragraph.<p>here is another paragraph.
XS
LT
, X
Path
an
d
uP
ort
al
Differences with HTML 4
• All attribute values must be quoted, even those which appear to be numeric.
• CORRECT: quoted attribute values<table rows="3">
• INCORRECT: unquoted attribute values<table rows=3>
XS
LT
, X
Path
an
d
uP
ort
al
Differences with HTML 4
• XML does not support attribute minimization. Attribute-value pairs must be written in full. Attribute names such as nowrap and checked cannot occur in elements without their value being specified.
• CORRECT: unminimized attributes<td nowrap=“nowrap">
• INCORRECT: minimized attributes<td nowrap>
XS
LT
, X
Path
an
d
uP
ort
al
Differences with HTML 4
• Empty elements must either have an end tag or the start tag must end with />. For instance, <br/> or <hr></hr>.
• CORRECT: terminated empty tags<br/><hr/>
• INCORRECT: unterminated empty tags<br><hr>
Cascading Style Sheets
XS
LT
, X
Path
an
d
uP
ort
al
CSS uPortal and Skins
• uPortal uses Cascading Style Sheets to “Skin” the portal and content.
• These CSS files are optimized for a particular structure.
• For consistency channel developers should become familiar with the CSS classes that are defined for a particular structure and apply them to the markup language in their XSLT transformations.
XS
LT
, X
Path
an
d
uP
ort
al
The CSS Classes
• There is a sample “developer” channel in uPortal that describes and gives examples of the CSS classes for the Tab/Column Theme.
XS
LT
, X
Path
an
d
uP
ort
al
The CSS Channel
Basic XPath
XS
LT
, X
Path
an
d
uP
ort
al
Nodes and Node Trees
• When an application wants to operate on an XML document it builds an internal model of what the document looks like.
• This model is known as a document object model or DOM.
• In XPath and XSLT, it's called a node tree.
XS
LT
, X
Path
an
d
uP
ort
al
Types of Nodes
• Root nodes • The top of the node tree
• Element nodes • XML elements
• Attribute nodes• XML attributes
• Text nodes• Textual content in XML elements
• Comment nodes• XML comments
• Processing instruction nodes• XML processing instructions
• Namespace nodes• The in-scope namespaces on an element
R
E EEE
A T
XS
LT
, X
Path
an
d
uP
ort
al
Node Tree Example
<document><para type=“note”> content </para><para type=“warning”> content </para><para type=“warning”> content </para>
</document>
- attr ibute-type: note
- tex t-content
- e lem ent-para
- attr ibute-type: warning
- tex t-content
- e lem ent-para
- attr ibute-type: warning
- tex t-content
- e lem ent-para
- root-docum ent
documentdocument
parapara parapara parapara
warningwarning warningwarningnotenote
contentcontent contentcontentcontentcontent
XS
LT
, X
Path
an
d
uP
ort
al
XPath Definition
• XPath is a language for addressing parts of an XML document, designed to be used by XSLT.
• Example XPath:
child::para[attribute::type='warning'][position()=2]
• In English: • select the second para child of the
context node that has a type attribute with a value of warning.
XS
LT
, X
Path
an
d
uP
ort
al
type :no te
p ara
type :w arn ing
p ara
type :w arn ing
p ara
d o cu m e nt
Context node
Axis
Dissecting the Example
child::para[attribute::type='warning'][position()=2]
Axis: child::paraFilter: [attribute::type='warning']Filter: [position()=2]
XS
LT
, X
Path
an
d
uP
ort
al
type :no te
p ara
type :w arn ing
p ara
type :w arn ing
p ara
d o cu m e nt
Context node
Axis
Dissecting the Example
child::para[attribute::type='warning'][position()=2]
Axis: child::paraFilter: [attribute::type='warning']Filter: [position()=2]
Filtered
XS
LT
, X
Path
an
d
uP
ort
al
type :no te
p ara
type :w arn ing
p ara
type :w arn ing
p ara
d o cu m e nt
Context node
Axis
Dissecting the Example
child::para[attribute::type='warning'][position()=2]
Axis: child::paraFilter: [attribute::type='warning']Filter: [position()=2]
Filtered Filtered
XS
LT
, X
Path
an
d
uP
ort
al
Selected
type :no te
p ara
type :w arn ing
p ara
type :w arn ing
p ara
d o cu m e nt
Dissecting the Example
child::para[attribute::type='warning'][position()=2]
Axis: child::paraFilter: [attribute::type='warning']Filter: [position()=2]
Context node
Axis
Filtered Filtered
XS
LT
, X
Path
an
d
uP
ort
al
Types of XPaths
• Expressions:Return a value, which might be a node set that is processed or a string that is output. <xsl:when test="@type=‘warning’">
• Patterns:Either match a particular node or don't match that node.
<xsl:template match="para">
XS
LT
, X
Path
an
d
uP
ort
al
XPath Expressions
• Select Nodes<xsl:for-each select=“child::Z”>
• Conditional<xsl:if test=“position()=2”>
• Calculation<xsl:value-of select=“position()+4">
C
Z Z
C
1 42 3
XS
LT
, X
Path
an
d
uP
ort
al
Node Set Expressions
• The most common way that XSLT uses XPaths is to select node sets. These XPaths usually occur within a select attribute, for example on xsl:for–each or xsl:apply–templates, and are known as location paths.
<xsl:for-each select=“child::para”>
<xsl:apply-templates select="paragraph"/>
XS
LT
, X
Path
an
d
uP
ort
al
Location Paths
• The purpose of location paths is to select node sets from a node tree.
• Location paths can be absolute or relative• Absolute location paths
start from a known locationsuch as the root node
<xsl:for-each select=“/R/N”>
• Relative location paths start from the context node.
<xsl:for-each select=“N”>note: same as “child::N”
R
N NX Y
R
N C ontextYX
N Z
XS
LT
, X
Path
an
d
uP
ort
al
Steps
• A location path is made up of a number of steps.
• Each step takes you from a node to a node set.
• Each step is separated from the one before it with a “/”.
XS
LT
, X
Path
an
d
uP
ort
al
Steps
• Every step is made up of an axis and a node test.• The axis specifies the
direction that thestep is taken in
• The node test specifiesthe kinds of nodes thatshould be collected inthat direction.
• Within a step, the axisand the node test areseparated by a double colon “::”.
“ child :: para ”
XS
LT
, X
Path
an
d
uP
ort
al
Some Shorthand Notation
• If no axis is specified in a step, the default axis is the child axis.• Longhand select=“child::para/child::sentence”• Shorthand select=“para/sentence”
• Another important axis is the attribute axis, which takes you from the context node to the attributes of that node.• Longhand select=“attribute::type”• Shorthand select=“@type”
• Another essential axis is the parent axis. This takes you from the context node to the parent of that node. • Longhand select=“parent::node()/child::xyz”• Shorthand select=“../xyz”
XS
LT
, X
Path
an
d
uP
ort
al
Axes
• ancestor :: node()Takes you up the tree to the ancestors of the context node in reverse document order.
22
11
XS
LT
, X
Path
an
d
uP
ort
al
Axes
• ancestor-or-self :: node()Takes you up the tree to the ancestors of the context node in reverse document order starting with the context node.
33
22
11
XS
LT
, X
Path
an
d
uP
ort
al
Axes
• child :: node()Takes you to the children of the context node in document order. This is the default axis.
2211
XS
LT
, X
Path
an
d
uP
ort
al
Axes
• descendant :: node()Takes you to the descendants of the context node. The resulting nodes are in document order.
3311
66554422
XS
LT
, X
Path
an
d
uP
ort
al
Axes
• descendant-or-self :: node()Takes you to the descendants of the context node, starting with the context node, in document order.
11
4422
77665533
XS
LT
, X
Path
an
d
uP
ort
al
Axes
• following :: node()Takes you to the nodes that occur after the context node in document order, but that are not the context node’s descendants.
4411
3322
XS
LT
, X
Path
an
d
uP
ort
al
Axes
• following-sibling :: node()Takes you to the siblings of the context node that occur after the context node in document order.
2211
XS
LT
, X
Path
an
d
uP
ort
al
Axes
• parent :: node()Selects a single node – the parent of the context node.
11
XS
LT
, X
Path
an
d
uP
ort
al
Axes
• preceding :: node()Takes you to the nodes that occur before the context node in reverse document order, excluding the context node’s ancestors.
33
1122
XS
LT
, X
Path
an
d
uP
ort
al
Axes
• preceding-sibling :: node()Takes you to the siblings (children of the same parent) of the context node that occur before it, in reverse document order.
1122
XS
LT
, X
Path
an
d
uP
ort
al
Axes
• self :: node()Takes you to the context node itself.
11
XS
LT
, X
Path
an
d
uP
ort
al
Predicates (filters)
• Predicates are placed in square brackets either:• at the end of a step
select=“para[position()=3]/sentence”
• or at the end of a location pathselect=“para/sentence[position()=3]”
• Predicates act as filters on node sets.• When predicate expressions test
false, the node is filtered out.
XS
LT
, X
Path
an
d
uP
ort
al
Predicates (filters)
• You can have any number of predicates following each other.
select=“para[position()=3][@indent=.5]/sentence”
• The context node list for each predicate contains the nodes that are still in the node set after it's been filtered by the previous predicates.
• Predicates can be used at any point in a location path, but they only apply to the immediately preceding step.
XS
LT
, X
Path
an
d
uP
ort
al
Expressions - Union
• You can combine node sets by creating a union using the “|” operator.
• If there are any nodes that occur in both node sets, the union only holds one copy of them.
• You can use predicates on the result of a union, just as you can on any node set.
XS
LT
, X
Path
an
d
uP
ort
al
Expressions - Operators
• Logical Operators• and, or and not()
• Comparative Operators• =, !=, <, <=, >, >=• Remember to escape: “<“ to <
• Mathematical Operators• +, -, *, div, mod
XS
LT
, X
Path
an
d
uP
ort
al
Example: Locating Nodes
• This XPathexpression selects allthe price elements ofall the cd elements ofthe catalog element:/catalog/cd/price
• This XPath expression selectsall the cd elementsin the document://cd
*note most XPath expressions are written in shorthand
XS
LT
, X
Path
an
d
uP
ort
al
Selecting Unknown Elements• Wildcards ( * ) can be
used to select unknown XML elements.• This XPath expression
selects all the child elements of all the cd elements of the catalog element:/catalog/cd/*
• The following XPath expression selects all the price elements that are grandchild elements of the catalog element:/catalog/*/price
XS
LT
, X
Path
an
d
uP
ort
al
Selecting Unknown Elements
• The following XPath expression selects all price elements which have 2 ancestors:/*/*/price
• The following XPath expression selects all elements in the document://*
XS
LT
, X
Path
an
d
uP
ort
al
Selecting Branches
• The following XPath expression selects the first cd child element of the catalog element:/catalog/cd[1]
• The following XPath expression selects the last cd child element of the catalog element (Note: There is no function named first()):/catalog/cd[last()]
XS
LT
, X
Path
an
d
uP
ort
al
Selecting Branches
• The following XPath expression selects all the cd elements of the catalog element that have a price element:
/catalog/cd[price] • The following XPath
expression selects all the cd elements of the catalog element that have a price element with a value of 10.90:
/catalog/cd[price=10.90]
XS
LT
, X
Path
an
d
uP
ort
al
Selecting Branches
• The following XPath expression selects all the price elements of all the cd elements of the catalog element that have a price element with a value of 10.90:
/catalog/cd[price=10.90]/price
XS
LT
, X
Path
an
d
uP
ort
al
Selecting Several Paths
• The following XPath expression selects all the title and artist elements of the cd element of the catalog element:
/catalog/cd/title | /catalog/cd/artist
• The following XPath expression selects all the title and artist elements in the document:
//title | //artist• The following XPath
expression selects all the title, artist and price elements in the document:
//title | //artist | //price
XS
LT
, X
Path
an
d
uP
ort
al
Selecting Attributes
• This XPath expression selects all attributes named country://@country
• This XPath expression selects all cd elements which have an attribute named country://cd[@country]
• This XPath expression selects all cd elements which have any attribute://cd[@*]
• This XPath expression selects all cd elements which have an attribute named country with a value of 'UK'://cd[@country='UK']
Basic XSLT
XS
LT
, X
Path
an
d
uP
ort
al
Background
• XSLT is part of a larger initiative within the World Wide Web Consortium (W3C) to define a way of presenting XML documents. This initiative is known as XSL (Extensible Stylesheet Language).
• XSLT is an XML vocabulary that's used to define a transformation between an XML document and a result document, which might be in XML, in HTML, or a text document.
XS
LT
, X
Path
an
d
uP
ort
al
What is an XSLT Stylesheet?
• The XSLT processor uses a stylesheet to transform an XML document.
• The stylesheet contains instructions for generating a new document based on information in the source document.
• This can involve adding, removing, or rearranging nodes, as well as presenting the nodes in a new way.
XS
LT
, X
Path
an
d
uP
ort
al
The XSL Processing sequence
source documentsource document
XSL stylesheetXSL stylesheet
XML parserXML parser
applytemplates
applytemplateswrite result
to outputwrite resultto output
Result fileor streamResult fileor stream
result tree
source tree
rules base
XS
LT
, X
Path
an
d
uP
ort
al
Differentiating Stylesheets
• XSLT stylesheets do not perform the same function as Cascading Style Sheets (CSS)
• CSS is used to apply style elements to markup languages to affect formatting in a single pass, top down, fashion.
• XSLT produces a separate result tree and can iterate and perform conditional logic.
• XSLT and CSS are most powerful when used together. More later…
XS
LT
, X
Path
an
d
uP
ort
al
Example of a Stylesheet
• When you work with a stylesheet, three documents are involved:• Source document in XML • Desired output: the result document,
which can be HTML, XML, or text • XSLT stylesheet, which is also an XML
document
XS
LT
, X
Path
an
d
uP
ort
al
“Hello World!”
XML Document:<?xml version="1.0"?><greeting>Hello, World!</greeting>
Desired Output:<html><head><title>Greeting</title></head><body><p>Hello, World!</p></body></html>
XSLT Stylesheet:<?xml version="1.0"?><xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head><title>Greeting</title></head> <body><p><xsl:value-of select="greeting"/></p></body> </html> </xsl:template></xsl:stylesheet>
rootroot
greetinggreeting
Hello World!Hello World!
XS
LT
, X
Path
an
d
uP
ort
al
Dissecting the XSLT
• XSLT stylesheets are XML Documents<?xml version="1.0"?>
• Standard XSLT heading/Namespace<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
• The template rule to be triggered when a particular part of the source document is being processed. “/” is XPath for “root node” <xsl:template match="/">
XS
LT
, X
Path
an
d
uP
ort
al
Dissecting the XSLT
• Once the rule is triggered the body of the template defines what output to generate. <html>
<head><title>Greeting</title></head>
<body><p><xsl:value-of select="greeting"/></p></body>
</html>
• Most of the template is HTML except the value-of element which is an XSL instruction.
• The XPath in the select statement is asking for the contents of the child of the context node with an element name of greeting.
rootroot
greetinggreeting
Hello World!Hello World!
XS
LT
, X
Path
an
d
uP
ort
al
Dissecting the XSLT
• All that’s left to do is close (finish) the template and the stylesheet. </xsl:template>
</xsl:stylesheet>
XS
LT
, X
Path
an
d
uP
ort
al
Some XSL Top Level Elements• <xsl:decimal-format>
• Declares a decimal format.
• <xsl:import>• Imports another stylesheet into this stylesheet.
• <xsl:key>• provides a way to work with documents that
contain an implicit cross-reference structure
• <xsl:output>• This instruction specifies how you want the result
tree to be output
XS
LT
, X
Path
an
d
uP
ort
al
Some XSL Top Level Elements• <xsl:param>
• Declares a parameter for a stylesheet or template, and specifies a default value for the parameter
• <xsl:template>• Specifies a template rule.
• <xsl:variable>• Declares a variable and binds a value to that
variable.• The difference between the xsl:param and
xsl:variable instructions is that xsl:param defines a default value while xsl:variable defines a fixed value.
• If used as a top level element the scope is global otherwise the scope is local to a specific template
XS
LT
, X
Path
an
d
uP
ort
al
What Is a Template?
• A template defines what the XSLT processor should do when it processes a particular node in the XML source document.
• The XSLT processor populates the result document by instantiating a sequence of templates.
• Instantiation of a template means that the XSLT processor • Copies any literal data from the template to the
result document • Executes the XSLT instructions in the template
XS
LT
, X
Path
an
d
uP
ort
al
Contents of a Template
• To define a template, you specify the xsl:template instruction.
• In the xsl:template tag, the value of the match attribute is an XPath pattern.
• This pattern matches (identifies) nodes in the source XML document.
• The value of the match attribute is the template rule.
XS
LT
, X
Path
an
d
uP
ort
al
The Template Body
• The template body defines actions you want the XSLT processor to perform each time it instantiates the template. It contains • XSLT instructions you want the XSLT
processor to follow• Elements that specify literal output you
want the XSLT processor to insert in the result document. For example:
<table align="center" cellpadding="5">
XS
LT
, X
Path
an
d
uP
ort
al
Determining Templates to Instantiate
• When the XSLT processor applies a stylesheet to an XML document, it begins processing with the root node of the XML source document
• Every stylesheet includes default templates
• Whether or not you explicitly define a template rule that matches the root node, the XSLT processor always instantiates a template that matches the root node.
XS
LT
, X
Path
an
d
uP
ort
al
The Example Handout
XS
LT
, X
Path
an
d
uP
ort
al
Dissected XSLT Stylesheet
XS
LT
, X
Path
an
d
uP
ort
al
Result
XS
LT
, X
Path
an
d
uP
ort
al
Dissecting a sample
• In the sample stylesheet, the template rule in the first template matches the root node:
<xsl:template match="/">
• The XSLT processor instantiates this template to start generating the result document.
• It copies the first few lines from the template to the result document.
XS
LT
, X
Path
an
d
uP
ort
al
Dissecting a sample
• Then the XSLT processor reaches the following XSLT instruction:
<xsl:apply-templates select="/bookstore/book"/> • When the XSLT processor reaches the
select attribute, it creates a list of all source nodes that match the specified pattern.
• In this example, the list contains book elements.
• The processor then processes each node in the list in turn by instantiating its matching template.
XS
LT
, X
Path
an
d
uP
ort
al
Dissecting a sample
• First, the XSLT processor searches for a template that matches the first book element. The template rule in the second template matches the book element:
<xsl:template match="book">
• After instantiating this template for the first book element, the XSLT processor searches for a template that matches the second book element…
XS
LT
, X
Path
an
d
uP
ort
al
Dissecting a sample
• The XSLT processor instantiates the book template again, and then repeats the process for the third book element.
• After three instantiations of the book template, the XSLT processor returns to the first template (the template that matches the root node) and continues with the line after the xsl:apply-templates instruction.
XS
LT
, X
Path
an
d
uP
ort
al
Built-in Templates
• When the XSLT processor cannot find a template that matches a selected node, it uses built-in templates. Every stylesheet includes built-in templates whether or not you explicitly define them.
XS
LT
, X
Path
an
d
uP
ort
al
Built-in Templates
• The following template matches the root node and element nodes and selects all attributes and child nodes for further processing:
<xsl:template match="*|/"><xsl:apply-templates / ></xsl:template>
• The following template matches text and attribute nodes. This template copies the value of the text or attribute node to the result document:
<xsl:template match="@*|text()"><xsl:value-of select="." / ></xsl:template>
XS
LT
, X
Path
an
d
uP
ort
al
Major XSL Instructions
• xsl:apply-imports • xsl:apply-templates • xsl:attribute • xsl:attribute-set • xsl:call-template • xsl:choose • xsl:comment • xsl:copy • xsl:copy-of • xsl:decimal-format • xsl:element • xsl:fallback • xsl:for-each • xsl:if • xsl:import • xsl:include • xsl:key
• xsl:message • xsl:namespace-alias • xsl:number • xsl:otherwise • xsl:output • xsl:param • xsl:preserve-space • xsl:processing-instruction • xsl:sort • xsl:strip-space • xsl:stylesheet • xsl:template • xsl:text • xsl:transform • xsl:value-of • xsl:variable • xsl:when • xsl:with-param
The Tools
XS
LT
, X
Path
an
d
uP
ort
al
The Applications…
These are the applications I am familiar with -- this is not an endorsement -- and no testing was done on animals…
XML/XSLT Document Development IDE:• Sonic Stylus Studio• XML Spy• Cooktop (open source)• Komodo (commercial – runs on LINUX)• Emacs (minor mode XSLT-process)
HTML Markup IDE:• Macromedia Dreamweaver MX (XHTML), Adobe GoLive
HTML to XHTML Conversion/Cleanup• HTML Tidy (open source)
The Creation Process
XS
LT
, X
Path
an
d
uP
ort
al
Creating an XSLT StylesheetStep One – get or develop one of the following:
• A representative XML Document• A DTD (a whole different seminar)• A Schema (a whole different seminar)
Step two – Analyze the data • Think about the best way to present and interact with it.
The data is your friend.
Step three – Develop sample markup• Design mocks for each markup language & device that
you plan to support. Don’t try to paint the canvas without a sketch.
Step four – Convert the markup to XML• The stylesheet will only eat tasty markup. Poorly formed
markup will be regurgitated.
Step five – copy markup into XSLT editor• Match on a root element and start cooking XSLT.
Hands - on
XS
LT
, X
Path
an
d
uP
ort
al
Hands – on
• Convert RSS “Syndicated Content” XML Documents into HTML using an XSLT Stylesheet.