XML技术讲座之七 XML文档显示与样式单(上)

Posted on 2005-05-17 16:37  lanbin  阅读(596)  评论(0)    收藏  举报

XML关于文档浏览的基本思想是将数据与数据的显示分别定义,XML文档本身不涉及各种数据的具体显示方式,文档的显示实际上是通过一个外部样式表,又称为样式单来描述的。

样式单(Style Sheet)是一种描述结构文档表现方式的文档,它既可以描述这些文档如何在屏幕上显示,也可以描述它们的打印效果甚至声音效果。与传统使用的<font>等标记相比,样式单有许多突出的优点:表达效果丰富;文档体积小;便于信息检索;可读性好。

迄今为止,W3C已经给出了两种样式单语言的推荐标准,一种是层叠样式单CSS(Cascading Style Sheets),另一种是可扩展样式单语言XSL(eXtensible Stylesheet Language)。

样式单一般不包含在XML文档内部,以独立的文档方式存在。如果对一个XML文档施加某一个样式单,可在 XML文档中使用标记
<?xml-stylesheet type="..." href="..."?>
予以声明,表示该XML文档的显示效果由所引用的样式单决定。例如:

<?xml-stylesheet type="text/css" href="mystyle.css"?>
表明mystyle.css决定XML文档的显示样式。而

<?xml-stylesheet type="text/xsl" href="mystyle.xsl"?>
表明该XML文档使用XSL样式单mystyle.xsl。

内容与形式相分离使XML文档更偏重于数据本身,而不受显示方式的细枝末节的影响。而且通过定义不同的样式单可以使相同的数据呈现出不同的显示外观,实现XML数据的可重用性。

层叠样式单CSS

层叠样式单CSS 是一种样式描述规则,目前W3C有两个推荐标准,CSS1和CSS2。CSS2是在CSS1的基础上制定的,基本上涵盖了CSS1,并在CSS1的基础上增加了媒体类型、特性选择符、声音样式等功能,并对CSS1原有的一些功能进行了扩充。

CSS最初在HTML中得到应用,它的基本思想是为结构文档中的各个标记定义出相对应的一组显示样式。利用CSS人们可以改变文档中元素的显示属性,如位置、颜色、背景、边空、字体、排版格式等等。

定义CSS的基本格式如下:

Selector {property:value; property:value; ...}
Selector: 选择符,被施加样式的元素,可以是标记(tag)、类(class)、标识(id)等。
Property:样式属性,可以是颜色、字体、背景等等。
value:样式属性取值,决定样式结果。
同样的XML 文档数据资料,CSS样式单可以赋予它不同的表现方式。

(具体实例请见www.cnw.com.cn)

可扩展样式单语言XSL

XSL(eXtensible Stylesheet定的。上述的层叠样式单CSS,是一种静态的样式描述格式,其本身不遵从XML的语法规范。而XSL本 Languge)是描述XML文档样式信息的一种语言,是由W3C制身就是一个XML文档,系统可以使用同一个XML解释器对XML文档及其相关的XSL文档进行解释处理。XSL最近的一个草案于2000年3月提出,尚未成为正式标准。

XSL由两大部分组成:一部分描述如何将一个XML文档转换为可浏览或可输出的格式;另一部分则定义格式对象FO(fomatted 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文件送往客户端进行浏览。有两种方式:

  • 动态方式;即当服务器接到转换请求时再进行实时转换,这种方式无疑对服务器要求较高。
  • 批量方式;实现将XML用XSL转换好一批HTML文件,接到请求后调用转换好的HTML文件即可。

2.客户端转换模式

这种方式是将XML和XSL文件都传送到客户端,由浏览器实时转换。前提是浏览器必须支持XML+XSL。

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(即Netscape5.0)都支持CSS,但支持的程度都有限。至今为止,IE5尚不能完全支持CSS1,即便是支持的部分也存在很多错误,对于CSS2也只提供部分支持。Mozilla在对CSS的支持上已经优于IE5,它采用新一代的Raptor/Gecko引擎技术,已经能够完全支持CSS1,但对CSS2的支持计划尚不明朗。对XSLT而言,只有IE5支持,Netscape5并不支持。

另外,为弥补传统页面在表现力上的不足,W3C又公布了很多利用XML定义的新标准,如SVG,MathML。其中SVG针对于矢量图形的显示与传输,MathML针对于数学公式的显示与传输,对于这一类XML文档,需要另外开发单独的浏览器或插件,目前还没有达到实用的阶段。

综上所述,一个XML文档的显示方式可以归纳为三种方式:即利用CSS显示、利用XSL转化为FO显示、、利用XSL转化为带有CSS的HTML文档显示。

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3