|
(eXtensible Stylesheet Languge)XSL是描述XML文档样式信息的一种语言,是由W3C制定的。上述的层叠样式单CSS,是一种静态的样式描述格式,其本身不遵从XML的语法规范。而XSL本身就是一个XML文档,系统可以使用同一个XML分析器对XML文档及其相关的XSL文档进行分析处理。XSL最近的一个草案于2000年3月提出,尚未成为正式标准。 XSL由两大部分组成:一部分描述如何将一个XML文档转换为可浏览或可输出的格式;另一部分则定义格式对象FO(Formatted Object)。在输出时,首先根据XML文档构造源树,然后根据给定的XSL将这个源树转换为可以显示的结果树,这个过程称作树转换,最后再按照FO分析结果树,产生一个可以在屏幕上、纸上、语音设备或其他媒体中输出的结果,这个过程称作格式化。 到目前为止,W3C还未能出台一个得到多方认可的FO,但是描述树转换的这一部分协议却日趋成熟,已从XSL中分离出来,另取名为XSLT(XSL Transformations),其正式推荐标准于1999年11月16日推出,现在一般所说的XSL大都指的是XSLT。与XSLT一同推出的还有其配套标准XPath,这个标准用来描述如何识别、选择、匹配XML文档中的各个构成元件,包括元素、属性、文字内容等。 使用XSL显示XML的基本思想是通过定义模板将XML源文档转换为带样式信息的可浏览文档。最终的可浏览文档可以是HTML格式、带CSS的XML格式及FO格式。 在XML中使用如下语句声明XSL样式单: < ?xml-stylesheet type=″text/xsl″ href=″mystyle.xsl″?> XSL在网络中的应用大体分为两种模式: 1.服务器端转换模式 在这种模式下,XML文件下载到浏览器前先转换成HTML,然后再将HTML文件送往客户端进行浏览。有两种方式: (1)动态方式:即当服务器接到转换请求时再进行实时转换,这种方式无疑对服务器要求较高。 (2)批量方式:实现将XML用XSL转换好一批HTML文件,接到请求后调用转换好的HTML文件即可。 2.客户端转换模式 这种方式是将XML和XSL文件都传送到客户端,由浏览器实时转换。前提是浏览器必须支持XML+XSL。 将XML文档用XSL样式转换为HTML文档的步骤是:先用XML分析器将XML文档分析成DOM对象,相当于建立了原文档的一个节点树。然后用XML分析器分析XSL文档,用模板匹配的方法去遍历XML节点树,将树中的节点按模板的设定转换为模板指示的显示语言。 XSL主要有以下几条语句: Xsl:stylesheet 声明语句 Xsl:template 相当于编程中函数的概念 Xsl:template match = ″″ 相当于函数调用,去匹配引号中指定的节点 Xsl:apply-templates 应用模板函数 Xsl:apply-templates select =″″ 应用模板函数的调用,跳转到引号中 指定的模板 xsl:for-each select = ″″ 循环语句,遍历与引号中的属性值相同的节点 xsl:value-of select = ″″ 赋值语句,取出引号中指定的属性值 如何选择样式单 CSS和XSL同属于样式单,它们的区别表现在于CSS既可用于HTML,也可用于XML,而XSL是专门针对XML提出的,它不能处理HTML文档。 另外XSL是一种转换的思想,它最终将XML文档转换为另一种可用于输出的文档,而CSS则没有任何转换动作,在整个过程中没有任何新码产生。 XSL中90%的样式规定在CSS中都有定义,但仍然有一些效果是CSS无法描述的,必须使用XSL不可。这些功能包括文本的置换、根据文本内容决定显示方式、文档内容排序等,都是XSL所独有的。再者,XSL遵从XML的语法,而CSS的语法自成体系。 选择样式单还要考虑不同浏览器对样式单的支持程度。目前IE5与Mozilla(即Netscape 5.0)都支持CSS,但支持的程度都有限。至今为止,IE5尚不能完全支持CSS1,即便是支持的部分也存在很多错误,对于CSS2也只提供部分支持。Mozilla在对CSS的支持上已经优于IE5,它采用新一代的Raptor/Gecko引擎技术,已经能够完全支持CSS1,但对CSS2的支持计划尚不明朗。对XSLT而言,只有IE5支持,Netscape 5并不支持。 另外,为弥补传统页面在表现力上的不足,W3C又公布了很多利用XML定义的新标准,如SVG、MathML。 综上所述,一个XML文档的显示方式可以归纳为三种方式:即利用CSS显示、利用XSL转化为FO显示、、利用XSL转化为带有CSS的HTML文档显示。 |