xslt - hornad.fei.tuke.skporuban/wt/xslt.pdf · w3c xml importance of transformation presentation...

37
W3C XML XSLT Jaroslav Porubän 2008

Upload: others

Post on 12-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML

XSLT

Jaroslav Porubän2008

Page 2: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML XSL Overview

eXtensible Stylesheet Language A language for expressing

stylesheets Made of two parts

XSL Transformation (XSLT) XSL Formatting Objects (XSL-FO)

Page 3: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML XSLT - Transformation

XML language for transformation Transforming XML document into

Another XML document XHTML WML

HTML document Text

Page 4: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Importance of Transformation

Presentation Oriented Publishing XML document separates content from

presentation Transformations can be used to style

XML documents (HTML + CSS) Message Oriented Middleware

Different content model Different structural relationship Different vocabularies

Page 5: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML XSLT Operational Model

...<xsl:template match="TITLE"> <H3> <xsl:apply-templates/> </H3> <HR/></xsl:template>...

XSLTProcessor

INPUTXML

OUTPUT XML HTML XHTML WML text …

XSLStylesheet

Page 6: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML XSLT Processor

Piece of software Reads an XSLT stylesheet and input

XML document Converts the input document into an

output document According to the instruction given in

the stylesheet Called stylesheet processor

Page 7: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example - XML

<?xml version="1.0"?><people>

<person born="1912" died="1954"> <name> <first_name>Alan</first_name> <last_name>Turing</last_name> </name> <profession>computer scientist</profession> <profession>mathematician</profession> <profession>cryptographer</profession> </person>

<person born="1918" died="1988"> <name> <first_name>Richard</first_name> <middle_initial>M</middle_initial> <last_name>Feynman</last_name> </name> <profession>physicist</profession> <hobby>Playing the bongoes</hobby> </person>

</people>

Page 8: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 0

<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

</xsl:stylesheet> Applying empty stylesheet to any XML

document Elements are traversed sequentially Content of each element is put in output

Attributes are not traversed

Without any specific templates XSLT processor falls back to default behavior

Page 9: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML xsl:template Element

Controls which output is created from which input match attribute contains an XPath

expression XPath expression identifies input node

set it matches For each node in the node set, the

template contents (things between xsl:template tags) are instantiated and inserted into the output tree

Page 10: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 1

<?xml version="1.0"?><xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="people"> </xsl:template></xsl:stylesheet>

Page 11: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 2

<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transfor

m"> <xsl:template match="people"> Some people are here. </xsl:template></xsl:stylesheet>

Page 12: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 3

<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transfor

m"> <xsl:template match="person"> A Person </xsl:template></xsl:stylesheet> Whitespace outside of <person>

element preserved <person> element is replaced by

contents of the template

Page 13: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 4

<?xml version="1.0"?><xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="person"> <p>A Person</p> </xsl:template></xsl:stylesheet>

Page 14: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML xsl:value-of Element

Extracts the string value of an element or an attribute and writes it to output text content of the element after all

the tags have been removed and entity references are resolved

select attribute containing XPath expression identifies an element or an attribute It could be a node set, in which case,

the string value of first node is taken

Page 15: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 5

<?xml version="1.0"?> <xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="person"> <p> <xsl:value-of select="name"/> </p> </xsl:template></xsl:stylesheet>

Page 16: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML xsl:apply-templates Element

This element applies a template to the current element or to the current element's child nodes

If we add a select attribute to the <xsl:apply-templates> element, it will process only the child element that matches the value of the attribute

Page 17: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 6

<?xml version="1.0"?> <xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="person"> <p> <xsl:value-of select="name"/> </p> </xsl:template></xsl:stylesheet>

Page 18: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 7

<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="name"> <xsl:value-of select="last_name"/>, <xsl:value-of select="first_name"/> </xsl:template>

<!-- Apply templates only to name children --> <xsl:template match="person"> <xsl:apply-templates select="name"/> </xsl:template></xsl:stylesheet>

Page 19: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 8

<?xml version="1.0"?> <xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="people"> <html> <head><title>Famous Scientists</title></head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="person"> <xsl:apply-templates select="name"/> </xsl:template> <xsl:template match="name"> <p><xsl:value-of select="last_name"/>, <xsl:value-of select="first_name"/></p> </xsl:template></xsl:stylesheet>

Page 20: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 9

<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="people"> <html> <head><title>Famous Scientists</title></head> <body> <dl> <xsl:apply-templates/> </dl> </body> </html> </xsl:template>

<xsl:template match="person"> <dt><xsl:apply-templates select="name"/></dt> <dd><ul> <li>Born: <xsl:apply-templates select="@born"/></li> <li>Died: <xsl:apply-templates select="@died"/></li> </ul></dd> </xsl:template></xsl:stylesheet>

