Tutorial.07

advertisement
XP
TUTORIAL 7
CREATING A COMPUTATIONAL
STYLESHEET
(Using XSLT style sheet to calculate values
based on data from the source document)
New Perspectives on XML, 2nd Edition
Tutorial 7
1
XP
OBJECTIVES
In this chapter you will:
• Learn how to number nodes
• Apply XPath functions such as count() and sum()
• Create formulas using mathematical operators
• Work with text nodes and white space
• Create variables and parameters
New Perspectives on XML, 2nd Edition
Tutorial 7
2
XP
OBJECTIVES
In this chapter you will:
• Create named and recursive templates
• Work with multiple style sheets
• Learn how to use extension functions and
elements
New Perspectives on XML, 2nd Edition
Tutorial 7
3
XP
NUMBERING NODES
• Goal: add numbers to the items in columns
• Number nodes using:
– Xpath’s position() function
• Position of the element in the result document
• Can be used in conditional statements
<xsl:if test=“position()=3 />
– XSLT <xsl:number> element
<xsl:number select=“expression” />
New Perspectives on XML, 2nd Edition
Tutorial 7
4
Using the number Element
Source document
XP
Style
<products>
<xsl:for-each select=“products/item”>
<item>Goblin Fountain</item>
<xsl:number />
<item>Tracer Fire</item>
<xsl:value-of select=“.” />
<item>Dragon Fountain</item>
<br/>
<item>Rock the Sky</item>
</xsl:for-each>
<item>Pyro Blast</item>
Numbered list
</products>
1. Goblin Fountain
2. Tracer Fire
3. Dragon Fountain
4. Rock the Sky
5. Pyro Blast
New Perspectives on XML, 2nd Edition
Tutorial 7
5
Counting subset of items
Source document
XP
Style
<xsl:for-each select=“fountain”>
<products>
<xsl:number />
<fountain>Goblin Fountain</fountain>
<xsl:value-of select=“.” />
<rocket>Tracer Fire</rocket>
<br/>
<fountain>Dragon Fountain</fountain>
</xsl:for-each>
<rocket>Rock the Sky</rocket>
<rocket>Pyro Blast</rocket>
</products>
Numbered list
1. Goblin Fountain
2. Dragon Fountain
New Perspectives on XML, 2nd Edition
Tutorial 7
6
XP
Levels
Source document
Style
<products>
<fountains>
<item>Goblin Fountain</item>
<item>Dragon Fountain</item>
</fountains>
<rockets>
<item>Tracer Fire</item>
<item>Rock the Sky</item>
<item>Pyro Blast</item>
</rockets>
</products>
<xsl:for-each select=“//item”>
<xsl:number />
<xsl:value-of select=“.” />
<br/>
</xsl:for-each>
Numbered list
1. Goblin Fountain
2. Dragon Fountain
1. Tracer Fire
2. Rock the Sky
3. Pyro Blast
New Perspectives on XML, 2nd Edition
Tutorial 7
7
XP
USING <XSL:NUMBER>
• Nodes are numbered according to position in source
document
• Attributes:
– select=expression: any XPath expression that evaluates to a
number
– count=pattern: specifies which nodes to count
– level=type: tree level for nodes to count
• any = across different levels as if they were all siblings
• single = items at one level only (defaut)
• multiple = hierarchy count
New Perspectives on XML, 2nd Edition
Tutorial 7
8
Hierarchical numbered list
XP
Style
Source document
<products>
<group>
<item>Goblin Fountain</item>
<item>Dragon Fountain</item>
</group>
<group>
<item>Tracer Fire</item>
<item>Rock the Sky</item>
<item>Pyro Blast</item>
</group>
</products>
<xsl:for-each select=“//group | //item”>
<xsl:number level=“multiple”
count=“group | item” /> />
<xsl:vale-of select=“.” />
<br/>
</xsl:for-each>
New Perspectives on XML, 2nd Edition
Tutorial 7
Hierarchical list
1. Fountains
1.2. Goblin Fountain
1.2. Dragon Fountain
2. Rockets
2.1. Tracer Fire
2. 2. Rock the Sky
2. 3. Pyro Blast1 9
XP
USING <XSL:NUMBER>
• Attributes:
– from=pattern: pattern indicates where numbering should restart
– format=pattern: pattern indicates number format
•
•
•
•
•
1=integer (1, 2, 3,…)
A= alphabetical uppercase (A, B, C, …)
a= alphabetical lowercase (a, b, c, …)
i= lowercase Roman numerial (i, ii, iii, iv, v, …)
I= uppercase Roman numerial (I, II, III IV, V, …)
– grouping-size, grouping-separator: indicate how digits are grouped and
separator character. For example
<xsl:number format=“1” grouping-size=“2” grouping-separator=“ ” />
displays “548710” as “54 87 10”
New Perspectives on XML, 2nd Edition
Tutorial 7
10
WORKING WITH XPATH
FUNCTIONS
XP
• Used to calculate numerical values or manipulate
text strings
• Numerical functions:
Examples: <xsl: value-of select=“count(//customer)” />
<xsl: value-of select=“//@sum(qty)” />
New Perspectives on XML, 2nd Edition
Tutorial 7
11
XP
XPATH TEXT FUNCTIONS
New Perspectives on XML, 2nd Edition
Tutorial 7
12
XPATH STRING FUNCTION
Example
XP
• Substring-before (“C101 C102 C103 C104”, “ ”)
• Locates the first blank space in the text string and
extracts all the text before the first blank, e.g.,
“C101”
New Perspectives on XML, 2nd Edition
Tutorial 7
13
XP
WORKING WITH
MATHEMATICAL OPERATORS
• Six operators:
Example: <xsl:value-of select=“@qty * @price” />
New Perspectives on XML, 2nd Edition
Tutorial 7
14
XP
FORMATTING NUMBERS
• XPath function format-number
• Syntax: format-number (value, format)
• Example: format-number (56823.847, “#,##0.00”)
displays 56,823.85
• Another example: format-number (56823.847,
“#.##0,00”) displays 56.823,85
New Perspectives on XML, 2nd Edition
Tutorial 7
15
XP
NUMBER FORMAT SYMBOLS
New Perspectives on XML, 2nd Edition
Tutorial 7
16
XP
<XSL:DECIMAL-FORMAT>
• Format:
<xsl:decimal-format attributes />
• Example:
<xsl:decimal-format name=“Europe” decimal-separator=“,”
grouping separator=“.” />
New Perspectives on XML, 2nd Edition
Tutorial 7
17
<XSL:DECIMAL-FORMAT>
ATTRIUTES
New Perspectives on XML, 2nd Edition
Tutorial 7
XP
18
XP
WORKING WITH TEXT NODES
AND WHITE SPACE
• White space:
–
–
–
–
–
Space (press space bar),
Tab (pressing the tab key)
new line (pressing Enter key)
carriage return
nonbreaking space
 
	



 
• Adjacent <xsl:value-of> elements will have no white space
between them
• <xsl:text> can be used to create white space:
– Syntax: <xsl:text>&#160</xsl:text>
New Perspectives on XML, 2nd Edition
Tutorial 7
19
XP
CONTROLLING WHITESPACE
• Stripping space:
– Remove text nodes that contain only white space from
the result document
– Syntax: <xsl:strip-space elements=“list”>
– where list is a white-space separated list of elements in
the source document that contain white space characters
– Use * match all nodes
New Perspectives on XML, 2nd Edition
Tutorial 7
20
XP
CONTROLLING WHITESPACE
• Preserving space:
– Make sure that text nodes that contain only white space
are not deleted
– Syntax: <xsl:preserve-space elements=“list”>
– Use * as pattern to match all nodes
• Normalize space:
– Remove leading and trailing spaces
– X-pathSyntax: normalize-space(text)
– Example: normalize-space (“ goodbye
returns the text string “goodbye”
New Perspectives on XML, 2nd Edition
Tutorial 7
”)
21
XP
USING VARIABLES
• User-defined name that stores a particular value or
object, such as:
• Types:
–
–
–
–
–
number
text string
node set
boolean value (either true or false)
result tree fragment
New Perspectives on XML, 2nd Edition
Tutorial 7
22
XP
VARIABLE SCOPE
• Global:
– Can be referenced from anywhere within the style sheet
– Must be declared at the top level of the style sheet, as a
direct child of the <xsl:stylesheet> element
– Must have a unique variable name
• Local:
– Referenced only within template
– Can share name with other local or global variable
New Perspectives on XML, 2nd Edition
Tutorial 7
23
XP
USING VARIABLES
• Declaring variables
•
•
•
•
– Syntax: <xsl:variable name=“name” select=“value” />
– Example: <xsl:variable name=“Months” select=“12” />
Not like variables
Names are case-sensitive
Value only set once upon declaration
Enclose text strings in single-quotes
Example
of other languages
Note use of $
<xsl:variable name=“company” select=“‘Wizard Works’” />
• Referencing a variable:
The name of the company is <xsl:value-of select=“$company” />
New Perspectives on XML, 2nd Edition
Tutorial 7
24
XP
COPYING
• <xsl:copy>
– Syntax: <xsl:copy use-attribute-sets=“list” />
– Shallow copy: only node itself is copied
• <xsl:copy-of>
– Syntax: <xsl:copy-of select=“expression”/>
– Deep copy: node and descendants are copied
– Example:
<tr>
<td><xsl:value-of select=“@date” /> </td>
<tr>
New Perspectives on XML, 2nd Edition
Tutorial 7
25
XP
USING PARAMETERS
• Similar to variables, but:
– Value can be changed after it is declared
– Can be set outside of scope
• Syntax: <xsl:param name=“name” select=“value”/>
• Example: <xsl:param name=”Filter” select=”'C103'” />
• To reference: $param-name
New Perspectives on XML, 2nd Edition
Tutorial 7
26
XP
SETTING PARAMETER VALUES
EXTERNALLY
• Depends on XSLT processor
– Some work by appending parameter value to url
• Web browsers to not allow users to set parameters
values directly
– Use a JavaScript program from within the browser (see
Tutorial 10)
New Perspectives on XML, 2nd Edition
Tutorial 7
27
XP
TEMPLATE PARAMETERS
• Local in scope
• Created inside <xsl:template> element
• To pass parameter to template
– place <xsl:with-param> element in <xsl:applytemplates> element
– Syntax: <xsl:with-param name=“name” select=“value”/>
– No error if calling param name does not match template
param name
New Perspectives on XML, 2nd Edition
Tutorial 7
28
XP
TEMPLATE PARAMETERS
• Example
<xsl:apply-templates select=“customers/customer”>
<xsl:with-param names=“custID” select=“C101” />
</xsl:apply-templates>
…
<xsl:template match=“customer”>
<xsl:parm name=“custID”/>
styles
</xsl:tmplate>
New Perspectives on XML, 2nd Edition
Tutorial 7
29
INTRODUCING FUNCTIONALXP
PROGRAMMING
• Functional programming language:
– Relies on the evaluation of functions and expressions,
not sequential execution of commands
– Different from most other languages
New Perspectives on XML, 2nd Edition
Tutorial 7
30
XP
FUNCTIONAL PROGRAMMING
PRINCIPLES
• Main program consists entirely of functions with
well-defined inputs
• Results of program are defined in terms of
function outputs
• No assignment statements; when a variable is
declared, its value cannot be changed
• Order of the execution is irrelevant
New Perspectives on XML, 2nd Edition
Tutorial 7
31
XP
FUNCTIONAL PROGRAMMING
• Easier to maintain and less susceptible to error
• No order of execution
• Each time a function is called, it does the same
thing, regardless of how many times it has already
been called, or the condition of other variables in
the program
• Important to think about the desired end result,
rather than the sequential steps needed to achieve
that effect
New Perspectives on XML, 2nd Edition
Tutorial 7
32
XP
RECURSION
• In functional programming, recursion takes the
place of looping structures
• Function calls itself
New Perspectives on XML, 2nd Edition
Tutorial 7
33
XP
USING NAMED TEMPLATES
• Template not associated with node set
• Collection of functions and commands that are
accessed from other templates in the style sheet
• Syntax:
<xsl:template name="name">
styles, variables and parameters
</xsl:template>
New Perspectives on XML, 2nd Edition
Tutorial 7
34
XP
USING NAMED TEMPLATES
• Example
<xsl:template name=“totalCost”/>
<xsl:param name=“list” />
<xsl: parm name=“total” select = “0” />
<!– Calculate the total item cost />
</sxl:template>
New Perspectives on XML, 2nd Edition
Tutorial 7
35
XP
CALLING NAMED TEMPLATES
• Syntax:
<xsl:call-template name=“name”>
<xsl:with-param />
<xsl:with-param />
...
</xsl:call-template>
New Perspectives on XML, 2nd Edition
Tutorial 7
36
WRITING A RECURSIVE
TEMPLATE
XP
• Templates that call themselves, usually passing
along a new parameter value with each call
• Needs to have a stopping condition
– Expressed in an if statement or a choose statement
– If missing, will call itself without end
New Perspectives on XML, 2nd Edition
Tutorial 7
37
WRITING A RECURSIVE
TEMPLATE
XP
• Syntax with <xsl:if>:
New Perspectives on XML, 2nd Edition
Tutorial 7
38
WRITING A RECURSIVE
TEMPLATE
XP
• Syntax with <xsl:choose>
New Perspectives on XML, 2nd Edition
Tutorial 7
39
WORKING WITH MULTIPLEXP
STYLE SHEETS
• Use <xsl:include> or <xsl:import>
– Not supported by all browsers
• Use to create a library of XSLT code
• <xsl:include>
– Syntax: <xsl:include href=“URL” />
– Same as inserting the components of included sheet
directly into including file
– Does not perform a direct text copy
• Does not copy opening and closing <xsl:stylesheet> tags
• Copies the elements and templates within the style sheet
New Perspectives on XML, 2nd Edition
Tutorial 7
40
WORKING WITH MULTIPLEXP
STYLE SHEETS
• <xsl:import>
– Syntax: <xsl:import href=”URL” />
– Must be at the top level of the style sheet; must be first
child of <xsl:stylesheet>
– If name conflicts occur, importing sheet takes
precedence
– If you import several style sheets, the last one imported
has the highest precedence among the imported sheets
in the event of a name conflict.
New Perspectives on XML, 2nd Edition
Tutorial 7
41
WORKING WITH EXTENSIONXP
FUNCTIONS
• Provide extended functionality specific to XSLT processor
– Caution: use extensions only when you are sure that a given
document is always acessed using the same processor.
• Extension functions - extend the list of functions available
to XPath and XSLT expressions
• Extension elements - extend the list of elements that can be
used in an XSLT style sheet
• Extension attributes - extend the list of attributes
associated with XSLT elements
• Extension attribute values - extend the data types
associated with XSLT attributes
New Perspectives on XML, 2nd Edition
Tutorial 7
42
WORKING WITH EXTENSIONXP
FUNCTIONS
• Check processor documentation for support
• EXSLT:
– Proposed common set of extensions
– Not fully supported by all processors
– Some functions supported by: Because extension
•
•
•
•
•
4XSLT
saxon
jd.xslt
libxslt
Xalan-J
functions are not available
on all XSLT processors,
just be aware of them.
They will not be on the
final exam
New Perspectives on XML, 2nd Edition
Tutorial 7
43
XP
USING EXTENSIONS
• Modify <xsl:stylesheet> to include:
<xsl:stylesheet version=”1.0”
xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”
xmlns:math=”http://www.exslt.org/math”
extension-element-prefixes=”math”>
• Syntax: prefix:function()
• Test function availability: function-available(“extension”)
New Perspectives on XML, 2nd Edition
Tutorial 7
44
XP
EXSLT MATH FUNCTIONS
New Perspectives on XML, 2nd Edition
Tutorial 7
45
WRITING EXTENSION
FUNCTIONS (MSXML)
XP
Processor
used by IE
• Add:
<msxsl:script language=“language” implements-prefix=“refix”>
script commands
</msxsl:script>
where language is the language of the script and
prefix is the namespace prefix you want to assign to the extension
functions
script commands are the commands needed to create the extension
function
New Perspectives on XML, 2nd Edition
Tutorial 7
46
XP
Example: random()
<xsl:stylesheet version=“1.0”
xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”
xmlns:jsext:=“http://javacrript-extensions”
xmlns:msxsl=“urn:schema-microsoft-com:xslt”
extension-element-prefixes=“jsext masxsl”>
<maxsl:script implements-prefix=“jsext” language = “javscript”>
function random() {
returns Math.random();
Works only
} </maxsl:script>
<xsl:value-of select=“jsext:random()” />
New Perspectives on XML, 2nd Edition
Tutorial 7
with
MSXML
47
XP
SUMMARY
• <xsl:number> and position() are used to number
elements
• XPath provides mathematical and string operators
• Standard mathematical operators (+, -, etc.) can be
used in XSLT
• Number formatting uses format-number() function
New Perspectives on XML, 2nd Edition
Tutorial 7
48
XP
SUMMARY
• White space characters are controlled with various
XSLT elements and XPath functions
• Variables and parameters are used to supply userdefined values
• XSLT is a functional programming language
• Recursive templates provide looping logic in
XSLT
• EXSLT provides a set of extension functions,
elements, attributes and attribute values
New Perspectives on XML, 2nd Edition
Tutorial 7
49
Download