Loading AI tools
来自维基百科,自由的百科全书
XSL-FO是XSL Formatting Objects的缩写,它是一种用于文档格式的XML 置标语言。XSL-FO是XSL的一部分,而XSL是一组定义XML数据转换与格式的W3C技术。XSL的其他部分有XSLT与XPath。截止到2006年12月12日,XSL-FO的最新版本是v1.1 (页面存档备份,存于互联网档案馆)。
与其他的HTML与CSS组合不同,XSL-FO是一种unified表示语言,它没有HTML中那样的置标语法格式,并且与CSS更改外部XML或者HMTL文档的缺省表示不同,XSL-FO将所有的文档数据保存在内部。
XSL-FO总的设计思想用户写到文档中的数据是XML语言的文档,而不是FO,所用语言可以是XHTML、DocBook以及TEI或者其他任何的XML语言。然后,用户自己写一个或者找一个XSLT变换,将XML转换成XSL-FO。
一旦生成了XSL-FO文档,就将它送到FO处理器这样的应用程序中。FO处理器将XSL-FO文档转换成可以阅读或者可以打印的格式。最常见的XSL-FO输出格式是PDF或者PostScript,有一些FO处理器只能输出成RTF这样的格式或者只能输出到图形用户界面的页面序列及内容。
人们最初认为XSLT语言本身仅仅是为这个目的所用的,但是现在由于更加通用的XML转换的出现已经超出了这个范围。由于这个转换是一个必然的过程,因此人们也常常将XML转换为XSL-FO的XSLT当作XSL-FO文档本身。甚至是XSL-FO的教程也在FO处理用法也用XSLT命令表示。
XSLT转换过程功能非常强大,它可以自动生成内容的列表、参考链接、索引以及其他的结果。
XSL-FO文档与PDF或者PostScript文档不同,它没有充分地描述文本在不同页面上的布局,相反,它仅仅描述了页面外观以及不同内容放置的位置。根据这些,FO处理器依据FO文档中描述的边界确定文本的位置。XSL-FO规范甚至允许不同的FO处理器根据所生成的页面有不同的响应。
例如,有些FO处理器为了节约空间在换行的时候会加入连字符,有些却不会这样做。不同的处理器甚至会使用不同的连字符算法,从一些简单的算法到需要考虑前后行是否也许要连字符这样复杂的算法。这样就会在不同的页面改变页面布局,尤其是带有边框的时候更是这样。另外还有一些场合,XSL-FO规范明确允许FO处理器根据布局作出一定的选择。
虽然不同的FO处理器生成的结果并不一致,但是人们并不太关心。这是因为XSL-FO的目的是生成经过分页的可打印媒体。XSL-FO文档本身通常用于中介的媒体,通常用于生成PDF文件或者作为最终要分发的打印文档。这与HTML直接作为最终形式分发给用户有所不同。因此,如果需要生成一个打印文档,只需要选择满足需要的FO处理器,比如布局效果以及较少的空白等,而无需在不同的处理器上测试XSL-FO文档。
XSL-FO语言的设计目的是用于分页媒体,采用的方式是类似于用于非分页媒体的HTML以及CSS。因此,页面是XSL-FO结构内在的一个概念,FO赋予了用户很大的权利以确定如何在页面上显示信息。
FO最适合用在“内容驱动”设计的场合,这是图书、文章、法律文档等排版所用的标准方法。这涉及到一行邻近的文本以及嵌入在页面边界中的不同变化信息。这与报纸与杂志中所用的“布局驱动”设计有所不同。在那些文档中,如果无法在特定的位置完整地放进去,那么就会对内容进行裁减。XLS-FO很难处理杂志布局的严格要求,实际上在很多场合,它根本不具备表示所需布局的能力。
尽管这种语言有这些设计局限,但是它仍然能够胜任很多的表现任务。它提供表格、列表、side floats等许多特性。这些特性与CSS的布局特性类似,但是其中一些特性需要用XSLT表示。
XSL-FO文档是XML文档,但是不必遵循DTD或其模型规范。相反,它们遵循XSL-FO规范中定义的语法。
XSL-FO文档包括两个必须部分。第一部分列出页面布局的细节,第二部分是带有置标的文档数据,根据不同的页面布局确定如何在不同的页面上摆放内容。
页面布局定义了页面的属性。可以定义文本的排列方向以满足不同语言的要求,定义页面的尺寸以及页面边界。更加重要的特点是,它可以定义页面的顺序从而允许偶数页与奇数页的布局不同。例如,用于打印的文档可以定义更大的边界;在需要装订的时候可以留出更大的边界。
文档数据部分是一系列的数据流组成的,每个数据流都附属于一个页面布局。数据流包括一系列的按顺序排列的数据块,每个部分一系列的文本数据、内嵌的置标元素或者是二者的组合。在文档边界上也可以加入页码、章节等类似内容。
数据块以及内嵌元素的功能非常类似于CSS,但是空白的填补与保留在FO与CSS之间有所不同。相对于页面方向的数据块及内嵌元素排列方向可以进行充分的定义,这样FO文档可以处理与英文排列方向不同的其他语言。FO规范的语言与CSS 2.1不同,使用开始与结束这样的呈方向中性的术语而不是左与右来表示方向。
XSL-FO的基本内容置标是从CSS及其层叠规则派生出来的,因此XSL-FO中的许多属性除非进行了显示重载否则就会延伸到子元素的部分。
XSL-FO有许多处理文本布局的功能。除了上面介绍的一些之外,XSL-FO语言可以完成下面定义的功能。
一个页面可能需要多栏的布局,在这种情况下,数据块按照顺序从一栏排到下一栏。单个的数据块可以扩展到所有栏,在页面中生成文本的分隔。分隔符上面的数据连在一起,下面的也连在一起,但是上面的不能与下面的连在一起。
根据XSL-FO页面规范的特性,每个页面可能会有不同的分栏及栏宽,因此文本可以很容易地从每页3栏转到每页5栏或者每页1栏。
FO的所有特性都能在多栏页面的约束下正常工作。
XSL-FO列表本质上就是两列并排排列的数据块。每个条目都由左侧或者一行开始方向的数据与右侧或者一行结束方向的数据块组成。从概念上来说左侧就是列表的编号或者标志。但是,也可以是术语表中列出的简单的字符串或者文本。右侧的数据就是所要的结果。这两块数据都可以在同一个数据列表条目中包含多个数据块。
通常XSL-FO列表的编号是XSLT或者其他生成XSL-FO文档的过程产生的。因此,编号列表通常在XSL-FO显式地进行编号。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.