基于XSLT和XML的报表开发技术在船员管理系统中的应用

2014-08-17 02:59朱文婷陆海冰
关键词:样式报表船员

朱文婷, 陆海冰

(中海信息系统有限公司, 上海 200080)

0 引 言

报表作为组织、统计和展示信息的有力手段,为企业管控层提供了经营管理、辅助决策的重要依据,因而逐渐成为企业资源计划(Enterprise Resaurce Planing,ERP)系统及各类信息化系统的重要组成部分。由于目前国内外主流的报表产品(如水晶报表、Style Report、BIRT等)采用的是传统的条带式报表布局,对于复杂报表样式的开发难度较大,在兼容性、通用性、可扩展性和可维护性方面存在一定缺陷,难以满足大数据背景下日趋变化的报表开发需求,因此,通过分离报表样式与数据实现Web报表动态生成成为了近年来报表开发研究中的热点。

对于国内大型航运企业而言,船员管理是企业生产经营各项环节中的重点。船员管理系统以船员上下船调度管理为核心,通过记录船员的具体调度情况(在船、在岸、远洋、近洋等),动态核算生产经营成本、船员薪资报酬及船东费用等重要生产数据。其整个业务链催生了大量复杂的统计报表,这些报表将作为企业管理层统计分析、战略决策的重要依据,指导企业改革发展、优化产业结构调整。从业务角度来说,船员报表涵盖船员结构分析、船员上下船情况统计、船员薪资统计、船东费用结算、船舶配置统计等;从展现形式来说,船员报表包含列表、交叉表、文档及组合报表等。由于船员报表内容丰富、结构复杂,普通的报表开发工具难以满足船员管理系统对于报表开发的需求,因此,在船员报表开发中引入可扩展样式表转换语言(Extensible Stylesheet Language Transformations, XSLT)和可扩展标记语言(Extensible Markup Language, XML)技术,通过分离报表样式与数据,实现报表动态生成的轻量级报表引擎。该方法具有灵活性高、实用性强、应用前景广等优点;同时,根据开发者对XSLT的熟悉程度进行深度扩展,几乎能实现当前大多数较为复杂的报表开发。

以Excel报表为例,分析探讨XSLT和XML技术在报表开发中的实际应用和创新之处。

1 关键技术

1.1 XML和XSLT技术

XML是一种具有可扩展性、平台无关性、结构性和自我描述性等特点的语言,其并不关心数据间的逻辑关系,而是将数据进行结构化定义,是软件开发领域中最通用的数据交换格式之一。XSLT是一种用来转换XML文档结构的说明性计算机语言,其独立于任何编程语言,不仅可以实现不同结构的XML文档之间的转换,还可以将XML文档转换为HTML,WORD,EXCEL,C程序文档等[1]。XPath是一种路径定位语言,其基于XML的树状结构,提供在数据结构树中找寻节点的功能。XSLT在实现XML格式转换过程中,利用XPath来筛选XML节点集(即在 XML 文档中对元素和属性进行遍历),从而获得若干满足条件的节点及其所有子节点数据[2]。

在报表开发中引入XML技术和XSLT技术,利用XML获取和传递数据,利用XSLT格式化数据,可以使报表真正做到数据与格式的完全分离。此外,在XML数据文档生成后,应用程序若需获取数据,只需针对XML文档进行处理,无需再与数据库进行数据交互,因此,大大减轻了数据库服务器的负担。

基于XSLT、XML和Java技术的报表引擎有如下创新优势:

1) 报表界面高效开发。结合企业用户对Excel擅长的特点,采用用户提供的Excel报表格式,将其格式化后,可快速转化为XSLT格式,具有开发快、精度高的特点。该方式还能成功支持各种型号的打印机,满足劳资常用的工资条针式打印以及报表套打等高精度打印的要求。

2) 数据与样式通用的编程语言。XSLT逻辑化基本元素继承了一般逻辑编程语言的特性,可支持条件判断、循环、参数传递、模板等复杂逻辑开发,不仅可以对复杂数据进行处理,还可以对报表界面格式进行动态逻辑展现,从而能满足在Excel下对几乎所有数据和格式的复杂逻辑处理。

3) 轻量级的报表引擎。XSLT与Java技术的结合,实现了一种开放、轻量级、功能强大的报表技术引擎。相比传统的第三方报表工具的重量级或技术壁垒、扩展性差等特点,其恰恰更能体现这种通过巧妙融合一些常用且熟悉的技术达到亲民创新的效果,从而更贴近擅用Excel的用户的需求,同时帮助开发者提高报表开发速度以及处理复杂逻辑的能力。

