




免费预览已结束,剩余11页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于XML的语义层报表模型的研究与实现2010年7月第47卷第4期四川大学(自然科学版)JournalofSichuanUniversity(NaturalScienceEdition)Ju1.Z010Vo1.47No.4doi:103969/j.issn.0490-6756.2010.04.010基于XML的语义层报表模型的研究与实现林碧英,刘丽钦(华北电力大学计算机科学与技术学院,北京102206)摘要:研究了在报表设计器和企业数据源之间建立语义层,在语义层中定义数据模型,该模型封装了数据源的技术细节,用户基于语义层设计报表,只需简单地拖拽语义层元素即可,不需要编写复杂表达式和复杂SQL.语义层的加入不仅给用户的操作带来了极大的方便,而且增强了企业数据的安全性.在模型中字段上建立视图间的关联关系,关系自动作用在报表上,不需要进行视图间连接就可以设计出多源报表,极大地提高了复杂报表的计算效率.关键词:语义层;报表;数据模型;视图;XML中图分类号:TP311文献标识码:A文章编号:04906756(2010)04072306ResearchandimplementationofsemanticslayerreportmodelbasedonXMLLINBiYing,LIULiQin(DepartmentofComputerScienceandTechnology,NorthChinaElectronicPowerUniversity,Beijing102206,China)Abstract:ThispapermainlyresearcheshowtOestablishsemanticslayerbetweenreportdesignerandenterprisedatasourceandhowtodefinethedatamodelinsemanticslayer.Thismodelhassealedthedatasourcetechnicaldetail.Whenusersdesignreportbasedonthesemantics1ayer,theyonlyneedtodraganddropsemanticlayerelementsimply,donotneedtOcompilecomplexexpressionorSQL.Theusingofsemanticslayernotonlybringsenormousconvenientforusersoperation,butalsostrengthensthesecurityofenterprisedata.Inthemode1hasestablishedtheviewincidencerelationinthefield,therelationalautomatisminthereport,doesnotneedtocarryontheviewtOconnectmaydesignthemultiplesourcereport,whichenormousenhancementcomplexreportcomputationalefficiency.Keywords:semanticslayer,report,datamodel,view,XML1引报表作为一种信息组织和分析的有利手段,是企业信息系统的重要组成部分之一.据不完全统计,系统实际应用的6o%以上与报表有关1.但是一般的软件开发语言都不带报表制作工具,要开发报表模块需要程序员编写大量的代码,这些代码可重用性差,后期维护复杂.所以,企业一般都借助于第三方的专业报表工具来制作报表.但是,目前的报表工具存在专业性不强3,安全性不高,用户操作复杂和设计复杂报表时效率低下等问题.针对目前专业报表工具中存在的问题,我们介绍了一种语义层报表模型,在报表设计器和企业数据源之间建立语义层,来解决这些问题.2语义层报表模型的基本原理基于XML的语义层报表模型在报表设计器和企业数据源之间建立语义层,在语义层中定义数收稿日期:20090607作者简介:林碧英(1955一),女,安徽人,硕士,教授,主要研究领域为计算机网络应用,计算机构件与组件技术通讯作者:刘丽钦.Email:liuliqin一18163.corn724四川大学(自然科学版)第47卷据模型,此模型封装了数据源中的技术细节,例如:数据库,表,视图,SQL,存储过程以及它们之间的关联等.语义层并不包含数据,是一层建立在数据源之上的业务逻辑层.语义层数据模型由专业的技术人员设计制作,完成其中的各种表,视图和关系等的设定,把复杂的数据库结构描述成易于理解的业务术语.用户在报表设计器中基于语义层设计报表,只需简单的拖拽语义层元素即可,不需要书写复杂SQL和编写复杂的表达式.3语义层报表模型的结构语义层报表模型整体结构如图1所示.图1语义层报表模型整体结构图Fig.1Semanticlayerreportmodeloftheoveral1structure从图1中可以看出,语义层报表模型由数据源,语义层和报表设计器三部分组成.数据源为语义层建立的数据模型提供数据来源;在语义层中建立数据模型,模型中包含视图的定义,编辑风格的定义,变量的定义;在报表设计器中基于语义层数据模型定义报表模板,对报表模板进行计算,按照要求的格式输出报表的计算结果.4语义层报表模型的实现本文介绍的语义层报表模型采用Java和XML技术实现.Java是由sun公司开发的一种跨平台,面向对象的程序设计语言.XML(eXtensibleMarkupLanguage)可扩展标记语言,是W3C(WorldWideWebConsonjum)组织制定的一种通用语言规范3.XML提供了描述不同类型数据的标准格式,可表示任何类型的结构化或半结构化的信息.4.1数据源的连接报表中的数据来源复杂,可能来自于数据库,也可能来自于数据文件(Text文件,XML文件等).目前大多数的报表数据来自于数据库,数据库种类繁多,有Oracle,SQLServer,Access和DB2等.对于数据文件作为数据源的情况我们采用文件流的形式来处理.对于数据库作为报表数据源的情况,我们采用了数据库连接池技术来管理数据库的连接.4.2语义层数据模型的设计语义层数据模型对底层数据源进行封装,屏蔽数据源的技术细节,以通俗易用的方式向报表设计器提供数据信息.语义层数据模型(SemanticsDataMode1)由三部分组成,可以形象化的表示成三元组:SDM=(SemanticsViewList:SemanticsEditStyleList;SemanticsVariableList;)其中,SemanticsViewList表示语义层视图集合;SemanticsEditStyleList表示语义层编辑风格集合;SemanticsVariableList表示语义层变量集合.语义层数据模型结构如图2所示.图2语义层数据模型结构图Fig.2Semanticlayerdatamodelstructure语义层数据模型用XML表示如下:<Semantic><ViewList><!一视图列表一><View><!一视图定义一><!一视图字段列表一><ColumnList></ColLlmrlList><!一视图过滤条件列表一><WhereList></WhereList><!一定义在视图上的关联关系列表一><Associations></Associations></VJew></ViewList><!一编辑风格定义列表一><EditStyleList>?</EditStyleList><!一参数定义列表一>第4期林碧英等:基于XML的语义层报表模型的研究与实现725<VariableList></VariableList></Semantic4.2.1视图视图是一张二维表,在语义层中凡是要将数据源中的数据带人报表进行展现的,都要将它做成一个视图.视图可以直接在数据源中的数据表上定义;可以通过SQL语句执行的查询结果构成一个SQL查询视图;也可以由存储过程返回的结果构成一个存储过程视图.不论哪种类型的视图,用户在基于语义层设计报表时使用方式都是一样的,语义层屏蔽了不同视图之间的差异.由图2语义层数据模型结构图可以看到,视图(SemanticsView)由四部分组成,可以形象化的表示成四元组:SV一(ViewColumnList;ViewForeignColumnList:ViewWhereList;ViewAssociations;)其中,ViewColumnList表示视图字段集合;ViewForeignColumnList表示伪字段集合;ViewWhereList表示过滤条件集合;ViewAssociations表示视图关联关系集合.(1)视图字段.视图字段对应数据源中数据表字段,视图字段包含数据表字段具有的所有属性,此外还包含标题属性(可以为英文字段名定义中文标题),编辑风格属性,显示值属性(为编码字段设置其显示值).(2)伪字段.所谓伪字段是指由视图中的数据经过一些函数运算而得到的结果.比如定义金额伪字段,其表达式为:金额一单价*数量.用户设计报表时不用区分是伪字段还是普通字段,它们的使用方法是一样的,在计算报表时,系统会自动计算伪字段的表达式.(3)过滤条件.定义视图按一定的条件从数据源中过滤数据,比如为订单视图定义货主名称不为空的过滤条件.一般的过滤条件并不强加在视图上,而是由用户在设计报表时自由的选择是否使用这些过滤条件,避免了用户自己在SQL中书写where条件.还有一类必选的用于权限控制的过滤条件,它是强加在视图上的,用户设计报表时必须使用此过滤条件.在XML中用过滤条件类型属性来表示是一般的过滤条件,还是特殊的过滤条件.(4)关联关系.关联关系的定义是语义层数据模型中非常重要的一部分,它直接影响到复杂报表的运算效率.在介绍关联关系以前先介绍一下主扩展格的概念.报表模板中单元格的值为集合表达式时,该单元格就为扩展格.如果报表计算时扩展格不依赖于其它单元格就能够自我复制,那么它就是主扩展格.本文中把语义层视图问的关联关系分为三种:一对一,一对多和多对多.视图间的关系可以建在视图上,也可以建在视图包含的字段上.建在视图上的关系和建在视图字段上的关系有很大的区别.比如在报表设计器中定义了一张报表,如表1所示.表1报表定义模板Tab.1Reportdefinitiontemplate表1中A2的表达式为:score.select(studentID),其中score表示数据集名,studentID表示数据集中的字段名,select表示要进行的操作.整个表达式的功能是:列出score数据集中studen-tID字段的值.这里A2单元格是主扩展格,A2格的取值决定了B2,C2和D2单元格的取值.由表1我们发现A2,C2中的数据都来自于score数据集,B2,D2中的数据来自于student数据集.如果利用传统的报表工具制作这张报表,处理方法是把score表和student表进行连接形成一个SQL数据集,然后用这个数据集为报表提供数据.连接运算极大的占用了CPU资源,有时会导致数据量大大增加.而利用本文介绍的模型设计这张报表,不需要进行数据表的连接,在语义层中定义学726四川大学(自然科学版)第47卷生(student表对应的中文视图名)视图和成绩(score表对应的中文视图名)视图之间的关联关系,这个关系会自动的作用在报表上.如果把学生(student)和成绩(score)之间的关联关系定义在视图上,报表进行运算的算法如下:f*计算报表定义模板*r报表定义模板类对象;*con报表运行上下文,为报表提供数据来源;*return返回计算后的报表,IReport是报表接口,ReportDefine实现了这个接口.fpublicIReportcalcReport(ReportDefiner,Contextcon)获取r中定义的数据集列表;根据报表运行上下文con到数据源中检索出每一个数据集对应的数据;获取r的一个未计算格,令P一这个未计算格;while(P不为空)if(P不是扩展格)计算P表达式的值;把计算的结果赋给P.value;把P的状态置为已计算;)else(调用扩展格计算算法cellExp;获取r的一个未计算格,令P一这个未计算格;)f*扩展格计算算法*r中间计算报表;*dateMap报表定义数据集列表;*c要计算的单元格ipublicvoidcellExp(IReportir,MapdateMap,Cellf)计算c的取值表达式,设计算结果为(.,);for(int一1;<一;+)令value=Vi;把c的状态置为已计算;把指向所在记录的行集指针保存到c中;获取C的后跟格,令一c的后跟格;while(m不为空)(if(m为扩展格)(递归调用扩展格计算算法cellExp;)elseif(m与c来自同一个数据集)从c保存的行集指针指向的记录中取出/7/表达式的值赋给.value;把的状态置为已计算;)else以报表中定义的两个数据集的关联关系为过滤条件到m来自的数据集中检索m表达式的值赋给.value;把的状态置为已计算;)if(m有后跟格)获取m的后跟格,令m=m的后跟格;)else(break;)对c所在的行执行1次行复制算法;令cc对应的复制格;假设每个数据集中有条记录,报表定义模板中有列,对类似于表1所示的报表定义模板进行计算的时间复杂度为O(n*).表1中B2和D2单元格表达式中的字段都来自于student数据集,而利用以上算法进行计算时我们发现在cellExp函数中两次重复的以关联规则为过滤条件去检索name和grade字段的值.如果把学生(student)和成绩(score)之间的关联关系定义在成绩视图的学生ID字段上,那么报表进行运算的算法如下:calcReport方法与前面介绍的相同,不再赘述,下面介绍扩展格计算算法:publicvoidcellExp(IReportir,MapdateMap,Cellc)计算C的取值表达式,设计算结果为(,);第4期林碧英等:基于XML的语义层报表模型的研究与实现727for(inti一1;<一;i+)令C.value一;把c的状态置为已计算;把指向所在记录的行集指针保存到c中;if(f包含关联规则)以数据集间的关联关系为过滤条件到关联数据集中检索与C值对应的记录,把指向该记录的行集指针保存到C中,C中可能包含多个关联规则,行集指针采用Map结构进行保存;获取C的后跟格,令mC的后跟格;while(m不为空)if(m为扩展格)递归调用扩展格计算算法cellExp;)else从C保存的行集指针指向的记录中取出m表达式的值赋给m.value;把m的状态置为已计算;if(m有后跟格)获取m的后跟格,令mm的后跟格;)elsebreak;)对C所在的行执行1次行复制算法;令cc对应的复制格;)定义在字段上的关联关系在主扩展格中保留多个行集指针,分别指向相关联的数据集,不需要重复遍历关联数据集就可以获得需要的数据.假设每个数据集中有条记录,报表定义模板中有m列,通常情况下>m,对类似于表1所示的报表定义模板进行计算的时间复杂度为O(n.).对比以上两种建立视图问关联关系的方法,如果m比较大或报表定义模板中包含嵌套的扩展格,那么定义在字段上的关联关系在计算效率上的优势就非常明显了.模型中对以上两种方法都提供了支持.建在字段上的关联关系只对该字段起作用,建在视图上的关联关系对视图中所有字段都起作用,在我们无法确定把关系建在哪个字段上时,就把它建在视图上.字段上的关联关系优先级高于视图上的关联关系.4.2.2编辑风格编辑风格是指字段的显示格式.比如日期类型的字段显示成yyyy-MMdd的格式.视图中的任何字段或伪字段都可以绑定一种编辑风格,当该字段被使用时,编辑风格自动套用在单元格上,不用用户手动设置.4.2.3变量在语义层中定义一些变量,这些变量可以为视图上定义的过滤条件提供参数,也可用于视图中访问权限的控制.例如定义了一个employlD变量,在订单视图中定义一个必选的过滤条件,其过滤表达式为:雇员ID一?or雇员IDin(?),其中?表示参数,第一个?对应的参数表达式为:employID,第二个?对应的参数表达式为:que-ry(select雇员IDfrom雇员where上级一?or上级in(select雇员IDfrom雇员where上级一?),employID,employlD).基于订单视图设计的报表,在查看报表数据时用户本身的ID值通过session传给employlD变量,该变量又把值传给订单视图中的过滤条件,从而使得用户只能看到自己和自己下属负责的订单信息,起到了权限控制的作用.4.2.4语义层数据模型的管理语义层数据模型是由XML文件来存储的,本文利用JDOM来完成语义层数据模型XML文件的创建,加载,修改与保存,并且对语义层文件进行解析.JDOM是面向Java的读,写和操作XML数据的应用程序接口(API)引.4.3设计报表4.3.1报表定义报表的定义过程实际是语义层数据模型的实例化过程.本模型中给用户提供了类似于Excel的可视化报表设计器.在报表设计器中利用JDOM技术解析语义层数据模型XML文件,形成语义树6.设计器中提供了列表,分组,取值,求平均,计数,求最大值,求最小值,求和等常用的操作供用户选择.用户基于语义层定义报表,首先在语义树中勾选作用在视图上的过滤条件;然后选择要进行的操作,最后利用鼠标拖拽语义树上的元素到单元格中即可.在拖拽语义树上的元素时会触发一个鼠标事件,该事件把选择的操作和鼠标选取的语义元素解析成报表计算引擎可以识别的标签;把语义元素属728四川大学(自然科学版)第47卷性(例如编辑风格,显示名称等)赋给单元格的对应属性;结合用户选择的过滤条件,形成可以直接在数据库中运行的sq1.通常报表是分区的,一个完整的报表包括表头区,表尾区,标题区,数据区,页眉页脚区等等.用户可以自由的定义报表的区域和报表的格式.报表定义完成后保存为报表定义模板.xml文件.4.3.2报表计算报表计算是报表引擎对报表定义模板进行解析,计算的过
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 黑龙江2025自考法学法律文书写作案例题专练
- 上海2025自考智能分子工程高分子化学与物理案例题专练
- 福建2025自考市场营销管理系统中计算机应用高频题考点
- 青海2025自考新闻学英语二高频题考点
- 甘肃2025自考学前教育科学研究与论文写作主观题专练
- 2025年如何选取化学试题及答案
- 河北2025自考教育学德育原理案例题专练
- 广西2025自考生物育种技术基因编辑原理易错题专练
- 辽宁2025自考社会工作中国福利思想模拟题及答案
- 青海2025自考环境设计公共环境设施设计高频题考点
- 低空经济框架报告低空经济
- 西游记课件-狮驼岭
- 2.3 二次函数与一元二次方程、不等式 课件(共24张)
- 呼吸道感染及护理
- 神舟十号课件
- 河南省委党校在职研究生入学考试真题及答案
- 红十字协会AED课件
- 汽车产品安全管理制度
- 企业风险防控制度汇编与实施指南
- 2025-2026学年冀人版(2024)小学科学二年级上册(全册)教学设计(附教材目录 )
- 2025-2030年中国农机行业市场深度调研及前景趋势与投资研究报告
评论
0/150
提交评论