### XSL 对象格式使用指南（四）

下面是我们将在文档中增加列表的内容：
1.If a syllable has an accent mark, that syllable always gets the stress: acción (action), teléfono.
2.If the word ends with a vowel, n, or s, the next-to-last syllable gets the stress: amigo, hablan (they talk), animales.
3.All other words are accented on the last syllable: hotel, similar, espa?ol.
一个列表由四个元素构成。<fo:list-block>属性包含单独的<fo:list-items>属性。列表不同的部件被<fo:list-item-label>属性和<fo:list-item-body>属性固定。你可以通过下面的图表所示属性来设定列表的间隔：
A.provisional-distance-between-starts
B.provisional-label-separation
C.start-indent for list-item-label
D.start-indent for list-item-body
E.end-indent for list-item-label
F.end-indent for list-item-body
现在我们来创建一个 XSLT 模板来处理一个规划好的列表。开始先设定列表的各项部件的标签，再通过 FOP 输出。使用相关的 em 间隔，列表将拥有合理的间隔和字体大小：
<xsl:template match="ol">
<fo:list-block space-before="0.25em" space-after="0.25em">
<xsl:apply-templates/>
</fo:list-block>
</xsl:template>
<xsl:template match="ol/li">
<fo:list-item space-after="0.5ex">
<fo:list-item-label start-indent="1em">
<fo:block>
<xsl:number/>
</fo:block>
</fo:list-item-label>
<fo:list-item-body>
<fo:block>
<xsl:apply-templates/>
</fo:block>
</fo:list-item-body>
</fo:list-item>
</xsl:template>
制作无序列表跟以上类似。在一个无序列表中各部件的相关定义为：
<xsl:template match="ul/li">
<fo:list-item>
<fo:list-item-label start-indent="1em">
<fo:block>
•
</fo:block>
<!-- etc. -->
定位列表
使用列表样式创建一个有限的表格并定位它们的条款和解说并不能依靠 XSLT。我们将在分开的行内放入条款和解说，象普通的 HTML 所演示的。
<xsl:template match="dl">
<fo:block space-before="0.25em" space-after="0.25em">
<xsl:apply-templates/>
</fo:block>
</xsl:template>
<xsl:template match="dt">
<fo:block>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
<xsl:template match="dd">
<fo:block start-indent="2em">
<xsl:apply-templates/>
</fo:block>
</xsl:template>
这儿是小册子的一部分，展示了怎么规划列表和定位列表。注意下面的文本流程不需要我们做任何改动。
表格
下面显示了一个典型的表格。
Singular Plural
yo canto nosotros cantamos
tú cantas vosotros cantáis
él canta
ella canta ellos cantan
ellas cantan
通过 XSL 格式化过的表格有以下元素：
<fo:table-and-caption>
<fo:table-caption>
<fo:table>
<fo:table-column>
<fo:table-header>
<fo:table-row>
<fo:table-cell>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:table-footer>
<fo:table-row>
<fo:table-cell>
<fo:table> 属性相当于 HTML 的<table>标签； <fo:table-body>属性相当于 HTML 的<tbody>属性。注意只需要定义 <fo:table-column> 属性，它允许你指定表格队列的宽度。你也可以用标签定义单元格具有相同的队列和范围。<table-and-caption> 元素在当前的 FOP 执行中不能实现。你必须在<fo:table-column>元素定义 column-width 属性来调整表格队列的宽度。FOP 不能自动调节并显示你的表格的宽度。
XSLT 可以制作简单的表格，假定已经定位了第一行表格的宽度，还得确定是 72 象素/英寸宽度单位。但还没有处理行和列的跨距。请看代码示例。
第三人称需要一个<br />标签，可以用 FO 转换成：
<xsl:template match="br">
<fo:block><xsl:text> </xsl:text></fo:block>
</xsl:template>
表格处理结果显示为：
概要
正如你见到的，XSLT 和 FO 相结合允许你将 XHTML 文档 或其他 XML 文档转换成印刷格式。用 XSL 的对象格式化功能只能做初步的版面设计。