crash course in xslt - stuff.mit.edu: students' portal · 1 crash course in xslt: overview of...

35
1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007 David Z. Maze

Upload: vophuc

Post on 19-Jul-2018

231 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

Crash Course in XSLTOverview of XML and XSLTJan. 15, 2007David Z. Maze

Page 2: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

2 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

What is XSLT?* "XML Stylesheet Language: Transformations"* Convert XML to XML

* ...to XHTML* ...to XSL:FO (...to PDF)* ...to other XML

* Convert XML to HTML* Convert XML to text* Convert XML to LaTeX, etc. (with care!)* Language has XML syntax* Accessible via C, Java, C#, standalone interpreters, dedicated

hardware

Page 3: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

3 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

Use Case: DocumentsXML Source

XSL:FO

PDF

HTML

xsltproc xsltproc

fop

Page 4: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

4 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

Use Case: XML to XML* Application server expects SOAP-formatted message* Change SOAP headers* Convert from a different SOAP (or non-SOAP) format

Page 5: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

5 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

Class Structure* Three sessions, 15, 17, 22 January at 8:00* Today: XML, Namespaces, XPath* Wednesday: XSLT* Next week: Details* http://stuff.mit.edu/iap/xslt/

Page 6: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

6 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

Some XML Specs* Extensible Markup Language (XML) 1.0http://www.w3.org/TR/xml

* Namespaces in XML 1.0http://www.w3.org/TR/xml-names

* XML Path Language (XPath) 1.0http://www.w3.org/TR/xpath

* Extensible Stylesheet Language: Transformations (XSLT) 1.0http://www.w3.org/TR/xslt

Page 7: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

7 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

What's in XML?<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="text"/><xsl:template match="/"><xsl:text>Hello, world!</xsl:text>

</xsl:template></xsl:stylesheet>

Page 8: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

8 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

What's in XML? Elements<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="text"/><xsl:template match="/"><xsl:text>Hello, world!</xsl:text>

</xsl:template></xsl:stylesheet>* Elements are arranged in a tree structure* Exactly one document element* Every element has a parent* Elements can have children that are text or other elements* Tags are paired <tag>...</tag>* Empty element shorthand <tag/>

Page 9: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

9 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

What's in XML? Attributes<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="text"/><xsl:template match="/"><xsl:text>Hello, world!</xsl:text>

</xsl:template></xsl:stylesheet>* Attributes are "properties" of elements* Meaning is typically specific to containing element* Value always quoted, either single or double quotes* Only has a text value* Has a parent element

Page 10: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

10 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

What's in XML? Text<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="text"/><xsl:template match="/"><xsl:text>Hello, world!</xsl:text>

</xsl:template></xsl:stylesheet>* Text can appear inside elements* Mixed content: both text and elements appear inside the same

