1 / 53

4 Document Transformations

4 Document Transformations. XSLT (1.0 W3C Rec , Nov 1999; XSLT 2.0 Rec , Jan 2007) A language for transforming XML documents initial main purpose to support XSL formatting used mainly for independent transformations (esp. XML → HTML)

ozzy
Download Presentation

4 Document Transformations

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. 4 Document Transformations • XSLT (1.0 W3C Rec, Nov 1999; XSLT 2.0 Rec, Jan 2007) • A language for transforming XML documents • initial main purpose to support XSL formatting • used mainly for independent transformations(esp. XML → HTML) • Our goal: to understand the basic model and central features of XSLT • Overview and an example • Data model and processing model 4: Overview of XSLT

  2. XSLT: Overview • XSLT uses XML syntax for expressing transformations • of a document source tree into a result tree • result and source are separate trees • by template rules • Each template rule has • apattern (matched against nodes of the source tree) • a templateas a body • instantiated to create fragments of the result tree 4: Overview of XSLT

  3. Overview of XSLT Transformation 4: Overview of XSLT

  4. Style Sheets and Template Rules • Anxsl:stylesheet(orxsl:transform) consists of template rules: <xsl:template match="Pattern"> Template<!--well-formed XML!--> </xsl:template> • Rule applied to nodes of the source tree matched by the Pattern • expressed using XPath (XML Path Language) • Template consists of • literal result tree fragments (elements, text), and • XSLT instructions for controlling further processing conventional XSLT namespace prefix 4: Overview of XSLT

  5. XPath in a Nutshell • XPath 1.0 W3C Rec. 11/99 (2.0 Rec. 1/07) • a compact non-XML syntax for addressing parts of XML documents as node-sets( sequences in 2.0) • used also in other W3C languages • Specs for hyperlinks in XML: XLink (Rec. '01) and XPointer (Rec. '03) • XQuery (Rec. 1/07; extends XPath 2.0) • also typical operations on strings, numbers and truth values 4: Overview of XSLT

  6. Early impressions of XSLT 2.0 • Somewhat more advanced & flexible than 1.0 • Complexity of 1.0 vs. 2.0 specs (as pages): Data Model ~ 80 XPath 2.0 ~100 Funcs & opers ~160 XSLT 2.0 ~280---------------------------------- ~620 • XPath 1.0 ~ 30 • XSLT 1.0 ~ 90 • ------------------------ • Total ~ 120 4: Overview of XSLT

  7. An XSL transformation example • Transform below document to HTML: <?xml-stylesheet type="text/xsl" href="walsh.xsl" ?> <!-- Modified from an example by Norman Walsh --> <doc><title>My Document</title> <para>This is a <em>short</em> document.</para> <para>It only exists to <em>demonstrate a <em>simple</em> XML document</em>.</para> <figure><title>My Figure</title> <graphic fileref="myfig.jpg"/></figure> </doc> 4: Overview of XSLT

  8. Result (edited for readability) <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD><TITLE>A Document</TITLE></HEAD> <BODY> <H1>My Document</H1> <P>This is a <I>short</I> document.</P> <P>It only exists to <I>demonstrate a <B>simple</B> XML document</I>.</P> <DIV> <B>Figure 1. </B> <BR> <IMG src="myfig.jpg"><B>My Figure</B> </DIV> </BODY> </HTML> 4: Overview of XSLT

  9. Example style sheet begins <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <!-- rule for root --> <HTML><HEAD><TITLE>A Document</TITLE></HEAD> <BODY> <!-- process root's children here: --> <xsl:apply-templates /> </BODY> </HTML> </xsl:template> <xsl:template match="doc/title"> <H1><xsl:apply-templates /></H1> </xsl:template> 4: Overview of XSLT

  10. Example (parasand emphs) <xsl:template match="para"> <P><xsl:apply-templates /></P></xsl:template> <xsl:template match="em"> <I><xsl:apply-templates /></I></xsl:template> <xsl:template match="em/em"> <B><xsl:apply-templates /></B></xsl:template> 4: Overview of XSLT

  11. Example (figures) <xsl:template match="figure"> <!-- Insert a bold caption of form 'Figure Num. ' by counting all figures in the document: --><DIV><B>Figure <xsl:number level="any" count="figure"/>. </B> <BR /> <!-- Process the children of figure, --> <!-- the 'graphic' child first: --> <xsl:apply-templates select="graphic" /> <!-- then the 'title' child: --> <xsl:apply-templates select="title" /> </DIV> </xsl:template> 4: Overview of XSLT

  12. Example (end of style sheet) <xsl:template match="graphic"> <IMG src="{@fileref}" /> <!-- Assign the value of attribute 'fileref' to attribute 'src' --> </xsl:template><xsl:template match="figure/title"> <B> <xsl:apply-templates /> </B></xsl:template> </xsl:stylesheet> 4: Overview of XSLT

  13. Result (edited for readability) <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD><TITLE>A Document</TITLE></HEAD> <BODY> <H1>My Document</H1> <P>This is a <I>short</I> document.</P> <P>It only exists to <I>demonstrate a <B>simple</B> XML document</I>.</P> <DIV> <B>Figure 1. </B> <BR> <IMG src="myfig.jpg"><B>My Figure</B> </DIV> </BODY> </HTML> 4: Overview of XSLT

  14. What use of XSL(T)? • XSL can be used in different ways • for offline document formatting • produce, say, PDF from XML by an XSL style sheet (using XSLT + XSL formatting objects) • for offline document manipulation • transform XML into other form (XML/HTML/text) using XSLT • for online document delivery • on a Web server • in a Web browser (if the browser supports) 4: Overview of XSLT

  15. XSLT in online document delivery • XSLT in a browser • defines rendering of XML documents • supported by current major browsers • transformation of XML to HTML on the fly in browser • XSLT on a Web server • an HTTP request served by transforming XML on the fly to HTML (or other format) on the server 4: Overview of XSLT

  16. Main Aspects of XSLT • Data model • How is document data viewed in XSLT? • Selection mechanism • How are document parts selected for processing? • Matching • How are the template rules selected? • Processing model • How does the XSLT execution proceed? 4: Overview of XSLT

  17. Data Model of XSLT and XPath • Documents are viewed as treesmade of seven types of nodes: • root (additional parent of document element) • element nodes • attribute nodes • text nodes • comments, processing instructions and namespaces • NB: Entity references are expanded-> no entity nodes 4: Overview of XSLT

  18. XSLT/XPath document trees • Defined in Sect. 5 of XPath 1.0 spec • for XSLT/XPath 2.0 & XQuery in their joint Data Model • Element nodes have elements, text nodes, comments and processing instructions of their (direct) content as their children • NB: attribute nodes are not children (but have a parent) • the value of an element node is the concatenation of its text-node descendants 4: Overview of XSLT

  19. XSLT/XPath Trees • Similar to the DOM, with slight differences: • 7 vs 12 node types • value of an element: its full textual content (In DOM: null) • names for text nodes, comment nodes, etc are empty(In DOM: "#text", "#comment", etc.) • Document order of nodes: • root node first, otherwise according to the order of the first character of the XML markup for each node • > element node precedes it's attribute nodes, which precede any content nodes of the element 4: Overview of XSLT

  20. 1st 2nd 4th 3rd 7th 5th or 6th 5th or 6th XSLT/XPath trees: Example <article>Written by <fig file="pekka.jpg" caption="The Lecturer" /> the lecturer.</article> null in DOM 4: Overview of XSLT

  21. Main Aspects of XSLT • Data model • Selection mechanism • How are document parts selected for processing? • A: With XPath expressions • Matching • Processing model 4: Overview of XSLT

  22. XPath Expressions • Used for selecting source tree nodes, conditional processing, and generating new text content • return node-sets, truth values, numbers or strings • can select any parts of source tree (node-set) for processing, using … • Location paths • the most characteristic of XPath expressions • evaluated with respect to a context node • often the current node matched by the template pattern • result: set of nodes selected by the location path 4: Overview of XSLT

  23. Location paths • Consist of location steps separated by '/' • each step produces a set of nodes • steps evaluated left-to-right, each node in turn as context node • path begins with ‘/’ -> root is the first context node • Complete location step: AxisName::NodeTest ([PredicateExpr])* • axis specifies the tree relationship between the context node and the selected nodes • node test restricts the type and and name of nodes • filtered further by 0 or more predicates 4: Overview of XSLT

  24. Location steps: Axes • In total 13 axes (~ directions in tree) • for staying at the context node: • self • for going downwards: • child, descendant, descendant-or-self • for going upwards: • parent, ancestor, ancestor-or-self • for moving towards start/end of the document: • preceding-sibling, following-sibling, preceding, following • “Special” axes • attribute, namespace 4: Overview of XSLT

  25. The simplest axis,self:: XPath Axes and Their Orientation • Ordinary axes oriented away from context node(attribute and namespace axes are unordered) • the position() for the closest node = 1 • for the most remote node, position() = last() 4: Overview of XSLT

  26. XPath Axes and Their Orientation • parent::(exists for every node except the root) 1 Context node: 4: Overview of XSLT

  27. ancestor-or-self:: XPath Axes and Their Orientation • ancestor:: 4: Overview of XSLT

  28. XPath Axes and Their Orientation • child:: 4: Overview of XSLT

  29. descendant-or-self:: XPath Axes and Their Orientation • descendant:: 4: Overview of XSLT

  30. following-sibling:: XPath Axes and Their Orientation • preceding-sibling:: 4: Overview of XSLT

  31. preceding:: XPath Axes and Their Orientation • following:: 4: Overview of XSLT

  32. Location paths: Node tests • Location paths: [/]Step/.../Step, where • Step = [axis::] NodeTest ('['Pred']')* • Node tests (slightly simplified) • Name: any element node with that Name(on an attribute axis, any attribute node with that Name) • *: any element(any attribute node on an attribute axis) • text(): any text node • comment(): any comment node • processing-instruction(): any processing instruction • node(): any node of any type 4: Overview of XSLT

  33. Location paths: Abbreviations • Abbreviations in location steps • 'child::' can be omitted • 'attribute::'can be shortened to '@' • 'self::node()'can be shortened to '.'(period) • 'parent::node()'can be shortened to '..' • Predicate '[position()=n]' for testing occurrence position n can be shortened to '[n]' • '/descendant-or-self::node()/'shortened to '//' ->Syntax resembles slightly Linux/Unix file path names 4: Overview of XSLT

  34. A A Semantics of Location Paths (example) context node {2, 5, 7} 1 5 2 7 B C final value: {2} B 3 4 6 C 8 B "txt" */node()/parent::B[child::A] value after each step: {3, 4, 6, 8} {2, 5, 7} 4: Overview of XSLT

  35. Location path examples (1) • chapchildren of current node: ./chap(or simply chap, or./child::*[name()='chap']) • The document element (child element of root node):/* • Elements chapteranywhere (below the root): //chapter(.//chapter->anywhere below the context node) • All chapters oftypeAorB: //chapter[@type='A' or @type='B'] • the previouschaptersibling: preceding-sibling::chapter[1] 4: Overview of XSLT

  36. Location path examples (2) • All child elements having an attributetype: *[@type] NB: Node sets as truth values: empty - false; non-empty - true • All child elements of any author child: author/* • sections whosetype attribute equals styleattribute of the document element: //sect[@type = /*/@style] • First authorchild, and previous to the last: author[1], author[last()-1] 4: Overview of XSLT

  37. Main Aspects of XSLT • Data model • Selection mechanism • Matching • How are the rules selected? • A: With Patterns • Processing model 4: Overview of XSLT

  38. XSLT Patterns • Main use in match attributes of template rules: <xsl:template match="Pattern"> • also used for numbering (Which parts are counted?) • Restricted location path expressions: • steps with childand attributeaxes only, separated by '//' or '/' • but arbitrary predicates in [Expr]allowed • may begin withid('IdVal')(for selecting element nodes by ID attribute values) • alternative patterns separated by '|' (~ node-set union) 4: Overview of XSLT

  39. XSLT Patterns: Semantics • A node n matches a pattern P if n would be selected by P in some context • > the context has to be an ancestor of n • can be tested by considering Steps of P right-to-left and checking that they can be satisfied along a path from n towards root 4: Overview of XSLT

  40. XSLT Patterns: Examples • match="sect-head | section/head" • matches any element with namesect-head, and anyheadelements directly below asection • Pattern/appendix//ulist/item[1]matches the first itemelement in aulistwhich is contained in anappendix, which is the document element 4: Overview of XSLT

  41. Main Aspects of XSLT • Data model • Selection mechanism • Matching • Processing model • How does the XSLT execution proceed? 4: Overview of XSLT

  42. XSLT Processing Model 0. Parse the document into a source tree 1. Construct the result tree by applying template rules to the source tree 2. Serialize the result tree (as XML, HTML or text) 4: Overview of XSLT

  43. Overview of XSLT Transformation 4: Overview of XSLT

  44. XSLT Result Construction Algorithm (sketch) ResultTree:= ApplTempls([root of the source tree]); procApplTempls(CNL: list of Nodes) returns list of Nodes: ResList:= emptyNodeList(); for each Node cnin CNL do // current node in current node list Find matching template rule (of highest priority; See next) Instantiate its template T in context (cn, CNL), and add to ResList; Replace each <apply-templates select="E"/> in T by ApplTempls(L), where L = value of expr E in context (cn, CNL); end for; returnResList; Example: seenext 4: Overview of XSLT

  45. Rules:<xsl:templatematch="/"> <X> <xsl:apply-templatesselect="A/B" /> </X></xsl:template><xsl:templatematch="B"> <Y pos="{position()}"> <xsl:apply-templates /> </Y></xsl:template> <xsl:templatematch="C"> <Z pos="{position()}"> <xsl:apply-templates /> </Z></xsl:template> • Source: <A><B><C /></B><B><C /></B></A> • Result: 4: Overview of XSLT

  46. Selecting one of matching rules • Priority of a rule can be specified explicitly: <xsl:template priority="2.0" … • Default priorities based on the match pattern: • 0 for simple name tests (likepara, @href) • negative for less specific patterns e.g., *, @*, node() • 0.5 for more complex patterns • Multiple matching rules with the same maximum priority is an error - Processor may (quietly!) choose the last one of them 4: Overview of XSLT

  47. Application of template rules • Without a selectattribute <xsl:apply-templates />processes all children of current node ~ select="child::node()")  “default traversal”: top-down • Nodes are processed in document order (if not sorted with xsl:sort) • Built-in rules support the top-down traversal if no matching rules are found 4: Overview of XSLT

  48. Built-In Default Rules • For the root and element nodes:<xsl:template match="/ | *"> <xsl:apply-templates /> </xsl:template> • For text and attribute nodes:<xsl:template match="text() | @*"> <!-- Insert the string value of current node: --> <xsl:value-of select="." /> </xsl:template> • Low priority->can be overridden 4: Overview of XSLT

  49. A (Tricky) Processing Example • Consider transforming document <A><B>b1</B><C>cc<B>b2</B></C><D>dd</D><B>b3</B></A> with the below rules: <xsl:template match="/"> <!-- Rule 1 --> <R><xsl:apply-templates select="//C" /></R> </xsl:template> <xsl:template match="C"> <!-- Rule 2 --> <NewC>New: <xsl:apply-templates select="../B" /> <xsl:apply-templates /> </NewC> </xsl:template> 4: Overview of XSLT

  50. Processing example (2) • The result <R><NewC>New: b1b3ccb2</NewC></R> is obtained as follows: 1. Rule 1 matches the root node -> Element node R is added to the result; Instruction <xsl:apply-templates select="//C" />selects the (only)Celement for processing (which will produce the contents of node R). 2. Rule 2 with pattern"C"creates into result tree aNewCelement node with text node "New: "as its first child. 4: Overview of XSLT

More Related