图老师小编精心整理的第15章 XSL格式化对象希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~
【 tulaoshi.com - Web开发 】
XML教程可扩展的样式语言(Extensible Style Language,XSL)的第二部分是格式化语言。这是XML应用程序,用来描述如何将内容显示给读者。一般地说,样式单使用XSL转换语言,将XML文档转换成使用XSL格式化对象符号集的新的XML文档。当许多人希望Web浏览器将来的某一天能够了解如何直接显示用XSL格式化对象来标记的数据时,目前就需要有其他措施,使输出文档进一步转换成其他的某个格式,如PDE。
本章的主要内容如下:
* 理解XSL格式化语言
* 格式化对象及其属性
* 对页面进行格式化和设置样式
* 在文本中插入规则
* 在显示的文档中嵌入图形
* 与URI目标的链接
* 在文本中插入列表
* 替换字符
* 使用序列号
* 脚注
* 浮动
* 理解如何使用XSL格式化属性
15.1 XSL格式化语言概述
XSL格式化对象提供了比HTML+CSS(甚至CSS2)更为高级的可视化布局模型。XSL格式化对象所支持但HTML+CSS不支持的格式化包括非西方布局、脚注、页边距注解、交叉引用中的页号等等。特别是,虽然CSS主要用于Web,但XSL格式化对象的用途更为广泛。例如,能够编写使用格式化对象来编排整个打印稿的XSL样式单。不同的样式单能够将同一个XML文档转换到Web站点中。
有关格式化语言的警告语
XSL仍处于开发中。过去XSL语言已经发生了本质上的变化,并且将来仍将发生变化。本章是根据1999年4月21日XSL规范草案(第四稿)编写的。当读者阅读本书时,XSL的这一草案很可能已经被取代,而且XSL原来的句法已经改变。即便如此,本规范的格式化对象部分甚至也没有转换语言规范那样完善。如果确实遇到不能完全正常运行的情况,应将本书中提供的实例与最新的规则加以比较。
糟糕的是,仍然没有任何软件能实现1999年4月21日的XSL规范草稿的所有内容,甚至只对格式化对象这部分也没有任何软件能够实现。实际上,到目前为止,只有James Tauber的FOP,才能部分地执行XSL格式化对象,它使用XSL格式化对象来将XML文档转换成PDF。还没有任何Web浏览器可以显示用XSL格式化对象编写的文档。
当然,随着此项标准向最终版本改进时,当开发商实现XSL格式化对象时,这种情况最终是可以得到修正的。在那之前,我们不得不面对这样的选择:要么忍痛使用目前不完善的、未完成的XSL,并且试图避开遇到的所有程序错误和疏忽,要么使用更确定的技术(如CSS),直到XSL更加可靠为止。
15.2 格式对象及其属性
XSL格式化对象元素正好有51个。在这51个元素当中,大多表示各种类型的矩形区域。其他的大部分都是矩形区域和空间的容器。下面以字母顺序编排,列出这些格式化对象:
* bidi-override
* block
* character
* display-graphic
* display-included-container
* display-rule
* display-sequence
* first-line-marker
* float
* flow
* footnote
* footnote-citation
* inline graphic
* inline-included-container
* inline-rule
* inline-sequence
* layout-mast
er-set* list-block
* list-item
* list-item-body
* list-item-label
* multi-case
* multi-properties
* multi-property-set
* multi-switch
* multi-toggle
* page-number
* page-number-citation
* page-sequence
* region-after
* region before
* region-body
* region-end
* region-start
* root
* sequence-specification
* sequence-specifier-alternating
* sequence specifier repeating
* sequence-specifier-single
* simple-link
* simple-page-master
* static-content
* table
* table-and-caption
* table-body
* table-caption
* table-cell
* table-column
* table-footer
* table-header
* table-row
XSL格式化模型是基于称之为区域(area)的矩形框,该区域包含有文本、空格或其他格式化对象。尽管CSS页边距被XSL的缩进所代替,但正如CSS框一样,每个区域在其各侧都有边框和贴边。XSL格式化程序读取格式化对象来确定将哪个区域放在页面的什么位置。许多格式化对象都会产生单一的区域(至少对大多数情况即是如此),但由于页面分隔符、单词折行、断字以及将可能存在的不确定量的文本填充到有确定区域中的其他方面的原因,一些格式化对象偶尔也确实产生多个区域。
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)含有间隔的框与含有空白字符的框是不一样的。含有空间的框是指页面或屏幕上的实际空的区域,例如,页面的左和右边上的页边距。这与页面上单词间的空格字符是不同的。
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)格式化对象主要在它们所包含的内容上有差别。例如,list-item-label格式化对象就是一个包含项目符号、数字或放在列表项之前的其他指示符的框。list-item-body格式化对象就是一个包含列表项的文本(无标签)的框。而list-item格式化对象就是一个包含list-item-label和list-item两个格式化对象的框。
格式化对象可进一步分成四类不同的矩形区域:
1.区域容器
2.块区域
3.行区域
4.内联区域
这四种类型的区域就形式了粗略的层次关系。区域容器包含其他更小的区域容器以及块区域。块区域又包含其他块区域、行区域和内容。行区域包含内联区域。内联区域包含其他内联区域和内容。所以,更具体地分为:
* 区域容器在XSL中是最高级别的容器。在包含它的区域内,可以精确的坐标加以定位。它既可以包含其他更小的区域容器,也可包含一系列的块区域和显示空间。可以将书的一页看作为区域容器,而这个区域容器包含五个其他区域容器:页眉、页的主体内容、页脚以及左和右页边距(在本例中,页边距区域无内容)。产生区域容器的格式化对象包括region-body、region
-before、region-after、region-start和region-end。* 块区域代表块级元素,如段落或列表项。尽管块区域可能包含其他块区域,但在每个块区域的开始之前和结束之后都总是有一个换行符。块区域不能用坐标来精确定位,而是顺序地置于包含它的区域内。当在某个块区域之前或内部加入和删除其他块区域时,此块区域的位置发生移动,以便腾出空间。块区域可能含有行区域、显示空格以及连续地排列在用来包含的块区域中的其他块区域。块区域还可能包含一个图形影像。产生块区域的格式化对象包括block、display-graphic、display-link、display-rule和list-block。
* 行区域表示块部分的一行文本。例如,列表项中的每个分开的行都是行区域。行区域可以包含内联区域和内联空间。对应的行区域没有格式化对象。取而代之的是,格式化引擎可计算行区域,例如确定在块区域内部如何折行。
* 内联区域是一行中的成分,如单字符、脚注引用或数学方程。内联区域可以包含其他内联区域和内联空间。产生内联的格式化对象包括character、inline-graphic、inline-link、inline-rule、inline-sequence和page-number。
15.2.1 fo命名域
在XSL样式单中,用于XSL格式化对象的XML元素放http://www.w3.org/XSL/Format /1.0命名域中,如下的声明所示:
xsl:stylesheet
xmlns:xsl="http://www.w3.org/TR/WD-xsl"
xmlns:fo="http://www.w3.org/XSL/Format/1.0"
result-ns="fo"
选择fo作为前缀的概率大约为99%。因此,几乎总可以看到下列元素以fo作前缀:
* fo:bidi-override
* fo:block
* fo:character
* fo:display-graphic
* fo:display-included-container
* fo:display-rule
* fo:display-sequence
* fo:first-line-marker
* fo:float
* fo:flow
* fo:footnote
* fo:footnote-citation
* fo:inline-graphic
* fo:inline-included-container
* fo:inline-rule
* fo:inline-sequence
* fo:layout-master-set
* fo:list-block
* fo:list-item
* fo:list-item-body
* fo:list-item-label
* fo:multi-case
* fo:multi-properties
* fo:multi-property-set
* fo:multi-switc
* fo:multi-toggle
* fo:page-number
* fo:page-number-citation
* fo:page-sequence
* fo:region-after
* fo:region-before
* fo:region-body
* fo:region-end* fo:region-start
* fo:root
* fo:sequence-specification
* fo:sequence-specifier-alternating
* fo:sequence-specifier-repeating
* fo:sequence-specifier-single
* fo:simple-link
* fo:simple-page-master
* fo:static-content
* fo:table
* fo:table-and-caption
* fo:table-body
* fo:table-caption
本章,我将使用fo作前缀,不再进一步说明。
命名域在第18章"命名域"中讨论。在那之前,私獾闹皇荴SL格式化对象元素的名称都是以fo:开头。
15.2.2 格式化属性
总的来说,XSL文档中的各种格式化对象都指定内容放在页面中的顺序。但是,格式化的所有详细内容(包括页的大小、元素大小、字体、颜色等等,但不局限于这些)都是由XSL属性指定的。这些格式化属性以各自格式化对象元素的特性来表示。
这些属性中的许多属性的细节都应该从CSS中了解了。下面所进行的工作是为了确保CSS和XSL使用相同的名称来表示同一个内容。例如,CSS属性的font-family的含义与XSL的font-family属性是一回事;尽管在CSS和XSL中给属性赋值的句法不同,但值本身的句法是完全一样的。要说明fo:block元素格式化成与某种Times字体的近似,可以使用下面的CSS规则:
fo:block {font-family: New York, Times New Roman, Times, serif }
而XSL的等价语句可按下列方式,将font-family包括在fo:block开始标记中:
fo:block
font-family="New York,Times New Roman,Times,serif"
尽管从表面上来看不同,但样式名(font-family)和样式值(New York, Times New Roman, Times, serif)却是完全一样的。CSS的font-family属性指定为一组字体名,各字体名以逗号分开,而顺序是从第一选择到最后选择。XSL的font-family属性指定为一组字体名,各字体名以逗号分开,选择顺序是从第一个选择到最后一个选择。CSS和XSL都将关键字serif理解为任意的衬线字体。
由于本章是基于XSL草案规范的第四稿,所以无法彻底完成CSS和XSL等效属性的完全同步。在下一个草案中将解决此问题。
当然,XSL格式化对象支持许多CSS中没有等效属性的属性,例如,font-size-adjust、ligature、character和hyphenation-keep。所以,需要学习这些属性,以便最大限度地发挥XSL的优势。标准的XSL属性有:
* auto-restore
* azimuth
* background
* background-attachment
* background-color
* background-image
* background-position
* background-repeat
* border
* border-after-color
* border-after-style
* border-after-width
* border-before-color
* border-before-style
* border-before-width* border-bottom
* border-bottom-color
* border-bottom-style
* border-bottom-width
* border-collapse
* border-color
* border-end-color
* border-end-style
* border-end-width
* border-left
* border-left-color
* border-left-style
* border-left-width
* border-right
* border-right-color
* border-right-style
* border-right-width
* border-spacing
* border-start-color
* border-start-style
* border-start-width
* border-style
* border-top
* border-top-color
* border-top-style
* border-top-width
* border-width
* bottom
* break-after
* break-before
* caption-side
* cell-height
* character
* clear
* clip
* color
* column-count
* column-gap
* column-number
* column-width
* country
* cue
* cue-after
* cue-before
* digit-group-sep
* elevation
* empty-cells
* end-indent
* ends-row
* extent
* external-destination
* float
* flow-name
* font
* font-family
* font-height-override-after
来源:http://www.tulaoshi.com/n/20160219/1602158.html
看过《第15章 XSL格式化对象》的人还看了以下文章 更多>>