XSLT for Data Manipulation By: April Fleming. What We Will Cover The What, Why, When, and How of...
-
Upload
maria-barker -
Category
Documents
-
view
213 -
download
0
Transcript of XSLT for Data Manipulation By: April Fleming. What We Will Cover The What, Why, When, and How of...
What We Will Cover
• The What, Why, When, and How of XSLT
• What tools you will need to get started
• A sample “Hello World” application
• Enough XSLT Constructs to get started, given from a ColdFusion point-of-view
What is XSLT
• eXstensible Stylesheet Language: Transformations
• Transformation Language
• High-Level data manipulation language
• A language for transforming the structure of an XML document
• Primarily designed by the W3C for transforming one XML document into another
What is XSLT - cont’d
• The XSLT language is expressed as a well-formed XML document
• The XSLT language belongs to the XSLT Namespace
• An XSLT transformation describes rules for transforming a source tree into a result tree. This set of rules is called a “stylesheet”
What is XSLT - cont’d
• These “rules” have two partsPattern
• Matched against nodes in the source tree
Template• Can be instantiated to form part of the result
tree
What is XSLT - cont’d
• The result tree is separate from the source tree
• The result tree can be in a completely different form from the source tree
Output Formats
• <xsl:output>OptionalParser will default the output type if the tag
is omitted.
• Top-Level Element used to define the output type desired
• Enables you to specify encoding for output
Output Format - cont’d
• Three types of outputXML
• <xsl:output method=”xml” />
• output is an XML document or XML document fragment
•<?xml version="1.0"?> appears in the resulting output
Output Formats - Cont’dHTML
• <xsl:output method=”html” version=”4.0” />
• Output is an HTML document
Text• Allows output in many other text-based formats
• Comma-seperated values
• RTF
• EDI
• SQL
• Javascript
Why would I use XSLT
• XSLT is a supported w3c standard.
• XSLT Provides the traditional language conventions that we are used to when processing dataLoopingConditional LogicExpressionsVariables
Why would I use XSLT - cont’d
• Dynamic
• Efficient
• Facilitate separation of Data and Presentation
How I used XSLT and Why
• Distributed Search Application
• I needed to write a search engine that could function independent of the various search interfaces that we had.
• I needed the engine to be completely independent of the search interfaces or the search result displays.
How I used XSLT and Why
• I chose XML as the data format for I/O to the engineUniform structure of Data regardless of the
sourceData could be easily parsed using XML
parser
How I used XSLT and Why - cont’d
• I chose XSLT to process the XML data going into and out of the search engineWith XSLT I could easily transform the
data defintion output packets from the engine and create an html search form
I also found XSLT to be a great way to take the search results and transform them into the various display formats we offered to our users
When would I use XSLT?
• When you have XML data from a source (external or internal) with no other way to process that data
• When the XSLT transformations are faster than the current way you have to process your XML data.
• Example: XSLT vs. CF processing
• When you need more power and flexibility than your current XML processing mechanism provides
• Example: CF MX XML Processing Tags/Functions
• XML ParserMSXML
• This is the Parser that I used
• Free download from Microsoft
• Excellent Documentation
• http://msdn.microsoft.com/xml/default.asp
Other Parsers - see chart on next slide
• Good understanding of XPath• Used for XSLT expressions
• MSXML SDK - good Xpath documentation
What tools will I need to use XSLT?
XML Parser Comparison ChartIBM XML4J
Apache XercesSun Project
XMicrosoftMSXML
Oracle XMLParser for Java
JamesClark XP
well-formednesschecking
+ + + + +
validating + + + + -
XML-Schema + - - - -
Namespaces + + + + -
XSL-TwithLotusXSL
- + + -
Java + + - + +
Win32 through Java through Java through Java + -
SAX 1.0 + + + + +
SAX 2.0 + - + - -
DOM Level 1 1.0 + + + + -
DOM Level 2 1.0 + - - - -
Open Source + - - - +
DownloadXML4JXerces
ProjectX MSXML ORA XP
• To perform a transformation we need three thingsXML DataXSLT StylesheetXML Parser
Simple “Hello World” example
XSLT Stylesheet – Save as hello.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match=”/”>
<html>
<head>
<title> XSLT Example</title>
</head>
<body>
<xsl:value-of select=”output” />
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Parsing – ColdFusion & MSXML Parser
<!---Create two instances of the XML Parser, one for the XML and one for the XSL--->
<cfobject type = "COM" action = "create" class = "MSXML2.DOMDOCUMENT.4.0" name = "xml">
<cfobject type = "COM" action = "create" class = "MSXML2.DOMDOCUMENT.4.0"
name = "xsl">
<cfscript>//do not validate the xmlxml.validateOnParse=false;
xml.async = false;//load the xml file into the xml instance of the parsertemp = xml.load("c:\inetpub\wwwroot\hello.xml");
</cfscript><cfscript>
xsl.async=false;//load the xsl file into the xsl instance of the parserxsl.load("c:\inetpub\wwwroot\hello.xsl");
output = xml.transformNode(xsl);</cfscript>
<!---output the transformed result----><cfoutput>#output#</cfoutput>
<!---set com objects to null---><cfset xml = ""><cfset xsl = "">
XSLT Stylesheet Structure
The XSLT namespace has the URI http://www.w3.org/1999/XSL/Transform.
<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
• Remember that an XSLT stylesheet is a well-formed XML document, therefore you must always include the corresponding closing tag.
• </xsl:stylesheet>
• The tag <xsl:transform> is a synonym for <xsl:stylesheet> either one is acceptable
XSLT Stylesheet Structure - cont’d
Can use any prefix, provided that there is a namespace declaration that binds the prefix to the URI of the XSLT namespace
• An element occurring as a child of an xsl:stylesheet element is called a top-level element
Top Level Elements
• <xsl:import href="..."/>
• <xsl:include href="..."/>
• <xsl:strip-space elements="..."/>
• <xsl:preserve-space elements="..."/>
• <xsl:output method="..."/>
• <xsl:key name="..." match="..." use="..."/>
• <xsl:decimal-format name="..."/>
Top Level Elements - cont’d
• <xsl:namespace-alias stylesheet-prefix="..." result-prefix="..."/>
• <xsl:attribute-set name="..."></xsl:attribute-set>
• <xsl:variable name="...">...</xsl:variable>
• <xsl:param name="...">...</xsl:param>
• <xsl:template match="..."></xsl:template>
• <xsl:template name="..."></xsl:template>
Templates• <xsl:template match=””>
• “Match” is a pattern, the pattern is expressed using Xpath
• Pattern describes which nodes in the source tree the template rule matches
• <xsl:template match=”/” >matches the root node
• <xsl:template match=”Title” >matches the title node
Templates - cont’d
• <xsl:template match=”Chapter/Title”>matches the Title node that is a child to
the Chapter node
<chapter>
<title>My Title</title>
</chapter>
Templates - cont’d
• <xsl:template match=”Chapter/@title”>matches the title attribute of the chapter
node
<chapter title=”my title”
…
</chapter>
Templates - cont’d
• When the template is instantiated (a match condition is met), the instructions within the template tags are executed and the resulting data is copied to the result tree.
<xsl:template match=”/”>
….instructions….
</xsl:template>
<xsl:apply-templates>
• For each child of the current nodeFind the matching template ruleInstantiate the template rule
<xsl:template match=“/”><xsl:apply-templates/>
</xsl:template>
<xsl:apply-templates select=“”>
• Allows you to control the order that template rules are applied
<xsl:template match=“/”><xsl:apply-templates select=“apples”/><xsl:apply-templates select=“oranges”/><xsl:apply-templates select=“banannas”/>
</xsl:template>
<xsl:value-of>
• Extract the required information from the node directly
<xsl:template match=“/”><html>
<head>…</head><body>
<xsl:value-of select=“output”/></body>
</html></xsl:template>
<xsl:for-each> - Looping
XSLT:
<xsl:for-each select=“oranges”>
…
</xsl:for-each>
ColdFusion:
<cfloop list=“#oranges#”>
…
</cfloop>
<xsl:if> - Conditional Logic
XSLT:<xsl:template match="name">
<xsl:value-of select=“.”/>
<xsl:if test="position()!=last()">
,
</xsl:if>
</xsl:template>
ColdFusion:<cfset pos=0>
<cfloop list=“names”Index=“name”>
<cfset pos=incrementValue(pos)>
#name#
<cfif pos neq listlen(names)>
,
</cfif>
</cfloop>
Result:
Bob, Mary, John, Martha, Sue
<xsl:choose> - Conditional Logic
XSLT:<xsl:template match="order">
<xsl:choose> <xsl:when test="total <
5">(small)
</xsl:when> <xsl:when test="total <
10"> (medium) </xsl:when> <xsl:otherwise>
(large) </xsl:otherwise>
</xsl:choose> </xsl:template>
ColdFusion:<cfswitch expression=“order”>
<cfcase value=“1,2,3,4”>(small)
</cfcase><cfcase value=“5,6,7,8,9”>
(medium)</cfcase><cfdefaultcase>
(large)</cfdefaultcase>
</cfswitch>
<xsl:variable> - Variables
XSLT:<xsl:variable name="n" select="2"/>
...<xsl:value-of select="item[$n]"/>
ColdFusion:<cfset n=“2”>#listgetat(list,n)#
• Variables may be defined Globally or Locally• Local variables can be defined within a template body
Datatypes
• Variables are not statically typed, rather they take whatever type of value is assigned to them, just as ColdFusion does
• String• Number• Boolean• Node-Set
A set of nodes in the source tree
• Tree
Expressions
• Syntax of expressions is defined by the XPath Recommendation
• Used as attribute values for many XSLT elements
<xsl:value-of select=“($x + $y) *2”/>
Resources• XSLT – Programmer’s Reference by Michael Kay
(Wrox)*• W3C*
http://www.w3c.org
• Microsoft MSXML SDK Documentation*http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/xmlsdk/htm/sdk_intro_6g53.asp
• XSL-List http://www.mulberrytech.com/xsl/xsl-list
*I have relied heavily on these resources not only for the application development I have done, but also in preparation for this presentation. Many of the information and examples come from one of these sources.