Page: http://wiki.cocoondev.org/Wiki.jsp?page=FredericGlorieux , version: 5 on 
Thu May 15 11:51:23 2003 by FredericGlorieux

- # [UnderstandingCocoonMounts]
? ^

+ * [UnderstandingCocoonMounts]
? ^

- # [DataDebuggingTechnique]
? ^

+ * [DataDebuggingTechnique]
? ^

+ * [BeginnerSimpleXSLT]


Page: http://wiki.cocoondev.org/Wiki.jsp?page=BeginnerSimpleXSLT , version: 1 
on Thu May 15 11:48:31 2003 by FredericGlorieux

New page created:
+ !!! XSLT, how to start ?
+ 
+ I begin the page, in hope that some others will fill the holes (and correct 
my english).
+ 
+ !!!Principles
+ Before, you should know a bit of what XML looks like. So let's take a very 
short document
+ {{{
+ <article>
+   <title>BeginnerSimpleXSLT</title>
+   <author>FredericGlorieux</author>
+   <abstract>Dummy XML document</abstract>
+   <section>
+     <title>section 1</section>
+     <para>Some <bold>bold</bold> and <italic>italic</italic> text</para>
+   </section>
+ </article>
+ }}}
+ 
+ This doc is nicer than HTML, especially because I can change the Schema/DTD 
for my specific usage (<abstract/>, <author/>). Now, how to take advantage of 
this? XSLT, of course.
+ 
+ !!Root
+ This will be the root XSL document in which all snippets will now go.
+ {{{
+ <?xml version="1.0" encoding="UTF-8"?>
+ <xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
+   <xsl:output method="xml" encoding="UTF-8"/>
+   <!-- here put your templates -->
+ </xsl:stylesheet>
+ }}}
+ 
+ 
+ {{<?xml version="1.0" encoding="UTF-8"?>}} First declaration that all xml 
document should have.
+ Note the encoding precision, UTF-8 is default for XML.
+ But languages other than english could have some surprise in a
+ browser. For an XSL, let it as UTF-8, your XML editor should know it.
+ 
+ {{<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>}}
+ Root element whith a namespace declaration (XML-spec).
+ All elements beginning
+ by xsl:* is mapped as the namespace-uri 
"http://www.w3.org/1999/XSL/Transform";.
+ This is the only string identifying your tags as xslt instructions to process.
+ That means, you can also say
+ {{<myprefix:stylesheet version="1.0" 
xmlns:myprefix="http://www.w3.org/1999/XSL/Transform"/>}}
+ Could be useful when an xsl should output an xsl.
+ But before that, stay classic, it will be easier for copy/paste (by the way, 
keep also the @version attribute). 
+ 
+ {{<xsl:output method="xml" encoding="UTF-8"/>}}
+ An xsl:stylesheet is a common XML document, that will be processed.
+ All xsl:* will now be instructions to transform from an input to an output.
+ Input should be valid XML, 
+ output could be text, xml, html (with unclosed tags, character entities like 
&nbsp; ...).
+ This is the reason of @method attribute.
+ Note @encoding, one more time, let UTF-8 for xml usages, iso-8859-1 could be 
useful if
+ strange browser display.
+ 
+ !!Pull
+ 
+ If I put some nice tags in my XML documents, it's probably to use them. 
Example, I want to extract title|author|abstract of my articles to have a short 
version. So let's write my first template to __pull__ what I need in the source 
to output it.
+ 
+ 
+ !match, select, XPath
+ 
+ {{{
+ <!-- this template supposed to be in a xsl:stylesheet described upper --->
+ <xsl:template match="/">
+ <!-- here, we are at root of the xml input, before the first element -->
+   <xsl:copy-of select="."/>
+ </xsl:template>
+ }}}
+ 
+ {{<xsl:template match="/">}}
+ The xslt engine is a kind of filter, processing an xml input,
+ with the stylesheet instructions. Imagine a complex search/replace, except 
it's not working
+ on flat text, but on a tree of elements.
+ At first, the engine search for a template matching the root.
+ Thats what is provide here, in the @match, with the "/" value. 
+ Unix users will fastly understand the syntax.
+ Now, the current node will be the root of the xml input (like after a "change 
directory").
+ 
+ In fact, this very complex template is doing: __nothing__. Output should be 
quite exactly the input in XML understanding, except encoding or some other 
properties specified in the xsl:output instruction (only important for text 
instance of an XML object). Not so unuseful... 
+ 
+ It's also a fast way to debug XSL, to say "Where am I?", "What's in?". The 
instruction ''copy-of'' output the nodes selected by the expression in @select, 
here: ".". The dot express current node. It's another important character of 
expressions, called XPath syntax.
+ 
+ But don't forget what we want. From the input given upper, imagine we want 
this short output, with no more content.
+ 
+ {{{
+ <short>
+   <title>BeginnerSimpleXSLT</title>
+   <author>FredericGlorieux</author>
+   <abstract>Dummy XML document</abstract>
+ </short>
+ }}}
+ 
+ This template should do the job
+ 
+ {{{
+ <xsl:template match="/article">
+ <!-- here, we are after the first element -->
+   <short>
+     <xsl:copy-of select="title"/>
+     <xsl:copy-of select="author"/>
+     <xsl:copy-of select="abstract"/>
+   </short>
+ </xsl:template>
+ }}}
+ 
+ Now, I'm matching XML input with an {{<article/>}} root element (happily, 
it's my input), this will change the current node inside the template for all 
new XPath expression (ex: @select). Note alse the <short/> element, which is 
not in XSLT namespace (no xsl: prefix), so the engine will understand it as an 
output. And now point the three copy-of, working in the article context, so the 
@select are respectivly catching and ouputing the {{<title/>, <author/>, 
<abstract/>}} nodes.
+ 
+ !!Push
+ 
+ Pocess for an html output.
+ 
+ !!!Resources
+ 
+ Links.
+ 


Reply via email to