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/,精确匹配,

完全相同的 

 

C 

O 

为正确 

else 

h 

a 

计阶段的工作量。具体算法如下: 

public int mark0 

{ 

m 

n 

e 

璐 

h 

{ 

-I

a 

errorLogger.addError(qname);//答案错误,记录错误的题 

 

int grade=0://rgade统计要扣掉的分数 

目类型 

C 

h 

) 

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 

全无法保证等问题,因此,新系统的建设将带来更多更复杂 


本文标签: 数据 文档 医院 匹配 处理