diff options
Diffstat (limited to 'kdoctools/docbook/xsl/lib/lib.xweb')
-rw-r--r-- | kdoctools/docbook/xsl/lib/lib.xweb | 772 |
1 files changed, 772 insertions, 0 deletions
diff --git a/kdoctools/docbook/xsl/lib/lib.xweb b/kdoctools/docbook/xsl/lib/lib.xweb new file mode 100644 index 000000000..e8ee75c0c --- /dev/null +++ b/kdoctools/docbook/xsl/lib/lib.xweb @@ -0,0 +1,772 @@ +<book xmlns:src="http://nwalsh.com/xmlns/litprog/fragment" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> +<bookinfo> +<title>XSL Library Template Reference</title> +<releaseinfo role="cvs">$Id$ +</releaseinfo> +<corpauthor>DocBook Open Repository Team</corpauthor> +<copyright> + <year>1999</year> + <year>2000</year> + <year>2001</year> + <year>2002</year> + <holder>Norman Walsh</holder> +</copyright> +</bookinfo> + +<preface><title>Introduction</title> + +<para>This is technical reference documentation for the DocBook XSL +Stylesheets; it documents (some of) the parameters, templates, and +other elements of the stylesheets.</para> + +<para>This is not intended to be <quote>user</quote> documentation. +It is provided for developers writing customization layers for the +stylesheets, and for anyone who's interested in <quote>how it +works</quote>.</para> + +<para>Although I am trying to be thorough, this documentation is known +to be incomplete. Don't forget to read the source, too :-)</para> + +</preface> + +<reference> +<title>General Library Templates</title> + +<refentry id="dot.count"> +<refnamediv> +<refname>dot.count</refname> +<refpurpose>Returns the number of <quote>.</quote> characters in a string</refpurpose> +</refnamediv> + +<refsect1><title>Description</title> + +<programlisting><src:fragment id='dot.count.frag'> +<xsl:template name="dot.count"> + <!-- Returns the number of "." characters in a string --> + <xsl:param name="string"></xsl:param> + <xsl:param name="count" select="0"/> + <xsl:choose> + <xsl:when test="contains($string, '.')"> + <xsl:call-template name="dot.count"> + <xsl:with-param name="string" select="substring-after($string, '.')"/> + <xsl:with-param name="count" select="$count+1"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$count"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> +</src:fragment></programlisting> + +</refsect1> +</refentry> + +<!-- ================================================================== --> + +<refentry id="copy-string"> +<refnamediv> +<refname>copy-string</refname> +<refpurpose>Returns <quote>count</quote> copies of a string</refpurpose> +</refnamediv> + +<refsect1><title>Description</title> + +<programlisting><src:fragment id='copy-string.frag'> +<xsl:template name="copy-string"> + <!-- returns 'count' copies of 'string' --> + <xsl:param name="string"></xsl:param> + <xsl:param name="count" select="0"/> + <xsl:param name="result"></xsl:param> + + <xsl:choose> + <xsl:when test="$count>0"> + <xsl:call-template name="copy-string"> + <xsl:with-param name="string" select="$string"/> + <xsl:with-param name="count" select="$count - 1"/> + <xsl:with-param name="result"> + <xsl:value-of select="$result"/> + <xsl:value-of select="$string"/> + </xsl:with-param> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$result"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> +</src:fragment></programlisting> + +</refsect1> +</refentry> + +<!-- ====================================================================== --> + +<refentry id="string.subst"> +<refnamediv> +<refname>string.subst</refname> +<refpurpose>Substitute one text string for another in a string</refpurpose> +</refnamediv> + +<refsect1><title>Description</title> + +<para>The <function>string.subst</function> template replaces all +occurances of <parameter>target</parameter> in <parameter>string</parameter> +with <parameter>replacement</parameter> and returns the result. +</para> + +<programlisting><src:fragment id='string.subst.frag'> +<xsl:template name="string.subst"> + <xsl:param name="string"></xsl:param> + <xsl:param name="target"></xsl:param> + <xsl:param name="replacement"></xsl:param> + + <xsl:choose> + <xsl:when test="contains($string, $target)"> + <xsl:variable name="rest"> + <xsl:call-template name="string.subst"> + <xsl:with-param name="string" + select="substring-after($string, $target)"/> + <xsl:with-param name="target" select="$target"/> + <xsl:with-param name="replacement" select="$replacement"/> + </xsl:call-template> + </xsl:variable> + <xsl:value-of select="concat(substring-before($string, $target), + $replacement, + $rest)"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$string"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> +</src:fragment></programlisting> + +</refsect1> +</refentry> + +<!-- ================================================================== --> + +<refentry id="xpointer.idref"> +<refnamediv> +<refname>xpointer.idref</refname> +<refpurpose>Extract IDREF from an XPointer</refpurpose> +</refnamediv> + +<refsect1><title>Description</title> + +<para>The <function>xpointer.idref</function> template returns the +ID portion of an XPointer which is a pointer to an ID within the current +document, or the empty string if it is not.</para> +<para>In other words, <function>xpointer.idref</function> returns +<quote>foo</quote> when passed either <literal>#foo</literal> +or <literal>#xpointer(id('foo'))</literal>, otherwise it returns +the empty string.</para> + +<programlisting><src:fragment id='xpointer.idref.frag'> +<xsl:template name="xpointer.idref"> + <xsl:param name="xpointer">http://...</xsl:param> + <xsl:choose> + <xsl:when test="starts-with($xpointer, '#xpointer(id(')"> + <xsl:variable name="rest" select="substring-after($xpointer, '#xpointer(id(')"/> + <xsl:variable name="quote" select="substring($rest, 1, 1)"/> + <xsl:value-of select="substring-before(substring-after($xpointer, $quote), $quote)"/> + </xsl:when> + <xsl:when test="starts-with($xpointer, '#')"> + <xsl:value-of select="substring-after($xpointer, '#')"/> + </xsl:when> + <!-- otherwise it's a pointer to some other document --> + </xsl:choose> +</xsl:template> +</src:fragment></programlisting> + +</refsect1> +</refentry> + + +<!-- ================================================================== --> + +<refentry id="length-magnitude"> +<refnamediv> +<refname>length-magnitude</refname> +<refpurpose>Return the unqualified dimension from a length specification</refpurpose> +</refnamediv> + +<refsect1><title>Description</title> + +<para>The <function>length-magnitude</function> template returns the +unqualified length ("20" for "20pt") from a dimension. +</para> + +<programlisting><src:fragment id='length-magnitude.frag'> +<xsl:template name="length-magnitude"> + <xsl:param name="length" select="'0pt'"/> + + <xsl:choose> + <xsl:when test="string-length($length) = 0"/> + <xsl:when test="substring($length,1,1) = '0' + or substring($length,1,1) = '1' + or substring($length,1,1) = '2' + or substring($length,1,1) = '3' + or substring($length,1,1) = '4' + or substring($length,1,1) = '5' + or substring($length,1,1) = '6' + or substring($length,1,1) = '7' + or substring($length,1,1) = '8' + or substring($length,1,1) = '9' + or substring($length,1,1) = '.'"> + <xsl:value-of select="substring($length,1,1)"/> + <xsl:call-template name="length-magnitude"> + <xsl:with-param name="length" select="substring($length,2)"/> + </xsl:call-template> + </xsl:when> + </xsl:choose> +</xsl:template> +</src:fragment></programlisting> + +</refsect1> +</refentry> + +<!-- ================================================================== --> + +<refentry id="length-units"> +<refnamediv> +<refname>length-units</refname> +<refpurpose>Return the units from a length specification</refpurpose> +</refnamediv> + +<refsect1><title>Description</title> + +<para>The <function>length-units</function> template returns the +units ("pt" for "20pt") from a length. If no units are supplied on the +length, the <parameter>defauilt.units</parameter> are returned.</para> + +<programlisting><src:fragment id='length-units.frag'> +<xsl:template name="length-units"> + <xsl:param name="length" select="'0pt'"/> + <xsl:param name="default.units" select="'px'"/> + <xsl:variable name="magnitude"> + <xsl:call-template name="length-magnitude"> + <xsl:with-param name="length" select="$length"/> + </xsl:call-template> + </xsl:variable> + + <xsl:variable name="units"> + <xsl:value-of select="substring($length, string-length($magnitude)+1)"/> + </xsl:variable> + + <xsl:choose> + <xsl:when test="$units = ''"> + <xsl:value-of select="$default.units"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$units"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> +</src:fragment></programlisting> + +</refsect1> +</refentry> + +<!-- ================================================================== --> + +<refentry id="length-spec"> +<refnamediv> +<refname>length-spec</refname> +<refpurpose>Return a fully qualified length specification</refpurpose> +</refnamediv> + +<refsect1><title>Description</title> + +<para>The <function>length-spec</function> template returns the +qualified length from a dimension. If an unqualified length is given, +the <parameter>default.units</parameter> will be added to it. +</para> + +<programlisting><src:fragment id='length-spec.frag'> +<xsl:template name="length-spec"> + <xsl:param name="length" select="'0pt'"/> + <xsl:param name="default.units" select="'px'"/> + + <xsl:variable name="magnitude"> + <xsl:call-template name="length-magnitude"> + <xsl:with-param name="length" select="$length"/> + </xsl:call-template> + </xsl:variable> + + <xsl:variable name="units"> + <xsl:value-of select="substring($length, string-length($magnitude)+1)"/> + </xsl:variable> + + <xsl:value-of select="$magnitude"/> + <xsl:choose> + <xsl:when test="$units='cm' + or $units='mm' + or $units='in' + or $units='pt' + or $units='pc' + or $units='px' + or $units='em'"> + <xsl:value-of select="$units"/> + </xsl:when> + <xsl:when test="$units = ''"> + <xsl:value-of select="$default.units"/> + </xsl:when> + <xsl:otherwise> + <xsl:message> + <xsl:text>Unrecognized unit of measure: </xsl:text> + <xsl:value-of select="$units"/> + <xsl:text>.</xsl:text> + </xsl:message> + </xsl:otherwise> + </xsl:choose> +</xsl:template> +</src:fragment></programlisting> + +</refsect1> +</refentry> + +<!-- ================================================================== --> + +<refentry id="length-in-points"> +<refnamediv> +<refname>length-in-points</refname> +<refpurpose>Returns the size, in points, of a specified length</refpurpose> +</refnamediv> + +<refsect1><title>Description</title> + +<para>The <function>length-in-points</function> template converts a length +specification to points and returns that value as an unqualified +number. +</para> + +<caution> +<para>There is no way for the template to infer the size of an +<literal>em</literal>. It relies on the default <parameter>em.size</parameter> +which is initially <literal>10</literal> (for 10pt).</para> + +<para>Similarly, converting pixesl to points relies on the +<parameter>pixels.per.inch</parameter> parameter which is initially +<literal>90</literal>. +</para> +</caution> + +<programlisting><src:fragment id='length-in-points.frag'> +<xsl:template name="length-in-points"> + <xsl:param name="length" select="'0pt'"/> + <xsl:param name="em.size" select="10"/> + <xsl:param name="pixels.per.inch" select="90"/> + + <xsl:variable name="magnitude"> + <xsl:call-template name="length-magnitude"> + <xsl:with-param name="length" select="$length"/> + </xsl:call-template> + </xsl:variable> + + <xsl:variable name="units"> + <xsl:value-of select="substring($length, string-length($magnitude)+1)"/> + </xsl:variable> + + <xsl:choose> + <xsl:when test="$units = 'pt'"> + <xsl:value-of select="$magnitude"/> + </xsl:when> + <xsl:when test="$units = 'cm'"> + <xsl:value-of select="$magnitude div 2.54 * 72.0"/> + </xsl:when> + <xsl:when test="$units = 'mm'"> + <xsl:value-of select="$magnitude div 25.4 * 72.0"/> + </xsl:when> + <xsl:when test="$units = 'in'"> + <xsl:value-of select="$magnitude * 72.0"/> + </xsl:when> + <xsl:when test="$units = 'pc'"> + <xsl:value-of select="$magnitude * 12.0"/> + </xsl:when> + <xsl:when test="$units = 'px'"> + <xsl:value-of select="$magnitude div $pixels.per.inch * 72.0"/> + </xsl:when> + <xsl:when test="$units = 'em'"> + <xsl:value-of select="$magnitude * $em.size"/> + </xsl:when> + <xsl:otherwise> + <xsl:message> + <xsl:text>Unrecognized unit of measure: </xsl:text> + <xsl:value-of select="$units"/> + <xsl:text>.</xsl:text> + </xsl:message> + </xsl:otherwise> + </xsl:choose> +</xsl:template> +</src:fragment></programlisting> + +</refsect1> +</refentry> + +<!-- ================================================================== --> + +<refentry id="pi-attribute"> +<refnamediv> +<refname>pi-attribute</refname> +<refpurpose>Extract a pseudo-attribute from a PI</refpurpose> +</refnamediv> + +<refsect1><title>Description</title> + +<para>The <function>pi-attribute</function> template extracts a pseudo-attribute +from a processing instruction. For example, given the PI +<quote><literal><?foo bar="1" baz='red'?></literal></quote>,</para> +<programlisting><![CDATA[<xsl:call-template name="pi-attribute"> + <xsl:with-param name="pis" select="processing-instruction('foo')"/> + <xsl:with-param name="attribute" select="'baz'"/> +</xsl:call-template>]]></programlisting> +<para>will return <quote>red</quote>. This template returns the first matching +attribute that it finds. Presented with processing instructions that +contain badly formed pseudo-attributes (missing or unbalanced quotes, +for example), the template may silently return erroneous results.</para> + +<programlisting><src:fragment id='pi-attribute.frag'> +<xsl:template name="pi-attribute"> + <xsl:param name="pis" select="processing-instruction('BOGUS_PI')"/> + <xsl:param name="attribute">filename</xsl:param> + <xsl:param name="count">1</xsl:param> + + <xsl:choose> + <xsl:when test="$count>count($pis)"> + <!-- not found --> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="pi"> + <xsl:value-of select="$pis[$count]"/> + </xsl:variable> + <xsl:variable name="pivalue"> + <xsl:value-of select="concat(' ', normalize-space($pi))"/> + </xsl:variable> + <xsl:choose> + <xsl:when test="contains($pivalue,concat(' ', $attribute, '='))"> + <xsl:variable name="rest" select="substring-after($pivalue,concat(' ', $attribute,'='))"/> + <xsl:variable name="quote" select="substring($rest,1,1)"/> + <xsl:value-of select="substring-before(substring($rest,2),$quote)"/> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="pi-attribute"> + <xsl:with-param name="pis" select="$pis"/> + <xsl:with-param name="attribute" select="$attribute"/> + <xsl:with-param name="count" select="$count + 1"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> +</xsl:template> +</src:fragment></programlisting> + +</refsect1> +</refentry> + +<!-- ================================================================== --> + +<refentry id="lookup.key"> +<refnamediv> +<refname>lookup.key</refname> +<refpurpose>Retrieve the value associated with a particular key in a table</refpurpose> +</refnamediv> + +<refsect1><title>Description</title> + +<para>Given a table of space-delimited key/value pairs, +the <function>lookup.key</function> template extracts the value associated +with a particular key.</para> + +<programlisting><src:fragment id='lookup.key.frag'> +<xsl:template name="lookup.key"> + <xsl:param name="key" select="''"/> + <xsl:param name="table" select="''"/> + + <xsl:if test="contains($table, ' ')"> + <xsl:choose> + <xsl:when test="substring-before($table, ' ') = $key"> + <xsl:variable name="rest" select="substring-after($table, ' ')"/> + <xsl:choose> + <xsl:when test="contains($rest, ' ')"> + <xsl:value-of select="substring-before($rest, ' ')"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$rest"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="lookup.key"> + <xsl:with-param name="key" select="$key"/> + <xsl:with-param name="table" + select="substring-after(substring-after($table,' '), ' ')"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:if> +</xsl:template> +</src:fragment></programlisting> + +</refsect1> +</refentry> + +<!-- ================================================================== --> + +<refentry id="xpath.location"> +<refnamediv> +<refname>xpath.location</refname> +<refpurpose>Calculate the XPath child-sequence to the current node</refpurpose> +</refnamediv> + +<refsect1><title>Description</title> + +<para>The <function>xpath.location</function> template calculates the +absolute path from the root of the tree to the current element node. +</para> + +<programlisting><src:fragment id='xpath.location.frag'> +<xsl:template name="xpath.location"> + <xsl:param name="node" select="."/> + <xsl:param name="path" select="''"/> + + <xsl:variable name="next.path"> + <xsl:value-of select="local-name($node)"/> + <xsl:if test="$path != ''">/</xsl:if> + <xsl:value-of select="$path"/> + </xsl:variable> + + <xsl:choose> + <xsl:when test="$node/parent::*"> + <xsl:call-template name="xpath.location"> + <xsl:with-param name="node" select="$node/parent::*"/> + <xsl:with-param name="path" select="$next.path"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:text>/</xsl:text> + <xsl:value-of select="$next.path"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> +</src:fragment></programlisting> + +</refsect1> +</refentry> + +<!-- ================================================================== --> + +<refentry id="comment-escape-string"> +<refnamediv> +<refname>comment-escape-string</refname> +<refpurpose>Prepare a string for inclusion in an XML comment</refpurpose> +</refnamediv> + +<refsect1><title>Description</title> + +<para>The <function>comment-escape-string</function> template returns a string +that has been transformed so that it can safely be output as an XML comment. +Internal occurrences of "--" will be replaced with "- -" and a leading and/or +trailing space will be added to the string, if necessary.</para> + +<programlisting><src:fragment id='comment-escape-string'> +<xsl:template name="comment-escape-string"> + <xsl:param name="string" select="''"/> + + <xsl:if test="starts-with($string, '-')"> + <xsl:text> </xsl:text> + </xsl:if> + + <xsl:call-template name="comment-escape-string.recursive"> + <xsl:with-param name="string" select="$string"/> + </xsl:call-template> + + <xsl:if test="substring($string, string-length($string), 1) = '-'"> + <xsl:text> </xsl:text> + </xsl:if> +</xsl:template> +</src:fragment></programlisting> + +</refsect1> +</refentry> + +<refentry id="comment-escape-string.recursive"> +<refnamediv> +<refname>comment-escape-string.recursive</refname> +<refpurpose>Internal function used by comment-escape-string</refpurpose> +</refnamediv> + +<refsect1><title>Description</title> + +<para>The <function>comment-escape-string.recursive</function> template is used +by <function>comment-escape-string</function>.</para> + +<programlisting><src:fragment id="comment-escape-string.recursive"> +<xsl:template name="comment-escape-string.recursive"> + <xsl:param name="string" select="''"/> + <xsl:choose> + <xsl:when test="contains($string, '--')"> + <xsl:value-of select="substring-before($string, '--')"/> + <xsl:value-of select="'- -'"/> + <xsl:call-template name="comment-escape-string.recursive"> + <xsl:with-param name="string" select="substring-after($string, '--')"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$string"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> +</src:fragment></programlisting> +</refsect1> +</refentry> + +</reference> + +<reference> +<title>Relative URI Functions</title> + +<partintro><title>Introduction</title> + +<para>These functions manipulate relative URI references.</para> + +<para>The following assumptions must hold true:</para> + +<orderedlist> +<listitem> +<para>All URIs are relative.</para> +</listitem> +<listitem> +<para>No URI contains the <quote><literal>../</literal></quote> sequence +which would effectively move <quote>up</quote> the hierarchy.</para> +</listitem> +</orderedlist> + +<para>If these assumptions do not hold, the results are unpredictable.</para> + +</partintro> + +<refentry id="count.uri.path.depth"> +<refnamediv> +<refname>count.uri.path.depth</refname> +<refpurpose>Count the number of path components in a relative URI</refpurpose> +</refnamediv> + +<refsect1><title>Description</title> + +<para>This function counts the number of path components in a relative URI.</para> + +<programlisting><src:fragment id='count.uri.path.depth.frag'> +<xsl:template name="count.uri.path.depth"> + <xsl:param name="filename" select="''"/> + <xsl:param name="count" select="0"/> + + <xsl:choose> + <xsl:when test="contains($filename, '/')"> + <xsl:call-template name="count.uri.path.depth"> + <xsl:with-param name="filename" select="substring-after($filename, '/')"/> + <xsl:with-param name="count" select="$count + 1"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$count"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> +</src:fragment></programlisting> + +</refsect1> +</refentry> + +<refentry id="trim.common.uri.paths"> +<refnamediv> +<refname>trim.common.uri.paths</refname> +<refpurpose>Trim common leading path components from a relative URI</refpurpose> +</refnamediv> + +<refsect1><title>Description</title> + +<para>This function trims common leading path components from a relative URI.</para> + +<programlisting><src:fragment id='trim.common.uri.paths.frag'> +<xsl:template name="trim.common.uri.paths"> + <xsl:param name="uriA" select="''"/> + <xsl:param name="uriB" select="''"/> + <xsl:param name="return" select="'A'"/> + + <xsl:choose> + <xsl:when test="contains($uriA, '/') and contains($uriB, '/') + and substring-before($uriA, '/') = substring-before($uriB, '/')"> + <xsl:call-template name="trim.common.uri.paths"> + <xsl:with-param name="uriA" select="substring-after($uriA, '/')"/> + <xsl:with-param name="uriB" select="substring-after($uriB, '/')"/> + <xsl:with-param name="return" select="$return"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:choose> + <xsl:when test="$return = 'A'"> + <xsl:value-of select="$uriA"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$uriB"/> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> +</xsl:template> +</src:fragment></programlisting> + +</refsect1> +</refentry> + +</reference> + +<appendix><title>The Stylesheet</title> + +<para>The <filename>lib.xsl</filename> stylesheet is just a wrapper +around these functions.</para> + +<src:fragment id="top" mundane-result-prefixes="xsl"> + +<!-- ******************************************************************** + $Id$ + ******************************************************************** + + This file is part of the XSL DocBook Stylesheet distribution. + See ../README or http://nwalsh.com/docbook/xsl/ for copyright + and other information. + + This module implements DTD-independent functions + + ******************************************************************** --> + +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:src="http://nwalsh.com/xmlns/litprog/fragment" + exclude-result-prefixes="src" + version='1.0'> + +<src:fragref linkend="dot.count.frag"/> +<src:fragref linkend="copy-string.frag"/> +<src:fragref linkend="string.subst.frag"/> +<src:fragref linkend="xpointer.idref.frag"/> +<src:fragref linkend="length-magnitude.frag"/> +<src:fragref linkend="length-units.frag"/> +<src:fragref linkend="length-spec.frag"/> +<src:fragref linkend="length-in-points.frag"/> +<src:fragref linkend="pi-attribute.frag"/> +<src:fragref linkend="lookup.key.frag"/> +<src:fragref linkend="xpath.location.frag"/> +<src:fragref linkend="comment-escape-string"/> +<src:fragref linkend="comment-escape-string.recursive"/> +<src:fragref linkend="count.uri.path.depth.frag"/> +<src:fragref linkend="trim.common.uri.paths.frag"/> + +</xsl:stylesheet> +</src:fragment> + +</appendix> +</book> |