文?章?标?题?
f原文链接
1.?XSL处?理?模?型?
XSL是?一?个?模?板?语?言?,而?不?是?一?个?程?序?语?言?。?这?意?味?着?
stylesheet
制?定?了?一?个?输?出?样?本?,而?不?是?使?用?程?序?按?步?骤?生?成?。?一?个?stylesheet
包?含?了?一?个?混?合?的?输?出?样?本?,并?且?为?每?个?样?本?佩?戴?了?输?出?指?令?。?每?一?个?晓?得?输?出?样?本?加?上?处?理?指?令?就?构?成?了?一?个?模?板?。?
通?常?情?况?,你?要?为?文?档?内?的?每?个?元?素?书?写?一?个?模?板?。?这?样?能?够?让?你?每?次?只?专?注?于?一?个?元?素?,并?持?有?一?个?
stylesheet
模?块?。?XSL的?强?大?之?处?在?于?它?能?够?递?归?的?处?理?模?板?,也?就?是?说?,每?个?模?板?只?处?理?它?对?应?的?一?个?元?素?,然?后?调?用?其?它?模?板?来?处?理?它?的?子?元?素?,以?此?类?推?。?一?个?XML文?档?总?是?用?一?个?根?元?素?作?为?顶?层?元?素?,并?包?含?可?以?嵌?套?的?子?元?素?,XSL模?板?总?是?从?顶?层?开?始?扫?描?,并?照?层?级?来?处?理?元?素?。?
现?在?用?Docbook的?
<para>
元?素?为?例?子?,要?把?它?转?换?成?HTML,你?希?望?使?用?HTML标?记?<p>
来?包?围?要?输?出?的?内?容?。?但?是?DocBook的?<para>
元?素?可?以?包?含?任?何?in-line
类?型?的?元?素?来?标?记?内?容?;不?用?担?心?,你?可?以?让?其?它?对?应?的?模?板?来?处?理?这?些?元?素?,因?此?你?的?<para>
XSL模?板?会?是?下?面?这?样?的?简?单?:<xsl:template match="para"> <p> <xsl:apply-templates/> </p> </xsl:template>
元?素?
<xsl:template>
表?示?开?始?一?个?新?的?模?板?,属?性?match
声?明?什?么?元?素?要?被?应?用?模?板?,在?这?个?例?子?中?将?匹?配?任?何?的?<para>
元?素?。?模?板?指?出?要?输?出?一?个?<p>
并?执?行?<xsl:apply-template>指?令?。?这?将?告?诉?XSL处?理?器?在?stylesheet
内?寻?找?所?有?的?模?板?并?将?其?应?用?到?段?落?中?的?元?素?。?如?果?stylesheet
每?个?模?板?都?含?有?一?个?<xsl:apply-template>
指?令?,那?么?将?会?递?归?执?行?下?去?。?当?执?行?到?stylesheet
的?末?尾?时?,模?板?将?输?出?一?个?结?束?的?</p>
标?签?。? 1.1.?重?要?的?上?下?文?环?境?
既?然?不?需?要?用?线?性?的?步?骤?来?书?写?你?的?文?档?,那?么?一?个?用?来?描?述?在?什?么?地?方?应?用?这?些?模?板?的?“上?下?文?环?境?
”
是?尤?为?重?要?的?。?大?多?数?模?板?都?提?供?了?一?个?
match
属?性?来?描?述?上?下?文?环?境?,这?是?一?个?纯?粹?的?表?达?式?语?言?:XPath
,用?来?标?识?你?文?档?中?的?哪?个?部?分?将?被?应?用?这?个?模?板?。?简?单?的?上?下?文?环?境?通?常?只?声?明?一?个?元?素?名?,就?像?上?面?的?例?子?。?但?是?你?也?可?以?指?定?元?素?的?子?元?素?,子?元?素?也?可?以?指?定?属?性?值?,指?定?的?元?素?成?一?个?队?列?的?形?式?,以?此?类?推?。?下?面?的?模?板?例?子?描?述?如?何?匹?配?DocBook的?<formalpara>
元?素? <xsl:template match= "formalpara" > <p> <xsl:apply-templates/> </p> </xsl:template> <xsl:template match= "formalpara/title" > <b><xsl:apply-templates/></b> <xsl:text> </xsl:text> </xsl:template> <xsl:template match= "formalpara/para" > <xsl:apply-templates/> </xsl:template>
上?面?定?义?了?三?个?模?板?,第?一?个?应?用?于?
<formalpara>
元?素?本?身?,另?外?两?个?应?用?其?子?元?素?。?在?第?二?个?模?板?中?的?match
属?性?是?一?个?XPath
表?达?式?,用?来?表?示?这?里?的?<title>
元?素?是?一?个?直?接?隶?属?与?<formalpara>
元?素?的?子?元?素?。?这?就?区?分?与?在?DocBook中?的?其?它?<title>
元?素?。?XPath
表?达?式?是?控?制?模?板?如?何?应?用?的?关?键?。? 通?常?情?况?,XSL处?理?器?的?内?部?规?则?是?在?面?对?高?层?模?板?和?底?层?模?板?时?,优?先?应?用?底?层?模?板?,这?里?的?层?次?是?元?素?的?层?级?,文?档?顶?层?是?高?层?元?素?,以?此?类?推?。?这?能?够?让?你?更?细?致?的?控?制?模?板?应?用?,但?是?在?你?没?有?为?复?杂?的?符?合?元?素?提?供?细?致?的?上?下?文?环?境?时?,XSL处?理?器?也?对?其?提?供?了?备?选?方?案?。?这?个?特?性?在?上?面?的?例?子?中?得?以?体?现?,对?于?
formalpara/para
,例?子?中?提?供?的?第?三?个?模?板?,<para>
元?素?作?为?<formalpara>
元?素?的?子?元?素?,处?理?器?将?使?用?单?独?的?方?式?来?处?理?它?,它?将?不?会?再?输?出?已?经?被?父?元?素?输?出?的?<p>
HTML标?签?。?如?果?formalpara/para
模?板?没?有?包?含?在?上?面?的?例?子?中?,那?么?处?理?器?将?使?用?备?选?的?模?板?match="para"
,这?个?模?板?在?上?一?个?例?子?中?定?义?。?这?样?处?理?器?将?输?出?第?二?层?<p>
HTML标?签?。? 你?也?可?以?使?用?XSL中?的?
modes
来?控?制?模?板?上?下?文?环?境?,这?种?方?式?已?经?被?广?泛?应?用?与?DocBook
stylesheet中?。?Modes
能?够?让?你?使?用?不?同?的?方?式?来?处?理?相?同?的?输?入?。?在?<xsl:template>
模?板?定?义?中?使?用?mode
属?性?将?会?为?模?板?指?定?一?个?mode
命?名?。?这?种?情?况?下?,当?有?两?个?模?板?指?定?了?相?同?的?mode
属?性?值?,处?理?器?将?把?math
的?属?性?值?和?mode
的?属?性?值?通?过?表?达?式?and
连?接?来?作?为?一?个?过?滤?条?件?,也?就?是?说?,当?mode
属?性?值?相?同?时?则?继?续?使?用?match
属?性?值?匹?配?来?区?分?使?用?哪?个?模?板?。?这?就?让?你?对?一?个?元?素?定?义?了?两?个?不?同?的?模?板?来?针?对?不?同?的?上?下?文?环?境?。?例?如?,下?面?对?DocBook的?<listitem>
元?素?定?义?了?两?个?不?同?的?模?板?:
<xsl:template match= "listitem" > <li><xsl:apply-templates/></li> </xsl:template> <xsl:template match= "listitem" mode= "xref" > <xsl:number format= "1" /> </xsl:template>
第?一?个?模?板?应?用?于?普?通?的?列?表?输?出?情?况?,模?板?输?出?
<li>
HTML标?签?来?。?第?二?个?模?板?定?义?为?<xsl:apply-templates select="$target"
mode="xref"/>
,这?种?情?况?下?用?来?专?门?处?理?<xref>
元?素?。?在?这?个?例?子?中?,mode
属?性?的?值?决?定?应?用?第?二?个?模?板?,它?将?初?始?带?有?序?号?的?列?表?。?因?为?在?输?出?<xref>
元?素?时?经?常?会?有?这?样?的?需?求?。?
请?记?住?,
mode
的?设?置?不?会?自?动?的?贯?穿?处?理?子?模?板?<xsl:apply-templates/>
。?当?子?模?板?含?有?mode
属?性?时?,你?可?以?有?两?个?选?择?来?处?理?: -
要?想?继?续?使?用?
mode
模?式?,也?就?是?使?用?<xsl:apply-templates mode="mode"/>
模?板?来?处?理?子?元?素?,处?理?器?将?查?找?具?有?相?同?mode
属?性?值?的?模?板?来?应?用?子?元?素?。?注?意?,这?样?的?话?你?就?没?有?备?选?方?案?,如?果?模?板?没?有?指?定?mode
属?性?值?,子?元?素?将?不?会?有?模?板?匹?配?,也?就?不?会?被?模?板?处?理?。?如?果?你?想?使?用?没?有?mode
属?性?的?模?板?作?为?备?选?,那?么?在?stylesheet
中?加?入?下?面?的?模?板?:<xsl:template match= "*" mode= "mode" > <xsl:apply-templates select= "." /> </xsl:template>
这?样?的?话?,对?于?任?何?子?元?素?,如?果?模?板?没?有?配?备?mode
属?性?值?,那?么?模?板?也?将?会?被?应?用? -
使?用?通?常?的?
无?mode
模?板?,对?子?元?素?使?用?<xsl:apply-templates/>
,你?可?以?定?义?无?mode
模?板?
1.2.?编?程?特?性?
尽?管?XSL是?模?板?驱?动?的?,但?是?它?同?样?具?有?很?多?传?统?编?程?语?言?的?特?性?。?下?面?一?些?例?子?来?自?与?DockBook
stylesheet
Assign a value to a variable: <xsl:variable name= "refelem" select= "name($target)" /> If statement: <xsl:if test= "$show.comments" > <i><xsl:call-template name= "inline.charseq" /></i> </xsl:if> Case statement: <xsl:choose> <xsl:when test= "@columns" > <xsl:value-of select= "@columns" /> </xsl:when> <xsl:otherwise> 1</xsl:otherwise> </xsl:choose> Call a template by name like a subroutine, passing parameter values and accepting a return value: <xsl:call-template name= "xref.xreflabel" > <xsl:with-param name= "target" select= "$target" /> </xsl:call-template>
然?而?你?不?能?像?在?其?它?编?程?语?言?那?样?来?使?用?上?面?这?些?结?构?,因?为?
变?量?
在?特?别?的?情?况?下?会?具?有?完?全?不?同?的?行?为?。? 1.2.1.?使?用?变?量?和?参?数?
XSL提?供?两?种?元?素?来?让?你?指?派?值?到?变?量?上?:
<xsl:variable>
和?<xsl:param>
。?它?们?享?用?共?同?的?命?名?空?间?和?语?法?,都?使?用?$name
来?引?用?变?量?。?这?两?个?元?素?最?主?要?的?不?同?是?param's
的?默?认?值?能?够?被?模?板?调?用?的?<xsl:with-param>
所?取?代?,就?如?上?面?最?后?一?个?例?子?所?示?。?
下?面?两?个?例?子?同?样?来?自?DocBook:
<xsl:param name= "cols" > 1</xsl:param> <xsl:variable name= "segnum" select= "position()" />
在?上?面?两?个?元?素?中?,
param
和?variable
的?名?字?都?是?通?过?name
属?性?来?指?定?的?,可?以?看?到?param
的?名?字?是?cols
,variable
的?名?字?是?segnum
。?它?们?的?值?可?以?通?过?两?种?方?式?来?提?供?,参?数?的?例?子?是?通?过?元?素?的?内?容?值?“1
”
来?赋?值?的?,而?变?量?的?例?子?是?通?过?select
属?性?值?来?赋?值?的?,这?个?属?性?值?是?一?个?表?达?式?的?结?果?,而?元?素?本?身?并?没?有?内?容?值?。?
对?于?新?接?触?XSL的?用?户?来?说?变?量?的?特?性?有?点?古?怪?,当?你?给?一?个?变?量?赋?值?后?,你?就?不?能?在?它?的?应?用?周?期?内?改?变?它?的?值?,如?果?这?样?做?会?报?错?。?所?以?你?不?能?像?在?使?用?其?它?编?程?语?言?那?样?对?变?量?进?行?动?态?存?储?,变?量?在?它?的?应?用?周?期?内?持?有?的?是?固?定?值?,并?在?应?用?周?期?结?束?时?销?毁?。?这?个?特?性?是?在?设?计?XSL时?就?决?定?了?,因?为?XSL是?模?板?驱?动?而?非?流?程?驱?动?的?。?这?意?味?着?它?没?有?固?定?的?执?行?顺?序?,所?以?你?无?法?依?赖?一?个?能?够?改?变?值?的?变?量?。?要?想?正?确?的?使?用?变?量?,你?必?须?理?解?变?量?的?周?期?是?如?何?定?义?的?。?
如?果?一?个?变?量?定?义?在?所?有?模?板?的?外?部?,那?么?它?就?被?认?为?是?一?个?全?局?变?量?,它?对?所?有?模?板?都?生?效?。?全?局?变?量?的?值?是?固?定?不?变?的?,也?不?能?被?任?何?模?板?所?重?新?赋?值?。?但?是?你?可?以?在?模?板?内?创?建?一?个?与?全?局?变?量?同?名?的?本?地?变?量?,然?后?赋?予?其?它?的?值?。?本?地?变?量?只?能?在?其?自?己?的?应?用?周?期?内?起?作?用?。?
定?义?在?模?板?里?的?本?地?变?量?只?会?在?它?被?允?许?的?周?期?内?生?效?,也?就?是?对?在?它?之?后?的?同?胞?和?后?裔?有?效?。?要?想?理?解?这?个?周?期?,你?必?须?明?白?XSL指?令?其?实?就?是?纯?粹?的?XML元?素?,并?内?嵌?在?XML家?族?层?级?结?构?中?。?它?们?通?常?是?指?父?级?、?子?级?、?同?级?、?祖?先?级?和?后?裔?级?。?在?XML家?族?层?级?中?,给?一?个?变?量?赋?值?就?像?发?布?一?个?公?告?给?你?希?望?听?到?家?族?成?员?一?样?。?你?只?能?把?公?告?发?布?给?比?你?年?龄?低?的?同?级?(包?括?你?自?己?)和?它?们?的?后?裔?级?,也?就?是?说?定?义?在?你?前?面?的?年?长?的?同?级?将?不?会?听?到?公?告?,更?不?用?说?你?的?父?级?和?祖?先?了?。?如?果?你?发?布?不?同?的?公?告?内?容?但?是?用?相?同?的?公?告?名?给?相?同?的?被?通?知?成?员?,那?将?出?现?错?误?,(言?外?之?义?,你?重?新?给?变?量?赋?值?了?)。?请?记?住?这?里?的?家?族?并?不?是?你?的?文?档?元?素?,而?只?是?在?你?
stylesheet
中?的?XSL指?令?。?手?工?编?写?stylesheet
将?对?你?跟?踪?周?期?很?有?帮?助?,XSL元?素?缩?进?和?嵌?套?将?帮?助?你?理?解?周?期?。?下?面?的?代?码?片?段?来?自?DocBook
stylesheet中?的?pi.xsl
文?件?,举?例?说?明?两?个?变?量?周?期?的?不?同?。?
1 <xsl:template name= "dbhtml-attribute" > 2 ... 3 <xsl:choose> 4 <xsl:when test= "$count>count($pis)" > 5 <!-- not found --> 6 </xsl:when> 7 <xsl:otherwise> 8 <xsl:variable name= "pi" > 9 <xsl:value-of select= "$pis[$count]" /> 10 </xsl:variable> 11 <xsl:choose> 12 <xsl:when test= "contains($pi,concat($attribute, '='))" > 13 <xsl:variable name= "rest" select= "substring-after($pi,concat($attribute,'='))" /> 14 <xsl:variable name= "quote" select= "substring($rest,1,1)" /> 15 <xsl:value-of select= "substring-before(substring($rest,2),$quote)" /> 16 </xsl:when> 17 <xsl:otherwise> 18 ... 19 </xsl:otherwise> 20 </xsl:choose> 21 </xsl:otherwise> 22 </xsl:choose> 23 </xsl:template>
变?量?
pi
的?周?期?开?始?于?第?8行?,也?就?是?模?板?定?义?它?的?位?置?,结?束?于?第?20行?它?最?后?一?个?同?级?兄?弟?结?束?的?地?方?[1
]
。?变?量?rest
的?周?期?开?始?于?13行?,结?束?与?15行?。?幸?运?的?是?,15行?的?输?出?表?达?式?赶?在?周?期?结?束?前?使?用?了?变?量?值?。?
让?我?们?来?看?看?当?在?变?量?的?周?期?内?使?用?
<xsl:apply-templates/>
会?如?何??被?应?用?的?模?板?内?会?得?到?变?量?值?吗??答?案?是?否?定?的?。?因?为?被?应?用?的?模?板?生?效?周?期?并?没?有?真?正?的?在?变?量?周?期?内?,它?在?stylesheet
的?其?它?地?方?退?出?,并?不?是?在?变?量?的?低?龄?同?级?和?后?裔?内?退?出?。?
要?想?传?值?给?一?个?模?板?,你?可?以?使?用?
<xsl:with-param/>
传?递?一?个?参?数?。?这?种?参?数?传?递?通?常?被?用?在?使?用?<xsl:call-templates/>
调?用?指?定?模?板?,尽?管?你?也?可?以?使?用?<xsl:apply-templates/>
调?用?模?板?,但?是?通?常?被?调?用?的?模?板?希?望?传?入?一?个?与?<xsl:param/>
定?义?同?名?的?参?数?。?这?样?就?可?以?在?模?板?内?使?用?这?个?参?数?值?。?任?何?传?入?的?参?数?名?如?果?在?模?板?内?没?有?被?定?义?将?被?忽?略?处?理?。?
下?面?参?数?传?递?的?例?子?来?自?
docbook.xsl
:
<xsl:call-template name= "head.content" > <xsl:with-param name= "node" select= "$doc" /> </xsl:call-template>
上?面?一?个?命?名?为?
head.content
的?模?板?被?调?用?,在?调?用?周?期?内?传?递?了?一?个?名?为?node
的?参?数?,参?数?值?是?变?量?$doc
。?上?面?被?调?用?的?模?板?看?上?去?会?是?下?面?的?样?子?: <xsl:template name= "head.content" > <xsl:param name= "node" select= "." /> ...
模?板?期?望?一?个?参?数?是?因?为?模?板?定?义?中?声?明?了?一?个?
<xsl:param/>
,并?且?名?字?和?传?入?参?数?名?相?同?。?模?板?内?的?<xsl:param/>
提?供?了?一?个?默?认?值?,如?果?传?入?的?参?数?名?没?有?与?其?匹?配?,那?么?将?在?模?板?内?使?用?默?认?值?。?
1.3.?生?成?HTML
从?你?的?DocBook文?件?生?成?HTML需?要?使?用?HTML版?本?的?
stylesheet
,这?些?由?stylesheet
的?HTML驱?动?文?件?docbook/html/docbook.xsl
来?完?成?。?这?是?一?个?主?stylesheet
文?件?,它?使?用?<xsl:include/>
导?入?其?它?组?件?文?件?组?装?一?个?完?整?的?stylesheet
用?来?生?成?HTML DocBook
stylesheet生?成?HTML的?方?式?是?通?过?应?用?模?板?来?输?出?一?些?文?本?内?容?和?HTML元?素?的?混?合?体?。?从?
docbook.xsl
的?顶?层?开?始?: <xsl:template match= "/" > <xsl:variable name= "doc" select= "*[1]" /> <html> <head> <xsl:call-template name= "head.content" > <xsl:with-param name= "node" select= "$doc" /> </xsl:call-template> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template>
模?板?匹?配?到?你?输?入?文?档?的?根?元?素?,然?后?就?开?始?递?归?应?用?模?板?。?首?先?定?义?了?一?个?变?量?
doc
,然?后?输?出?两?个?HTML元?素?<html>
和?<head>
。?接?着?调?用?名?为?head.content
模?板?来?处?理?HTML的?<head>
,关?闭?<head>
后?就?开?始?<body>
。?这?里?使?用?<xsl:apply-templates/>
来?递?归?处?理?输?入?文?档?中?的?内?容?,最?终?关?闭?像?HTML文?件?的?输?出?。?
简?单?的?HTML元?素?可?以?用?不?带?任?何?属?性?的?元?素?生?成?,如?
<html>
,但?是?如?果?HTML元?素?输?出?依?赖?上?下?文?环?境?,你?就?需?要?一?个?强?大?的?机?制?来?选?取?输?出?元?素?并?且?还?会?生?成?它?们?的?属?性?和?属?性?值?。?下?面?的?代?码?片?段?来?自?于?sections.xsl
,其?展?示?了?用?<xsl:element>
和?<xsl:attibute>
来?生?成?HTML的?头?标?签?
1 <xsl:element name= "h{$level}" > 2 <xsl:attribute name= "class" > title</xsl:attribute> 3 <xsl:if test= "$level < 3" > 4 <xsl:attribute name= "style" > clear: all</xsl:attribute> 5 </xsl:if> 6 <a> 7 <xsl:attribute name= "name" > 8 <xsl:call-template name= "object.id" /> 9 </xsl:attribute> 10 <b><xsl:copy-of select= "$title" /></b> 11 </a> 12 </xsl:element>
整?个?例?子?生?成?了?一?个?单?独?的?HTML头?元?素?。?第?1行?定?义?了?一?个?HTML元?素?,例?子?中?元?素?的?名?字?是?一?个?带?有?变?量?
$level
的?表?达?式?,变?量?是?通?过?参?数?出?入?模?板?的?。?这?样?的?话?模?板?就?会?生?成?<hi>
、?<h2>
、?等?等?。?具?体?生?成?哪?个?依?赖?于?上?下?文?环?境?。?第?2行?为?头?元?素?添?加?了?一?个?属?性?class="title"
。?第?3-5行?添?加?了?属?性?style="clear
all"
,但?是?只?适?用?于?头?元?素?的?层?级?数?小?于?3的?情?况?。?第?6行?打?开?一?个?锚?元?素?<a>
。?看?上?去?没?带?有?任?何?属?性?,其?实?是?在?第?7-9行?为?<a>
元?素?添?加?了?name
属?性?。?这?个?例?子?描?述?XSL管?理?的?输?出?元?素?是?一?个?活?的?元?素?,而?不?只?是?一?个?文?本?串?。?第?10行?输?出?头?元?素?的?标?题?文?本?,同?样?是?通?过?传?递?参?数?的?形?式?获?得?,然?后?关?闭?HTML粗?体?标?签?。?第?11行?使?用?</a>
关?闭?锚?标?签?,第?12行?是?头?元?素?的?关?闭?标?签?,这?就?结?束?了?头?元?素?的?定?义?。?
当?你?随?着?模?板?的?递?归?来?处?理?元?素?时?,可?能?会?疑?惑?在?你?文?档?里?的?内?容?文?本?是?如?何?被?模?板?输?出?的?,在?
docbook.xsl
文?件?中?你?会?找?到?如?下?的?模?板?,它?专?门?用?来?内?容?文?本?。?
<xsl:template match= "text()" > <xsl:value-of select= "." /> </xsl:template>
这?个?模?板?的?主?体?由?文?本?节?点?的?值?组?成?,它?只?是?文?本?。?通?常?,如?果?你?的?
stylesheet
中?没?有?提?供?匹?配?的?模?板?,XSL处?理?器?都?有?一?些?内?建?的?模?板?来?获?取?内?容?文?本?。?上?面?的?模?板?就?是?提?供?这?样?的?功?能?,只?不?过?它?明?确?定?义?在?stylesheet
文?件?中?。? 1.4.?生?成?格?式?化?对?象?(FO)
使?用?
fo
版?本?的?stylesheet
可?以?把?你?的?DocBook
XML生?成?格?式?化?对?象?。?这?里?需?要?在?你?的?stylesheet
中?使?用?docbook/fo/docbook.xsl
。?在?你?的?主?stylesheet
文?件?中?使?用?<xsl:include>
引?入?所?有?的?组?件?组?装?成?完?整?的?stylesheet
来?生?成?格?式?化?对?象?。?生?成?格?式?化?对?象?只?完?成?了?输?出?过?程?的?一?半?,你?还?需?要?使?用?XSL-FO
处?理?器?,比?如?FOP。? DocBook的?fo stylesheet和?HTML
stylesheet的?工?作?方?式?类?似?,就?是?用?
<fo:something>
形?式?的?标?签?代?替?相?应?的?HTML标?签?。?例?如?,输?出?in-line
类?型?并?且?使?用?monospace
字?体?,fo的?形?式?会?是?如?下?的?样?子?: <fo:inline-sequence font-family= "monospace" > /usr/man</fo:inline-sequence>
输?出?一?个?DocBook
<filename>
元?素?,在?docbook/fo/inline.xsl
中?的?模?板?定?义?看?起?来?像?如?下?的?样?子?: <xsl:template match= "filename" > <xsl:call-template name= "inline.monoseq" /> </xsl:template> <xsl:template name= "inline.monoseq" > <xsl:param name= "content" > <xsl:apply-templates/> </xsl:param> <fo:inline-sequence font-family= "monospace" > <xsl:copy-of select= "$content" /> </fo:inline-sequence> </xsl:template>
在?XSL标?准?中?指?定?了?很?多?XSL-FO标?签?和?属?性?的?规?范?,要?描?述?在?DocBook中?如?何?遵?循?这?些?规?范?显?然?已?经?超?出?本?书?的?范?围?。?庆?幸?的?是?,这?些?只?是?中?间?格?式?,你?不?许?要?马?上?去?处?理?,除?非?你?正?在?自?己?编?写?
stylesheets
。? [1
]
从?技?术?上?来?讲?,变?量?的?周?期?延?伸?到?<xsl:variable>
父?级?元?素?结?束?的?地?方?,也?就?是?它?最?后?一?个?同?级?兄?弟?
?