admin 管理员组文章数量: 1086019
2024年4月20日发(作者:300500h型钢一米多重)
维普资讯
医学信息2008年5月第2l卷第5期Medical Information.May.2008.Vo1.21.No.5
基于XML的批量数据处理与分析
以电子试卷为例
一一
朱国良.周金海
(南京中医药大学信息技术学院,江苏南京210046)
摘要:应用SAXParser和XPath解析器对客户端提交的电子试卷进行批量处理分析.处理结束后直接生成Excel格式的分析结
果报表和PNG格式的图像统计报表。实现了医疗、教育等行业数据处理的无人离机操作,在节约人力和结果准确性上有明显
的优势。
关键词:XML解析;数据匹配;自动阅卷;
0 Bl言
应用程序之间存储和交换数据的模式。
2×ML文档的解析
目前大多数高校在计算机基础课程的考试上采用的是
用软盘的形式提交作业,部分高校仍然采用纸质试卷,不论
是软盘格式还是纸质试卷在阅卷上都需要人工操作,这些操
在处理XML文档之前,首先要解析它。解析器的任务是
将XML文档分解为一个个单元元素,使程序员能够通过某
种途径获得这些元素。常用的解析器有DOM,SAX,Xpath。
2,1 DOM(Document Object Model,文档对象模型)
作往往是简单而重复的,人工处理不仅效率不高而且容易出
错误。基于这些原因,提出了电子试卷的概念,考试采用B/S
的结构实现,客户端提交的数据以表的形式存储在后台数据
库中。但是这种形式的电子试卷不利于自动化阅卷,数据处 DOM解析器的本质是将XML文档转换为树形结构存储
理依赖于特定的数据库,在跨平台处理和数据交换上不具有
良好的可扩展性。XML语言以其天然的跨平台优势和广泛的
应用为我们提供了解决之道,采用XML格式的电子试卷完
全可以去除后台数据库,客户端提交的数据以独立的文件保
存在服务器上,不论是在Windows,Linux亦或Unix平台下,
在内存中,文档中的每个元素在树中表现为一个节点,树中
每个叶结点都对应着文档中的一个值,元素的属性以Map的
形式组织。只要得到文档的根节点就可以顺序遍历整个文
档。树形结构的数据优点在于通过一个节点可以访问其他相
关节点,即它是上下文相关的,缺点在于当文档很大时生成
当前主流的开发语言都可以去处理,程序各模块即使采用不
同的开发语言也可以流畅的交换数据。
树会消耗大量内存,速度也较慢。
2.2 SAX(Simple AH for XML,XML简单应用程序接口)
SAX解析器的工作原理是程序在读取XML的输入构件
1 XML概述
时就报告事件,由事件处理器决定是否处理及如何处理。例
如解析器在遇到<date>标记时,调用DefauhHandler的
startElement(String,Stirng,Stirng,Attributes)方法,至于startEle—
XML(eXtensible Markup Language)是一种规范定义的元
语言,即用于定义其他语言的语言。作为规范,XML定义了用
于创建XML标记语言的规则【j1。XML规定了用一套用于组织
和描述文本的标 ̄H(Tag),标记通常成对出现,其中之一为开
始标记,另一为结束标记,这两个标记之间的所有文本均称
为元素。
XML有两种用途:面向文档的应用和面向数据的应用。
面向文档的应用其重点在文字的格式及数据陈述上,因为不
ment执行什么操作,是由程序员来控制的,这样就可以通过
DefauhHandler定义的各种接口来实现数据的处理和统计分
析。事实上解析器只负责读取文档和调用接口,实际的数据
处理在DefauhHandler中。由于SAX解析器不存储文档,因
此无法通过当前元素访问其他元素,即它是上下文无关的。
优点在于它解析的速度和零内存消耗。
2-3 Xpath(XML Path angLuage)
同的元素或者不同的格式就对应着不同的操作指令。像
XHTML,ANT等是面向文档的,它们每一个特定的元素对应
XPath是用来对XML文档中的节点寻址的一种语言。采
着不同的操作,整个文档或者是为了完成规定的任务或者以
指定方式显示所包含的数据。面向数据的应用则将重点放在
了如何组织与类型化数据,这样的语言要定义一个在各软件
收稿日期:2008一叭一29
用非XML表达式来定位节点,选定指定的节点后可以进行
各种操作,如取节点的值,获取指定属性的值等。一般将
Xpath作为配置文件的读取工具,因为它是根据给出的表达
式定位到文档的指定节点,而不是像DOM或者是SAX那样
维普资讯
JI学l 医学信息2008年5月第21卷第5期Medical Informati0n.May.2008.Vo1.21.No.5
的遍历文档来取值。在本系统中将Xpath作为获取标准答案
的工具,在用SAX分析电子试卷的时候用堆栈来保存当前元
素的路径,根据堆栈中内容计算Xpath的检索表达式,从标
准答案的XML文档中取得答案,然后对两者进行 配。恰如
其分的发挥了SAX和Xpath各自的优点:
3 XML文档的更新与保存
3.1更新节点
文档的更新是用DOM来实现的,因为SAX和Xpath都
不存储文档,所以不能用来修改文档中节点的值及数据。
3.2保存数据
客户端提交的数据必须保存到服务器上、才能进行处理
和分析。客户端的当前数据在写入磁盘以前在内存中是以
Document组织的,Document以树形结构来组织数据,保存数
据其实就是将Document写入到磁盘中,Document的树形结
构为XML格式数据的保存提供了很大的方便。
本系统采用Transformer将Document格式的数据以
XML格式存储在磁盘中。首先需要将Document封装为
DOMSource类,然后将File0utputStreanl封装为ResuhStream
类,在设置了相关的输出属性后就可以调用Transformer的
transform(DOMSource,ResuhStream)方法将数据存储到磁盘
中。
4数据处理和分析
4.1数据匹配比较
数据匹配是自动化批阅试卷的基本功能。主要涉及两方
面的数据,客户端提交的数据和要 配的数据 在下图中
Answer.xml为客户端提交的数据(待处理数据),Key.xml为
匹配数据,weight.xml为分值标准。将答案从程序中分离 来
而不是集成在程序中提高了软件的复用性。不必为特定的试
卷专门编写程序来处理数据。
电子试卷中的数据可以分为两类。一类是确定性的,例
如选择题的答案,在匹配时只要跟 配文档种数据直接比较
就可以得出结果。另一类是不确定性的,即答案具有模糊性,
例如填空题和简答题的答案。要实现完全自动化阅卷必须解
决如何处理不确定答案的问题。
对于不确定性答案采用如下2种模式来 配:①多答案
备选严格匹配模式。这种模式匹配要求待处理的数据必须与
给定的匹配数据集中任意备选答案完全相同,只要在 配数
据集中能够找到一个跟待处理的数据完全一致的答案则
配成功,否则匹配失败。匹配数据集中包含了所有可能ff{现
的正确答案。②正则表达式模糊匹配模式。基于正则表达式
的模式匹配是通过关键词来匹配数据的,表达式中包含了必
须出现的关键词以及各关键词之间的JI页f序:它不要求待处理
数据与匹配数据完全一致,只要能通过正则表达式的验证即
注:
Answer文件夹中为所有待处理的试卷
Key.xml为标准答案
Weight.xml为分值标准
图数据处理流程图
为匹配成功。
待处理文档(Answer.xm1)中的数据是南实现了Default—
Handier的PaperHandler来逐项分析的。由于SAX的无记忆
性,无法通过当前节点获取解析器在解析到本节点时所走过
的路径。如何在匹配文档(Key.xm1)中快速,准确的找到跟当前
节点相匹配的值是本系统的核心关键所在。
将堆栈和Xpath结合起来能够较好的解决这个问题。堆
栈弥补SAX解析器的先天不足。纪录解析器所走过的路径,
函数expression(stirng name) ̄/]根据堆栈中存储的信息计算检
索表达式,如果要进行匹配,Xpath则根据expression(stirng)的
计算结果在匹配文档(Key.xm1)中检索 要 配的值r)(path采
用的地址定位取值而不是遍历文档非常适合这种反复的特
定值检索,并且有较快的检索速度),将待处理文档Answer.
xm1)当前节点的值与此值进行比较,若 配失败则记录此次
配,否则返回,处理下一个节点。具体算法设计如下:
public void startElement(String namespaee,Stirng lname,
Stirng qname,Attributes attr)
{
stack.push(qname);//节点压入堆栈,记录解析器的解析
路径
Stirng exp=expression(”@key”);//获取检索表达式
Stirng key=xpather.evaluate(exp,document);//根据检索表
达式在 配文档中取值
维普资讯
医学信息2008年5月第21卷第5期Medical Information.May.2008.Vo1.21.No.5
,
b
~
Stirng answer=attr.getValue(”key”、:
C
V
便于报表程序根据这些数据生成指定格式报表。由于将每一
个匹配失败的元素抽象为ErrorUnit类,极大地减轻了分析统
if(answer.equals(key)){return;1/,精确匹配,
d
完全相同的
C
O
为正确
else
h
a
计阶段的工作量。具体算法如下:
public int mark0
{
m
n
e
璐
h
{
-I
a
errorLogger.addError(qname);//答案错误,记录错误的题
int grade=0://rgade统计要扣掉的分数
目类型
C
h
)
t
n
吼
a
n
.暑
e
n
Stirng exp=expression(…/’ //获取检索表达式
Stirng key=xpather.evaluate(exp,document);//根据检索表
达式在匹配文档中取值
i compare(answer,k y)){return;}//模糊模式匹配,根据
正则表达式或备选答案 ̄//1t
else
{
errorLogger.addError(qname);//答案错误,记录错误的题
目类型
}
}
)
public void endElement(Stirng namespace,Stirng lname,
Stirng qname)
{
stack.pop0;鸺处理过的节点弹出堆栈
)
4.2结果分析
在匹配数据时将全部匹配失败的元素保存在ErrorLog~
get链表中,ErrorLogger将每一个不匹配的错误抽象为一个
ErrorUnit,ErrorUnit有2个关键属性:name和count。其中
name属性用来记录匹配失败的元素名称,在电子试卷中表
现为错误的题型,例如是选择题或者填空等。count屙性用来
对相同种类的错误计数。ErrorLogger在插入每一个ErrorUnit
时会先检查其中是否已经有这种类型的错误(以name为判
断的依据),若存在则修改此ErrorUnit的count属性,否则生
成一个新的ErrorUnit添加到链表中。
本阶段的任务是逐个分析ErrorLogger中的ErrorUnit,计
算每份试卷的得分,并进行相关的统计,将统计结果返回,以
for(int i=O;i<errorLogger.size0;i++、
{
errorUnit=(ErrorUnit)errorLogger.get(i);
Stirng name:errorUnit.getName0;
int count=errorUnit.getCount0;
int weight=getWeght(name);//根据题目类型获取单个题
目分值
rgade+=count weight;
)
return MAX~grade;//总分减去扣掉的分数即为最后得
分
)
4.3批量处理
实现数据的批量化处理需要脚本语言的支持。前面我们
谈到,XML语言有面向文档的应用和面向数据的应用,脚本
语言的开发主要是应用XML的元语言特性,即面向文档的
应用,这里我们把XML作为开发脚本语言的语言。考虑如下
的用户需求:①批阅所有的试卷,得出分数,存为score.xls;②
压缩原始试卷生成papers一20071031.zip,作为存档;③加密已
压缩过的存档文件(这个操作非常耗时);④将加密过的文件
上传到服务器tip:l/papesr. s.njutcm.edu.cn;⑤将score.xls发
送到邮箱teacherWang@njutcm.edu.cn;
以上各步骤之间存在着依赖情况,只有在前一个任务完
成之后才能进行下一步操作,用户希望在一个批处理文件中
完成以上的所有功能,中间不需要人的参与,即实现离机数
据处理。实际上用户的需求可能是各种各样的,并不完全是
如上所述的要求,那么如何满足客户的多样性需求呢?解决
办法之一是拆分和组合,这是批处理系统的核心思想。
所谓拆分,就是把任务单元化,每个单元只完成一个特
定的处理(原子操作),比如压缩文件,或者加密文件,或者是
上传文件等等,这些操作不可再次分割,即原子操作。当用户
需要完成一项工作时,可能并不需要所有设计的功能,那么
就把需要的单元组装起来。拆分的目的是为了便于以后的组
合,恰当的功能拆分能够使软件有更大的灵活性,更好的满
足用户的要求。
将各个拆分单元组合起来是通过脚本文件来实现的。脚
本文件中的每个命令都对应着一个类(单元),在XML语言
维普资讯
医学信息2008年5月第2l卷第5期Medical Information.May.2008+Vo1.21.No.5
中表现为一个元素。例如<compress>元素表示压缩文件,解析 XML的应用主要集中在电子商务站点和信息化系统(医
器在分析文档时,若碰到<compress>元素就调用Compress类 疗,企业等信息化系统)中,这些行业往往也是数据密集型
的指定方法。方法需要的参数通过元素的属性来传递,例如< 的,批量化的数据处理及分析有着较为广阔的应用前景。
corepress file=”./Answer”dest=”D:/resuh”/>,解析器在调用
startElement方法时,可以很容易地通过属性file和dest得
参考文献:
到"./Answer”和”D:/result”这两个参数,然后将这两个参数传
【1】Cay s.Homtmann,Gary Cornell著.Core Java,Volumn II—Advanced
递给Compress类,就完成了compress任务,其他命令的定义
FeaturesIM].Seventh Edition.北京:机械_T业出版社,2006
与此类似。
[2】Graeme Malcolm著.孙英霖,梁超,译.SQL Server 2000与XML
为了设计更为通用的批处理程序,我们采用映射文件
数据库编程【M】.第2版jE京:清华大学出版社,2003
(command—map.xm1)映射命令的方式将脚本命令与类单元一
[3】Adam Drozdak著.Data Structure and Algoriths in Java[M].第2版.
北京:机械工业出版社,2006
一
映射。解析器在 ̄N<compress> ̄素时,首先在映射文件中
查找compress元素对应的类单元的存储路径,并将此路径作
[4】Frank Sommers.JSP&JSF:Java EE5的新特性fJ】.程序员,2006.7.
为参数传递给ClassLoader(java+net.URLClassLoader)加载相
【5】W3C.XML Path Language[S].W3C万维网 会.1999,1 1,16.
f6】阎菲,陈莉,向郑涛等著.Java程序设计教程[M].北京:中国水利水
应的类单元,调用方法invokeMethod(String name,Stirng[】args)
电出版社.2004
来完成指定的操作。用户可以设计自定义的类单元,将新命
f7]Robe ̄V.Stumpf,Lanette C,Teagne著.Object-Oriented Systems
令添加到映射文件中,批处理系统便可以识别新的命令,使
Analysis and Design with UML[M].北京:清华大学出版社,2005
软件具有良好的可扩展性。
编辑 壬鸿兰
5应用
面向服务的医院专科管理信息系统设计
曹蕾 ,高云飞2,吕庆文 ,张园。
(1.南方医科大学医工学院,广东广州510515;2.南方医科大学南方医院妇产科,广东广州510515)
摘要:随着医院信息化建设不断深入发展,大而全的综合型HIS系统不能满足医院各专科信息管理的特殊要求,为了建设以病
人为中心的医院专科管理信息系统,解决医院信息建设的可持续发展问题,本文引入了面向服务的软件思想,并以某大型医院
的产科门诊管理信息系统的设计为例,介绍了面向服务的Web三层体系结构。
关键词:HIS;管理信息系统;面向服务;SOA ‘
1医院信息化发展现状与存在的问题
参与调查的中国6000多家医院中,只有31%的医院用上了
从上个世纪90年代开始,我国许多医院就开始进行医
管理信息系统。已建成的医院信息系统中,85%是以财务核算
院信息化建设。经过医院管理者和信息化工作者多年的努
为中心的HM IS,只有10%左右的医院正在尝试建设HC IS,
力,各医院信息化水平得到了极大的提高,信息化发展取得
而GM IS还未开始实施 。
了显著的成绩。据文献介绍,我国90%以上的大型医院已经
目前,囊括医院各管理模块的以财务为中心的”大而全”
实现了部门的信息化管理,近40%的大中型医院正在建设全
的综合型HM IS产品是市场的主流,但是随着医院各部门信
院的医院管理信息系统【11。 息管理和应用的逐步深化,应用软件的小型化、专科化的开
医院信息系统(HIS)的建设一般将经历3个阶段:医院管 发方向将日益突出,以病人为中心的”小而精”的专科管理信
理信息化阶段(HMIS)、临床管理信息化阶段(HC IS)、局域 息系统将得到更大的发展。然而,专科信息管理系统的开发
医疗卫生服务阶段(GM IS)。从2006年初卫生部统计显示,
建设不能完全独立于医院原有的HMIS,而医院原有的HMIS
已经存在着数据管理比较混乱、缺乏统一行业标准、信息安
收稿日期:2008—03—03
全无法保证等问题,因此,新系统的建设将带来更多更复杂
版权声明:本文标题:基于XML的批量数据处理与分析--以电子试卷为例 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1713573480a641419.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论