软件项目实训及课程设计指导——如何应用XML+XSLT技术分离Web表示层数据和样式
1、“XML+XSLT”技术在J2EE技术平台中的应用
Java语言及相关的应用技术的产生解决了跨平台的软件应用系统的开发,但没有解决如何实现跨平台的数据交换问题。在传统的软件应用系统中,为了能够实现在不同的系统平台之间交换数据、同时还要保证数据的完整性,是相对比较麻烦的一件事情。
基于此应用的目的和要求,诞生了XML(eXtensibleMarkupLanguage,可扩展标记语言)技术。应用XML语言可以实现软件应用系统中的“内容”与“表现”相互分离,并且XML还是一种可扩展的标签语言。
如下示例图中的代码为一个定义学生信息的XML格式文档示例,读者从此示例中可以了解到XML格式文档只定义数据内容(或者应用系统处理的最终结果),而这些数据或者结果最终在什么终端设备显示、以及以什么风格显示都没有定义。
基于XML语言及应用技术的XSLT(ExtensibleStylesheetLanguageTransformations,扩展样式表转换语言)的主要作用是将XML由一种格式转换为另一种格式(当然,也可以为其它格式,如HTML网页,纯文字等),而在J2EEWeb应用系统的开发实现中,应用XSLT技术能够实现将XML格式的源文档通过转换引擎并按照XSL(eXtensibleStylesheetLanaguage,扩展样式表语言)模板的格式最终转换输出目标HTML格式的文档。
如下示例图中的代码为某个XSLT文档文件的内容,其中包含有xsl:stylesheet、xsl:template等标签,同时在xsl:template/xsl:template标签内包含有一个完整的HTML文件所应该具有的标签。这些标签都起什么作用?源XML文档最终在浏览器中的显示结果如何?
由于XSLT文档文件本身也是一个XML格式的文档,因此它也总是由如下的XML声明语句起始:?xmlversion=1.0encoding=gb?
但由于本文章的篇幅有限,读者如果需要详细了解和学习XML、XSLT和XHTML等相关的语法、技术和应用等,可以参考作者的《J2EEWeb核心技术——XHTML与XML应用开发》一书中相关章节内容。
读者也许还会有许多的疑问,比如为什么要多此一举?请读者保持耐心,继续往下阅读。
2、XSL技术概述及在J2EE系统平台中的应用
(1)XSL是什么
XSL就是可扩展样式表语言(eXtensibleStylesheetLanaguage),XSL是参考SGML(StandardGeneralizedMarkupLanguage,标准通用标记语言)中的DSSSL(DocumentStyleSemanticsandSpecificationLanguage,文档样式语义和规范语言,它主要是用来设置SGML的表现样式)而设计的。
(2)为什么要提供XSL技术
尽管“CSS+Div”能够为Web应用系统的页面开发人员分离Web页面中的结构和风格,从而实现分离Web页面中的数据和表现。但如果其中的数据是采用XML格式表示,此时如果再继续采用CSS层叠样式表技术来为该XML格式文档数据设置表现样式,由于CSS层叠样式表采用的是与XML完全不同的一套语法规则定义,无法使用相同的XML解析器进行处理和解析,这为软件应用系统项目开发带来了许多额外的负担。
最初设计XSL的主要目的就是希望采用XML格式的语法规则提供一种为XML文档设置表现样式的新方法。而CSS的主要问题是由于没有逻辑控制的能力——CSS不能重新排序文档中的元素、也不能判断和控制哪个元素被显示、哪个不被显示、当然也不能统计计算元素中的数据等功能要求。
因此CSS层叠样式表技术一般只适合用于输出固定内容的最终Web页面文档,但CSS层叠样式表技术的主要优点是简洁、消耗系统资源少;而XSLT虽然功能强大,但因为要重新索引XML结构树,所以消耗系统内存量比较多。
在企业级的软件应用系统开发中,一般常常将CSS和XSLT两者相互结合使用。比如在Web服务器端用XSLT处理相关的文档,而在客户端则用CSS层叠样式表技术来控制数据在浏览器端的最终显示风格,这样的设计方案能够大大地减少响应时间。
3、XSL技术主要包括两个组成部分
XSL技术主要包括两个组成部分:XSLT(eXtensibleStylesheetLanguageTransformation)和XSL-FO(XSLFormattingObject)。
其中的XSLT主要是实现转换XML格式的文档,而XSL-FO主要是格式化XML文档。其中XSL-FO的作用就类似CSS层叠样式表技术在HTML页面中的作用,但作者在本文中重点为读者介绍XSLT相关的技术及应用。
因此,XSL从本质上可以看着为是一种可以将XML转化成其它类型语言的语言、一种可以过滤和选择XML数据的语言、一种能够格式化XML数据的语言。
4、XSLT主要是面向转换类型的应用
XSLT的主要作用是将XML文档数据内容由一种格式转换为另一种格式——比如,将XML格式的文档转换为HTML/XHTML(或者WML)等格式的文档是目前XSLT应用最为广泛的应用领域。
为什么要应用XSLT及相关的技术?因为XML格式的数据文档能够便于交换但不便于人类的阅读和理解、特别是机器自动化地阅读。因此如何能够按照人类的要求显示XML格式文档中的数据?如何实现将同一个XML格式文档中的数据在不同的显示平台中显示输出?
5、XSLT数据格式转换的基本实现原理
数据格式转换的重要思想是要把XML格式文档视为一种树形结构,转换的过程其实就是从源XML格式文档树生成结果树的过程。其中的XSL样式单定义了源XML格式文档树和结果树中对应部分的转换规则,在每条规则中包含了一个模板,并对应着一种模式——模板定义了转换的结果和转换的基本规则,而模式则规定了需要进行转换的元素或属性对象。
6、XSLT数据格式转换的实现过程
首先,将XML格式文档转换为DOM(DocumentObjectModel,文档对象模型)树结构,这主要是利用XSLT来实现——XSLT处理器首先要做的是通过XML解析器(比如DOM或SAX)技术读取XML格式文档中的各个标签和数据,并将XML树状结构重新整理和组合产生出一个临时的树状结构,这个树状结构称为XML文档结果树。
其次,再对转换后的DOM树进行格式化并转换为其它的目标形式,这主要是利用XSL-FO来实现。XSL处理程序将这些数据转换(也就是格式化过程)为另一种格式良好的XML文件(如:WML、HTML、VoiceXML等)。
目前在微软IE浏览器中已经内嵌有实现这个转换过程的XML处理器程序。欢迎读者继续阅读作者的另一篇文章《软件项目实训及课程设计指导--应用XML+XSLT技术分离Web表示层数据和样式示例》可以详细学习和了解如何在软件应用系统开发中应用XML+XSLT技术。
7、应用XSLT实现对XML格式文档中的数据转换和合并的应用示例
为了能够让读者对“XML+XSLT”技术在企业级软件应用系统开发中的应用有感性的认识,作者在下文中给出一个典型示例加以说明。
在下面示例中的XML格式文档中的“学生信息”节点中有多个“班级”节点,可以通过XSLT中的xsl:for-each标签把这些节点数据在一个表格单元格中显示出来,从而产生出合并数据的应用效果。当然,也可以实现其它的应用效果,读者可以自行实现。
(1)示例中所对应的XML格式文档
该XML文档文件名称为student.xml,其中在?xml-stylesheet?标签中通过href属性指定对应的XSLT文件,该文件名称为student.xsl。
?xmlversion=1.0encoding=GBstandalone=yes?
?xml-stylesheettype=text/xslhref=student.xsl?
软件学院学生信息
学生信息性别=男
姓名张三/姓名
出生日期/10/18/出生日期
专业软件工程/专业
班级方向=J2EE软件开发软件1班/班级
班级9教东/班级
/学生信息
学生信息性别=女
姓名李四/姓名
出生日期/2/18/出生日期
专业软件工程/专业
班级方向=数字媒体方向软件2班/班级
班级9教东/班级
/学生信息
/软件学院学生信息
(2)示例中的XML文档所对应的XSLT文档(student.xsl)文件
在student.xsl文件中应用了XSL语言中的一些标签,而XSLT文件中的标签语法大致可分为如下的三种类型:
1)选择模式,如xsl:for-each、xsl:value-of和xsl:apply-templates等标签,这些选择模式的标签语句将数据从XML文档中提取出来,是一种简单获得数据的方法。在这些标签中都有一个select属性,选取XML文档中特定的节点名的数据。
2)测试(识别)模式,如xsl:if和xsl:when等标签,类似于编程语言中的条件语句,主要是用于条件判断和识别等用途。
3)匹配模式,如xsl:template标签,它用于构建和定义一个模板。该标签中的match属性主要是用于关联XML文档中的标签元素和转换模板,但match属性的值是XPath表达式(比如match=/则是定义整个XML格式文档);位于xsl:template标签元素内部的内容则定义了写到输出结果的HTML标签代码。
?xmlversion=1.0encoding=gb?
xsl:stylesheetxmlns:xsl=