element (e.g., XHTML's <p> tag)* Text nodes always have a parent element* Entities let you write "forbidden" characters: &lt; for <, &gt; for>, &amp; for &, &apos; for ', &quot; for "

Page 11: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

11 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

XML Namespaces* Every element and attribute has a qualified name* (XPath spec says "expanded name" to same effect)* Three parts: namespace prefix, namespace URI, local name

Page 12: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

12 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

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

* Element's local name is stylesheet, prefix is xsl, namespaceURI is XSLT's

* Namespace-qualified names pfx:name must have a namespacebinding xmlns:pfx="urn:some:namespace" on the currentelement or an ancestor

Page 13: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

13 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

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

* Element's local name is stylesheet, prefix is none, namespaceURI is XSLT's

* Attribute's local name is version, prefix is none, namespaceURI is none

* Default namespace doesn't apply to attributes

Page 14: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

14 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

Namespace Bindings are Inherited<root xsl:version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:stylesheet version="1.0">

* Root element's local name is root, prefix is none, namespaceURI is none

* xsl:version attribute has XSLT namespace* Child element's local name is stylesheet, prefix is xsl,

namespace URI is XSLT's* version attribute has null namespace* Can't have two attributes on the same element with same

expanded name

Page 15: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

15 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

XPath Data ModelROOT

ELT xsl:stylesheet

ATTversion

ELT xsl:output

ATTmethod

ELT xsl:template

ATTmatch

ELT xsl:text

TXT

* Nodes have a type, name, stringvalue

* Fundamental data type is node set

Page 16: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

16 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

XPath Syntax* A path has a series of steps* start/step/step/...* Each step has an axis and a name (or * or pfx:*)* axis::pfx:lcl[pred]* /child::xsl:stylesheet/child::xsl:template* /descendant::*[attribute::id]* Names always match by expanded name; namespace prefixes

in expression and document need to be bound to the samenamespace

* Trivial axis: self

Page 17: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

17 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

XPath Axes: ChildROOT

ELT xsl:stylesheet

ATTversion

ELT xsl:output

ATTmethod

ELT xsl:template

ATTmatch

ELT xsl:text

TXT

* Child step goes from element or rootnode to its element or text children

* Shorthand: name with no axisspecifier means child::name

Page 18: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

18 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

XPath Axes: AttributeROOT

ELT xsl:stylesheet

ATTversion

ELT xsl:output

ATTmethod

ELT xsl:template

ATTmatch

ELT xsl:text

TXT

* Attribute step goes from element nodeto its attribute children

* Shorthand: @name meansattribute::name

Page 19: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

19 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

XPath Axes: ParentROOT

ELT xsl:stylesheet

ATTversion

ELT xsl:output

ATTmethod

ELT xsl:template

ATTmatch

ELT xsl:text

TXT

* Parent step goes from any node to itsimmediate element or root parent

Page 20: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

20 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

XPath Axes: Descendant (Ancestor)ROOT

ELT xsl:stylesheet

ATTversion

ELT xsl:output

ATTmethod

ELT xsl:template

ATTmatch

ELT xsl:text

TXT

* Descendant step goes from elementor root node to its element or textchildren, and their children, and...

* Descendant-or-self step also includescurrent node

* Ancestor step goes from any node toits parent, and its parent, and...

* Ancestor-or-self step also includescurrent node

* Shorthand: foo//baris reallyfoo/descendant-or-self::*/child::bar

Page 21: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

21 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

XPath Axes: Following (Preceding) SiblingROOT

ELT xsl:stylesheet

ATTversion

ELT xsl:output

ATTmethod

ELT xsl:template

ATTmatch

ELT xsl:text

TXT

* Following sibling step goes fromelement or text node to followingelement or text nodes with the sameparent

* Preceding sibling is similar

Page 22: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

22 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

XPath Axes: Following (Preceding)ROOT

ELT xsl:stylesheet

ATTversion

ELT xsl:output

ATTmethod

ELT xsl:template

ATTmatch

ELT xsl:text

TXT

* Following step goes from element ortext node to following element or textnodes anywhere in the document

* Preceding is similar* In practice, probably the most

expensive of the axes

Page 23: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

23 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

XPath EvaluationROOT

ELT xsl:stylesheet

ATTversion

ELT xsl:output

ATTmethod

ELT xsl:template

ATTmatch

ELT xsl:text

TXT

* //@match* /descendant-or-self::*/attribute::match

Page 24: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

24 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

XPath EvaluationROOT

ELT xsl:stylesheet

ATTversion

ELT xsl:output

ATTmethod

ELT xsl:template

ATTmatch

ELT xsl:text

TXT

* //@match* /descendant-or-self::*/attribute::match

Page 25: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

25 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

XPath EvaluationROOT

ELT xsl:stylesheet

ATTversion

ELT xsl:output

ATTmethod

ELT xsl:template

ATTmatch

ELT xsl:text

TXT

* //@match* /descendant-or-self::*/attribute::match

Page 26: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

26 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

XPath EvaluationROOT

ELT xsl:stylesheet

ATTversion

ELT xsl:output

ATTmethod

ELT xsl:template

ATTmatch

ELT xsl:text

TXT

* //@match* /descendant-or-self::*/attribute::match

Page 27: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

27 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

XPath Predicates* Only consider nodes where some expression is true* Wider expression language here* Node sets are considered "true" if non-empty* Strings are considered "true" if non-empty

Page 28: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

28 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

XPath PredicatesROOT

ELT xsl:stylesheet

ATTversion

ELT xsl:output

ATTmethod

ELT xsl:template

ATTmatch

ELT xsl:text

TXT

* //*[@match]* Each descendant node is considered

the context node for evaluating theattribute step

* "Set of element nodes anywhere inthe document such that, for eachnode, there is at least one attributenamed match"

Page 29: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

29 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

XPath Union* a|*[@foo]* "All a's, plus all children that have a foo attribute"* If any node is in both sets, it only appears in the result once

Page 30: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

30 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

More XPath Expressions* count(): size of parameter node set* local-name(), namespace-uri()* position(), last() within current node set* Equality, comparison (a &lt; 3)* Numeric operations(+ - * div)* $variable

Page 31: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

31 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

More Little Details* Predicate ...[1] means ...[position() = 1]* Similarly child::foo[last()]* Paths can begin with /, $var, or nothing

Page 32: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

32 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

Caution the first<a><b>1</b><b>2</b>

</a>

* /a matches the root element* /a[b = 1] does too* /a[b != 1] does too!* /a[not(b = 1)] doesn't

Page 33: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

33 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

Caution the second<a><b><c/>

</b><b><c/>

</b></a>

* //c matches both c elements* e.g. /a/b[1] matches only the first b* //c[1] matches both cs!* /descendant-or-self::*/child::c[position() = 1]

* Consider (//c)[1]

Page 34: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

34 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

What Haven't I Said?* XML character entities, e.g. &#x00A0;* XML processing instructions* XML DTDs* XPath namespace axis

Page 35: Crash Course in XSLT - stuff.mit.edu: students' portal · 1 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007 Crash Course in XSLT Overview of XML and XSLT Jan. 15, 2007

35 Crash Course in XSLT: Overview of XML and XSLT Jan. 15, 2007

Next Time* So far: XPath in isolation* Next time: XSLT!