1.2 系统开发相关技术

船员管理系统的技术架构(见图1)采用的是基于Eclipse RCP框架的多层C/S结构,实现了服务与表现的物理分离。其中:Client层采用富客户端,包含了基于Eclipse SWT/JFace OSGI技术的界面展现和XML+XSLT报表引擎技术;Server层包含了Spring技术及Hibernate技术,Spring负责Client和Server两层之间基于Http协议的通信,Hibernate通过对JDBC进行对象封装实现数据的持久化。这种基于多层C/S结构的Java桌面应用开发,为开发人员提供了组件化的设计模型、本地化的专业外观、更高的运行效率以及更好的重用性、可扩展性和可维护性。

2 XSLT和XML在报表生成中的应用原理

XSLT和XML技术在报表生成应用中的基本原理简要概括为:将XML文档作为数据源文档,使用编写好的XSLT转换样式表(转换模板),通过跨平台的XSLT转换语言,将源文档转换成为目标文档(XML,HTML,C程序等文件)[3]。具体应用到船员管理系统的Excel报表开发中,可以简单归结为2个字:“画”和“填”。

1. “画”:根据客户提供的样式或说明,通过提供的文档或手工的方式画出客户需要的Excel报表样式,并转换为XSLT样式。

2. “填”:根据报表的业务逻辑需求,通过访问数据库取得需要的数据,经过XSLT转换处理,将数据填充至固定格式的相应位置上。

基于上述原理,采取“XSLT+XML”的方式,将复杂的报表开发简化为简单的“样式+数据”的开发模式,最终实现报表开发。这种方式既适合于产生不规整的报表,也适用于产生规整报表,通过与Java结合,能达到一般报表开发工具不能达到的效果。船员报表形成过程见图2。

图1 船员管理系统技术架构图

图2 报表形成过程

对图2中各步骤具体分析如下:

1. 根据船员报表统计的业务逻辑需求,报表系统通过Java数据库连接(Java Data Base Connectivity, JDBC)技术将数据从数据库服务器中提取到结果数据集中,通过Hibernet技术对JDBC进行对象封装,将结果数据集映射到相应的java类(即JavaBean对象)中。每个数据结果集对应唯一JavaBean,JavaBean中每个字段的数据类型与数据库保持一致,应用XMLBeanUtil类中的toXML函数将整个JavaBean对象及其包含的所有数据在内存中转换为XML格式,为报表的形成提供XML数据源文档。

2. 根据用户提供的Excel报表样式,利用Excel文件支持HTML格式的功能(即将Excel文件后缀名改为.html),将Excel报表样式转换为HTML文件格式,即可实现用Web浏览器浏览报表。HTML样式只是中间过渡格式,最后需要将其转换为XSLT格式,以形成XSLT转换样式表。

3. 当XML数据源和XSLT转换样式表兼备时,XSLT运用路径定位语言XPath对XML数据源进行遍历,将匹配的数据结点按指定规则填充至样式表中,形成目标报表[4]。

3 XSLT和XML在报表生成中的实际应用

XSLT和XML为各种报表的设计提供了强大的支持,能够完全满足报表格式频繁变化的需求,支持报表新旧格式之间的转换,实现报表样式与数据的分离。下面以船员管理报表系统中的“申办证书人员名单”为例,进一步分析XSLT和XML在报表生成中的应用方法。

3.1 XSLT样式准备

根据“申办证书人员名单”的统计需求,在Excel中绘制出报表样式(见图3)。将Excel样式另存为HTML格式,使用Altova XMLSpy软件打开该HTML文档,并按照XSLT模板规则进行格式化。经过上述2个步骤,获得标准的XSLT转换样式表applyCertViewData.xslt。

图3 报表样式

3.2 XML源数据准备

船员管理系统中,“申办证书人员名单”的报表开发主类继承了XsltReportView报表基类,该基类中包含报表查询界面创建函数、参数绑定函数、存储过程调用函数、报表样式获取函数等XSLT报表创建及生成所涉及到的相关函数。将存储过程调用函数返回的数据结果集经XMLBeanUtil.toXML函数处理,以XML文档形式存储在内存中。本例生成的applyCertViewData.xml文档代码为:

二副

大管轮

.

