1 / 16

XSLT Design Patterns

XSLT Design Patterns. Stylesheet Design Patterns Ref: XSLT by Michael Kay ISBN:1-961005-06-7. Four common design patterns for XSLT Stylesheets The majority of stylesheets fall into four major categories: Fill-in-Blank Stylesheets Navigational stylesheets Rule-based stylesheets

Download Presentation

XSLT Design Patterns

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. XSLT Design Patterns

  2. Stylesheet Design PatternsRef: XSLT by Michael KayISBN:1-961005-06-7 • Four common design patterns for XSLT Stylesheets • The majority of stylesheets fall into four major categories: • Fill-in-Blank Stylesheets • Navigational stylesheets • Rule-based stylesheets • Computational stylesheets

  3. Stylesheet Design Patterns • Fill-in-Blank Stylesheets: • The template looks largely like a standard HTML file, sprinkled with a few extra control statements. • Extra tags are used to retrieve variable data and insert it at a particular point in the HTML data page. • The stylesheet has the same structure as the desired output. • Fixed content is included directly in the stylesheet as text. • Repeated sections (like rows in a table) can be enclosed by <xsl:for-each> tags.

  4. Catalog.xml <?xml version="1.0"?> <?xml-stylesheet type="text/css" href="booklists.css" ?> <BookCatalog> <Book> <Title>Billions Of Stars</Title> <Author>Susan Boggs</Author> <Date>1983</Date> <ISBN>1-5555-555-2</ISBN> <Publisher>Anderson-Wells</Publisher> </Book> <Book> <Title>Adventures Of Freddie the Frog</Title> <Author>John Smith</Author> <Date>1977</Date> <ISBN>0-444-4444-4</ISBN> <Publisher>Kidder Publishing Co.</Publisher> </Book> </BookCatalog> Booklists.css BookCatalog {display:block;border:solid blue} Book {display:block} Title { display:block; font-family:Arial;color:Red } Author {display:block } Date,ISBN { display:none } Publisher { display: block; font-style:italic } Example 1

  5. Example 2 - Office.xml <?xml version="1.0"?> <officepersonnel> <person> <name> Mary Jones </name> <title> CEO </title> <reports> <person> <name> Susan Mills </name> <title> Director </title> <reports> <person> <name> John Deen </name> <title> Engineer </title> </person> </reports> </person> <person> <name>David Smith </name> <title> Director </title> <reports> <person> <name> Joan Mist </name> <title> Engineer </title> </person> </reports> </person> </reports> </person> </officepersonnel>

  6. Example2 - Office.xsl <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <html><head><title> Management </title></head> <body> <table border="2" cellpadding="5"> <tr> <th>Name></th> <th>Title</th> <th> Reports To </th> </tr> <xsl:for-each select="//person"> <tr> <td><xsl:value-of select="name"/></td> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="ancestor::person[1]/name"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

  7. Stylesheet Design Patterns • Navigational Stylesheets: • Is essentially output-oriented. • Named templates can be used as subroutines to perform some of the commonly-needed tasks. • Looks more like a conventional procedural program with variables, conditional statements, loops and subroutine calls. • Often used to produce reports on data-oriented XML documents, where the structure of the source document is regular and predictable.

  8. Example • Example on slide 9 • The example shows BookSales.xml and BookSales.xsl that generates an HTML output showing book sales by month.

  9. BookSales.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="011231.xsl"?> <sales> <summary> <heading>Book Store</heading> <subhead>Sales Report</subhead> <description>Sales Report for two months</description> </summary> <data> <month><name>January 2002</name> <week number="1" books_sold="1000" /> <week number="2" books_sold="2000" /> <week number="3" books_sold="3000" /> <week number="4" books_sold="4000" /> </month> <month> <name> April 2002</name> <week number="1" books_sold="700" /> <week number="2" books_sold="2000" /> <week number="3" books_sold="1000" /> <week number="4" books_sold="5000" /> </month> </data> </sales> BookSales.xsl <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html"/> <xsl:template match="/"> <HTML> <BODY> <xsl:variable name="Space" select="' '"/> <xsl:for-each select="//data/month"> <br/><xsl:value-of select="name"/> <xsl:value-of select="$Space"/> <xsl:value-of select="format-number(sum(week/@books_sold), '###,###')"/> </xsl:for-each> </BODY> </HTML> </xsl:template> </xsl:stylesheet> Example

  10. Stylesheet Design Patterns • Rule-based Stylesheets: • Consists primarily of rules describing how different features of the source document should be processed. • The stylesheet is not structured according to the desired output layout. • Makes minimal assumptions about the structure of the source or the result documents. • Are most useful when processing source documents whose structure is flexible or unpredictable, or which may change a lot in the future.

  11. Example • Example shown on slides 12,13 and 14. • In this example, the stylesheet, BookCatalog.xsl generates a file called BookCatalog.xml (slide 14) from the input file, ProductCatalog.xml (on slide 12), using template rules.

  12. Example – ProductCatalog.xml <?xml version="1.0"?> <catalog> <product code="1234" category="tools"> <description>Hammer</description> <weight units="lbs">0.5</weight> <price>12.00</price> </product> <product code="0000" category="tools"> <description>Nut</description> <weight units="lbs">0.1</weight> <price>2.00</price> </product> <product code="7777" category="tools"> <description>Bolt</description> <weight units="lbs">0.1</weight> <price>1.00</price> </product> <book> <title>Cosmos</title> <author >Sagan</author> </book> <book> <title>XML Made Easy</title> <author >Joe Bloggs</author> </book> </catalog>

  13. <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml"/> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="catalog"> <xsl:element name="BookCatalog"> <xsl:apply-templates/> </xsl:element> </xsl:template> <xsl:template match="book"> <xsl:element name="book"> <xsl:apply-templates/> </xsl:element> </xsl:template> <xsl:template match="title"> <xsl:element name="title"> <xsl:value-of select="."/> </xsl:element> </xsl:template> <xsl:template match="author"> <xsl:element name="author"> <xsl:value-of select="."/> </xsl:element> </xsl:template> <xsl:template match="text()"> </xsl:template> </xsl:stylesheet> BookCatalog.xsl

  14. BookCatalog.xml <?xml version="1.0" encoding="utf-8"?> <BookCatalog><book><title>Cosmos</title><author>Sagan</author></book><book><title>XML Made Easy</title><author>Joe Bloggs</author></book> </BookCatalog>

  15. Stylesheet Design Patterns • Computational Stylesheets: • Are the most complex of the four design patterns. • They are used when there is a need to generate nodes in the result tree that do not correspond directly to nodes in the source tree. • Examples: • A comma-separated list of items in the source are to be displayed as bulleted list of output. • Using complex aggregation of data • Use functional programming concepts and recursion to accomplish the tasks.

  16. Examplecalc.xsl <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html"/> <xsl:template match="/"> <html><head><title>Calculation</title></head> <body> 16 / 2 = <xsl:variable name="result"> <xsl:call-template name="NumDiv2"> <xsl:with-param name="N" select="16"/> </xsl:call-template> </xsl:variable> <xsl:value-of select="$result"/> </body> </htmlL> </xsl:template> <xsl:template name="NumDiv2"> <xsl:param name="N"/> <xsl:value-of select="$N div 2"/> </xsl:template> </xsl:stylesheet>

More Related