XSL-FO查看源代码讨论查看历史
XSL-FO |
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表示。[1]