上述XML文档中,声明了XML版本及编码方式,applyCertViewData元素包含了每组数据集的子节点内容及其对应的JavaBean文件,这种树状结构的数据存储模式十分有利于数据的遍历和提取。

3.3 XSLT转换

XSLT转换即对XSLT样式表中的模板规则进行定义,本例定义了一套将源树转换为结果树的规则。一个模板规则分2个部分:模式(Patterns)用于匹配源数据树中的元素,使用XPath语法定义;模板(Template)用于指示如何创建结果树的一部分[5]。在实际代码开发中,模板规则由xsl:template元素定义,其match属性就是一个模式,用于匹配源数据树中的元素;其内容就是模板,用于生成输出结果树。

在本例的XSLT转换中,applyCertViewData.xslt样式表结合applyCertViewData.xml源数据文档,经过XSLT模板规则定义,实现源数据格式向目标数据格式的转换,从而动态生成“申办证书人员名单”报表。XSLT转换的部分关键代码为:

XSLT 是针对 XML 文件的样式表语言,因此在上述XSLT转换代码的起始部位声明了XML和XSLT的命名空间、版本等信息,并指定数据输出格式为Excel格式。用于调用模板,通常放置在输出模板中;select属性用来指定要处理的节点集。用于模板规则创建, match属性从XML中选取满足条件的节点(即元素名称为ArrayList的节点),针对这些特定的节点形成一个特定输出形式的模板;该输出模板嵌套了带有

等表格标签元素的HTML样式。在HTML样式中,表名和表头固定不变,表身的数据填充(即数据结果部分)可通过函数从XML源数据中循环获取节点集中的每个XML 元素来实现,其中,select=”./ applyCertViewData”是一个XPath 表达式,用于定位XML文档中所有applyCertViewData元素的路径。函数只是选取节点,并没有取出节点的值;而< xsl:value-of>元素用于提取节点值,表示获取XML文档中元素名称为empNo所对应的值。通过对XML进行循环遍历及提取节点值,将结果数据按照特定规则填充至HTML样式表格中,最终形成目标报表(见图4)。

当然,此处例举的只是XSLT在报表中最为普遍的应用,事实上,XSLT作为扩展样式表转换语言,具有十分强大的功能,其在动态生成报表行和列、动态统计、换页等方面展现了极大的优势:

(1) 其一些带有逻辑特性的基本元素,如if,for-each,when,variable,with-param等等,使得XSLT可以像其他一些逻辑编程语言一样,实现复杂的数据处理,多样化的报表展现;

(2) 报表数据来源多样化,任何来源于数据库、文件等形式的数据,经过Java获取转换成XML数据形式,都能为XSLT报表使用;

(3) 可使报表的数据与表达形式分离;

(4) 具有极为简便的报表样式绘制过程。

4 结 语

近年来,随着船员管理系统业务不断更新,船员报表统计的多样化需求也在不断增加。不过XSLT和XML技术的应用使得报表开发工作变得简单、快捷。由于该项技术具有平台无关性、可将数据与样式完全分离等特点,开发人员在修改报表样式时,只需修改XSLT文件(即模板格式),而无需修改数据库表结构或查询语句、JAVA源代码、页面设计元素等,这对于系统而言,既节省了开发时间,又易于实施维护。因此,XSLT和XML技术不仅可以大量地应用于C/S结构的系统中,而且可在基于Web服务的B/S结构系统中得到广泛应用。

图4 申办证书人员名单表

参考文献:

[1] 刘红,王晔,潘晨,等. 基于XML和XSLT的通用报表系统的设计与实现[J].计算机应用与软件, 2011,28(2):142-144.

[2] 陈奇. XSLT、XPath和DOM的应用研究[J]. 计算机工程,2003, 29(3):14-15.

[3] 台雯. XML和XSLT技术在Web应用中的研究[J]. 天津职业院校联合学报,2011,13(11):84-87.

[4] 王继,王年,程志友,等. 基于XSLT的电能质量参数Web报表设计与实现[J]. 电测与仪器,2009,46(6):30-34.

[5] 李雷孝,呼和. 基于XSLT的Web页面自动生成系统的研发[J]. 内蒙古工业大学学报,2011,30(1):13-17.

猜你喜欢
样式报表船员
CPMF-I 取样式多相流分离计量装置
我国注册船员超170万
CPMF-I 取样式多相流分离计量装置
取样式多相流分离计量装置
镇长看报表
这是巴黎发布的新样式
中韩船员沉船遇难
月度报表
月度报表
年终总结