1<html><head>
2      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3   <title>Chapter 4. The Template System</title><link rel="stylesheet" href="reference.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.37"><link rel="home" href="index.html" title="DocBook XSL Stylesheet Documentation"><link rel="up" href="index.html" title="DocBook XSL Stylesheet Documentation"><link rel="previous" href="ch03.html" title="Chapter 3. Reference Documentation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. The Template System</th></tr><tr><td width="20%" align="left"><a href="ch03.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;</td></tr></table><hr></div><p>Some parts of the DocBook XSL Stylesheets are actually generated
4using XSL Stylesheets. In particular, the formatting of title pages
5is generated using a special template system. The same template system
6will eventually allow you to easily customize bibliography entries and
7perhaps other parts of the system as well.</p><p>FIXME: there needs to be more introductory/explanatory text
8here!</p><p>In order to demonstrate how this system works, let's consider
9how we can use it to change the format of article title pages.</p><p>By default, the stylesheets print the following elements on the
10article title page, in this order: <span class="simplelist"><tt>title</tt>, <tt>subtitle</tt>, <tt>corpauthor</tt>, <tt>authorgroup</tt>, <tt>author</tt>, <tt>releaseinfo</tt>, <tt>copyright</tt>, <tt>legalnotice</tt>, <tt>pubdate</tt>, <tt>revision</tt>, <tt>revhistory</tt>, <tt>abstract</tt></span>. Suppose we want to put only the
11<tt>title</tt>, <tt>author</tt>, and
12<tt>edition</tt> elements on the title page, in the order
13that they appear in the <tt>articleinfo</tt>.
14</p><p>The &#8220;hard&#8221; (and wrong!) way to do it would be to
15edit <tt>titlepage.templates.xsl</tt> and make the changes
16by hand.</p><p>The easy and right way is to construct a template document that
17describes the order and sequence of elements that you want:</p><pre class="screen">
18&lt;t:templates xmlns:t="http://nwalsh.com/docbook/xsl/template/1.0"
19             xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
20             base-stylesheet="/path/to/html/docbook.xsl"&gt;
21
22&lt;t:titlepage element="article" wrapper="div" class="titlepage"&gt;
23  &lt;t:titlepage-content side="recto" order="document"&gt;
24    &lt;title predicate="[1]"/&gt;
25    &lt;author/&gt;
26    &lt;edition/&gt;
27  &lt;/t:titlepage-content&gt;
28&lt;/t:titlepage&gt;
29&lt;/t:templates&gt;
30</pre><p>Then process this document with the
31<tt>template/titlepage.xsl</tt> stylesheet. This will
32produce the following somewhat cryptic stylesheet:</p><pre class="screen">
33&lt;?xml version="1.0" encoding="utf-8"?&gt;
34&lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"&gt;
35
36&lt;!-- This stylesheet was created by titlepage.xsl; do not edit it by hand. --&gt;
37
38&lt;xsl:import href="/path/to/html/docbook.xsl"/&gt;
39
40&lt;xsl:template name="article.titlepage.recto"&gt;&lt;xsl:apply-templates mode="article.titlepage.recto.mode" select="(articleinfo/title|artheader/title|title)[1]|articleinfo/author|artheader/author|articleinfo/edition|artheader/edition"/&gt;
41&lt;/xsl:template&gt;
42
43&lt;xsl:template name="article.titlepage"&gt;
44  &lt;div class="titlepage"&gt;
45    &lt;xsl:call-template name="article.titlepage.before.recto"/&gt;
46    &lt;xsl:call-template name="article.titlepage.recto"/&gt;
47    &lt;xsl:call-template name="article.titlepage.before.verso"/&gt;
48    &lt;xsl:call-template name="article.titlepage.verso"/&gt;
49    &lt;xsl:call-template name="article.titlepage.separator"/&gt;
50  &lt;/div&gt;
51&lt;/xsl:template&gt;
52
53&lt;/xsl:stylesheet&gt;
54</pre><p>Despite its cryptic appearance, it has the desired result.
55If you want to change <i>how</i> the titlepage elements
56are formatted (as opposed to which ones are formatted), you have to
57write your own customization layer that overrides the template for
58the element in question in the &#8220;titlepage.mode&#8221; mode.</p><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a href="ch03.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a href="index.html">Home</a></td><td width="40%" align="right">&nbsp;</td></tr><tr><td width="40%" align="left">Chapter 3. Reference Documentation&nbsp;</td><td width="20%" align="center"><a href="index.html">Up</a></td><td width="40%" align="right">&nbsp;</td></tr></table></div></body></html>