Page 21: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Modes

Same input content needs to appear multiple times in the output document formatted according to different templates Titles of chapters

Table of contents In the chapters themselves

mode attribute xsl:template xsl:apply-templates

Page 22: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 10

<xsl:template match="people"> <html> <head><title>Famous Scientists</title></head> <body> <ul>

<xsl:apply-templates select="person" mode="toc"/></ul>

<xsl:apply-templates select="person"/> </body> </html> </xsl:template>

<!-- Table of Contents Mode Templates --> <xsl:template match="person" mode="toc"> <xsl:apply-templates select="name" mode="toc"/> </xsl:template>

<xsl:template match="name" mode="toc"> <li><xsl:value-of select="last_name"/>, <xsl:value-of select="first_name"/></li> </xsl:template>

Page 23: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Filtering

Filtering can be done using XPath predicates

Page 24: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 11

<?xml version="1.0"?><xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="person"> <xsl:apply-templates select="*[not(self::hobby)]"/> </xsl:template></xsl:stylesheet>

Page 25: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML xsl:for-each Element

The XSL <xsl:for-each> element can be used to select every XML element of a specified node-set

Iterating through a node set The value of the select attribute

is an XPath expression

Page 26: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 12

<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/

XSL/Transform"> <xsl:template match="people"> <xsl:for-each select="person"> <xsl:value-of select="name"/> <xsl:value-of select="@born"/> </xsl:for-each> </xsl:template></xsl:stylesheet>

Page 27: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML xsl:if Element

Tests content for certain values<xsl:if test=XPath>

...</xsl:if>

The test attribute is required, the value is an XPath expression

Page 28: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 13

<?xml version="1.0"?><xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="people"> <xsl:for-each select="person"> <xsl:value-of select="name"/> <xsl:if test="@born='1912'"> Died in <xsl:value-of select="@died"/> </xsl:if> </xsl:for-each> </xsl:template></xsl:stylesheet>

Page 29: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML xsl:choose Element

Testing agains multiple values<xsl:choose> <xsl:when test=XPath> </xsl:when>

<xsl:when test=XPath> </xsl:when>

... <xsl:otherwise> </xsl:otherwise> </xsl:choose>

The test attribute is required, the value is an XPath expression

Page 30: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 14

<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="people"> <xsl:for-each select="person"> <xsl:value-of select="name"/> <xsl:choose> <xsl:when test="@born='1912'"> Died in <xsl:value-of select="@died"/> </xsl:when> <xsl:otherwise> Did not born in 1912 </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template></xsl:stylesheet>

Page 31: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML xsl:sort Element

XSLT provides a nice way to sort documents by element contents<xsl:sort select=selection></xsl:sort>

Sorting can only be done in the following constructs <xsl:apply-templates…/> <xsl:for-each …/>

Page 32: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 15

<?xml version="1.0"?> <xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="people"> <xsl:apply-templates>

<xsl:sort select="name"/> </xsl:apply-templates>

</xsl:template>

</xsl:stylesheet>

Page 33: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 16

<?xml version="1.0"?><xsl:stylesheet version="1.0“

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="people"> <xsl:apply-templates> <xsl:sort select="name"

order="descending" />

</xsl:apply-templates> </xsl:template></xsl:stylesheet>

Page 34: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML xsl:copy Element

Used for creating an XML Document The copying is done using this

construct:<xsl:copy></xsl:copy>

We will also specify to the processor that our output should be XML instead of HTML <xml:output method="xml"/>

Page 35: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 17

<?xml version="1.0"?><xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml"/> <xsl:template match="people"> <xsl:copy> <xsl:apply-templates> <xsl:sort select="name"/> </xsl:apply-templates> </xsl:copy> </xsl:template></xsl:stylesheet>

Page 36: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML Example – stylesheet 18

<?xml version="1.0"?><xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml"/> <xsl:template match="*"> <xsl:copy> <xsl:apply-templates> <xsl:sort select="name"/> </xsl:apply-templates> </xsl:copy> </xsl:template></xsl:stylesheet>

Page 37: XSLT - hornad.fei.tuke.skporuban/wt/XSLT.pdf · W3C XML Importance of Transformation Presentation Oriented Publishing XML document separates content from presentation Transformations

W3CXML

xml-stylesheet Processing Instruction

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="nakup.xsl"?><nakup> <osoba meno="Jano"> <polozka>chlieb</polozka> <polozka>sunka</polozka> <polozka>maslo</polozka> </osoba> <osoba meno="Mara"> <polozka>paradajka</polozka> <polozka>mlieko</polozka> </osoba></nakup>