(计算机应用技术专业论文)北京医保数据采集子系统的开发与研究.pdf_第1页
(计算机应用技术专业论文)北京医保数据采集子系统的开发与研究.pdf_第2页
(计算机应用技术专业论文)北京医保数据采集子系统的开发与研究.pdf_第3页
(计算机应用技术专业论文)北京医保数据采集子系统的开发与研究.pdf_第4页
(计算机应用技术专业论文)北京医保数据采集子系统的开发与研究.pdf_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 摘要 随着计算机技术的不断发展,特别是网络技术的发展,企业以往的信息管理 方式已经不能满足需求。面对庞大的信息量我们急需一套自动的信息采集及管理 系统去替代人工的工作,于是我们就开发了第一版的数据采集系统。由于该版本 的采集系统是单机版的,所以就导致了各大企业不能相互交流数据而且不能有效 的保持数据的同步,这样我们又提出了开发一版基于网络通信的数据采集及管理 系统。 北京市医疗保险数据采集系统就是一套基于网络通信的数据采集及管理系 统。它采用了成熟的架构设计思想和远程对象访问技术,从而保证了系统稳定可 靠且具有良好的可扩展性。该系统提供了数据采集、处理和传输所需要的各种功 能,并且充分的考虑了数据传输过程中遇到的性能和安全问题。该系统的应用不 仅方便了企业间的数据交换提高了企业的生产效率同时也促进了北京市医疗保 险事业的发展。 本文主要从技术角度介绍了采用n 层架构、n e tr e l :n o t i n g 、x m l 及分布 式数据库事务等技术开发的北京市医疗保险数据采集系统。文中详细的介绍了该 系统开发过程中用到的技术概念和编码技巧以及在系统开发过程中应用到的设 计思想。文章最后描述了在本次系统研发过程中积累的一系列很好的设计方法和 编码技术,这些知识被录入到公司的知识库系统后,为后期其它系统的研发提供 了大量的实践经验。 关键词数据采集;n e tr e r n o t i n g ;数据库事务;x m l a b s t r a c t 曼量曼曼曼曼曼曼曼皇曼曼曼, l , i i 皇曼鼍曼量曼皇曼曼曼皇曼曼曼曼曼曼曼曼皇曼量曼曼曼曼曼曼曼曼曼舅曼曼曼曼曼皇曼量曼寰 a b s tr a c t 、聃mt h ec o n t i n u o u sd e v e l o p m e n to fc o m p u t e r t e c h n o l o g y , e s p e c i a l l yt h e d e v e l o p m e n to fn e t w o r kt e c h n o l o g y , t h eo l dm e t h o do fe n t e r p r i s ei n f o r m a t i o n m a n a g e m e n th a sb e e nu n a b l et om e e td e m a n d ,i nt h ef a c eo ft h et m g ea m o u n to f i n f o r m a t i o nw en e e da l la u t o m a t e di n f o r m a t i o ne o l l e c t i o na n dm a n a g e m e n ts y s t e m st o r e p l a c em a n u a lw o r k s ow ed e v e l o p e dt h ef i r s te d i t i o no fd a t ac o l l e c t i o ns y s t e m s i n c et h es y s t e mi sas t a n d - a l o n ev e r s i o nw h i c hh a sl e ds o m ee n t e r p r i s e sc a nn o t e x c h a n g ed a t aa n dm a i n t a i nd a t as y n c h r o n i z a t i o n s ow ep r o p o s ed e v e l o p i n gan e w s y s t e mw h i c hb a s eo nn e t w o r kc o m m u n i c a t i o n b e i j i n gm e d i c a r e i n s u r a n c ed a t ac o l l e c t i o n s y s t e mi s an e t w o r k - b a s e d i n f o r m a t i o n m a n a g e m e n t s y s t e m i t a d o p t s m a t u r ea r c h i t e c t u r ea n d l o n g - d i s t a n c e - o b j e c ta c c e s st e c h n o l o g y s ot h es y s t e mi ss t a b l ea n dr e l i a b l ea n di th a s ag o o ds c a l a b i l i t y n es y s t e mn o to n l yp r o v i d e st h ef u n c t i o n so fe n t e r p r i s ed a t a c o l l e c t i o n ,p r o c e s s i n ga n dt r a n s m i s s i o nb u ta l s of u l lc o n s i d e r a t i o ns e c u r i t yi s s u e so f m a n a g e ra n dd a t at r a n s m i s s i o n t h ea p p l i c a t i o nf a c i l i t a t e sd a t ae x c h a n g i n gb e t w e e n e n t e r p r i s e sa n di m p r o v e st h ep r o d u c t i o ne f f i c i e n c y , a tt h es a m et i m ei tp r o m o t i n gt h e d e v e l o p m e n to fb e i j i n gm e d i c a r ei n s u r a n c e t h i sp a p e rm a i n l yi n t r o d u c e st h er e a l i z a t i o no fb e i j i n gm e d i c a r ei n s u r a n c ed a t a c o l l e c t i o ns y s t e m 诵t h n e tr e m o t i n g , x m la n dd i s t r i b u t e dd a t a b a s et r a n s a c t i o n t e c h n o l o g y i td e s c r i b e st h et e c h n i e a lc o n c e p t sa n dc o d i n gt e c h n i q u e si nd e t a i la n d s o m ed e s i g ni d e a sd u r i n gt h es y s t e md e v e l o p m e n t ,乃es y s t e mn o to n l yg r e a t l y i m p r o v e st h ee f f i c i e n c yo ft h ee n t e r p r i s eb u ta l s op u tf o r w a r das e r i e so fg o o dd e s i g n a r c h i t e c t u r e , c o d i n gt e c h n i q u e sa n dp r o v i d e sag r e a td e a lo fp r a c t i c a le x p e r i e n c ea n d r e s e a r c hr e s u l t s k e y w o r d s d a t ac o l l e c t i o n ;n e tr e m o t i n g ;d a t a b a s et r a n s a c t i o n ;x m l i i i 独创性声明 本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研 究成果。尽我所知,除了文中特5 1 1 1 ) j n 以标注和致谢的地方外,论文中不包含其他 人已经发表或撰写过的研究成果,也不包含为获得北京工业大学或其它教育机构 的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均 已在论文中作了明确的说明并表示了谢意。 签名:塑丑查。垒日期:2 豳:笙 关于论文使用授权的说明 本人完全了解北京工业大学有关保留、使用学位论文的规定,即:学校有权 保留送交论文的复印件,允许论文被查阅和借阅;学校可以公布论文的全部或部 分内容,可以采用影印、缩印或其他复制手段保存论文。 ( 保密的论文在解密后应遵守此规定) 虢婢导师躲鸳圣通吼丑牡7 第1 章绪论 ! i , , i ii l l - , j , , ll i i! 量曼曼曼量 第1 章绪论 1 1课题背景 基本医疗保险制度是社会保险制度的重要组成部分,是国家的基本经济制度 之一。该制度可以保障职工基本医疗待遇,直接关系到广大参保人员的切身利益, 关系到我国社会的稳定以及社会主义事业的健康发展,同时它也是建设有中国特 色社会主义市场经济的客观要求和重要保障。随着医疗制度改革的深入,医疗保 险信息系统的开发应用成为了该行业信息化建设的一个发展趋势。1 9 9 9 年,国 务院把建立城镇职工基本医疗保险制度作为本届政府的五项重点工作之一。目前 全国大部分地区都在积极地进行医疗保险改革的实施工作。 医疗保险是由政府制定、用人单位和职工共同参加的一种社会保险,它是按 照用人单位和职工的承受能力来确定大家的基本医疗保障水平,它具有广泛性、 互济性、强制性等基本特征。在基本医疗保险中,保险费用由用人单位和职工按 一定比例共同缴纳,保费由个人账户、统筹基金等组成,主要用于支付患者一般 的门诊、急诊、住院费用,医疗保险中的一项主要工作就是由代表政府行使管理 职能的医疗保险中心来对患者在各医保定点医院、药店发生的费用进行审核,以 此判定医保个人账户、统筹基金、患者本人各自负担的比例。 北京市基本医疗保险制度的目标是建立以基本医疗保险为基础、以公务员补 助、大额医疗互助和企业补充医疗保险为补充的医疗保险体系。医保信息系统就 是为医疗保险体系提供便捷的业务处理和管理监督手段,同时为其他社会保险的 信息化奠定基础。通过医保中心与定点医疗机构、定点零售药店等相关医疗卫生 服务单位建立网络连接,最终实现住院、门特、门诊费用的计算机系统事前审核, 事后监督,改善医疗保险监控手段,为合理控制医疗费用增长,减少医疗资源浪 费提供支持,进而保障医疗保险基金高效运行。 北京市现有定点医疗机构近千家,医院等级按高、中、低分为三级、二级、 一级,并且在每一级中又分为甲等、乙等、合格等级别。目前北京有三级医院 6 0 多家,二级医院1 2 0 多家,定点药店6 0 多家,其余为一级以下医院。北京市 的定点医疗机构将来要发展到5 0 0 0 家;区县经办机构网点为3 2 家。医疗保险中 心目前已经有6 0 0 多万人的参保信息进入计算机系统。本系统的近期目标是北京 市6 0 0 万参保人员的信息全部进入计算机系统,远期目标是北京市1 3 0 0 万市民 和外地在京暂住人口的医疗保险信息管理。 目前北京市医保系统已经实现了住院门特费用在医院的实时审核结算,医 保基金需要支付的费用由医院垫付,医保中心再和医院进行费用结算,结算周期 基本上是每两周一次。而门诊费用目前采用参保人垫付全部费用,事后到经办机 北京下业大学工学硕士学位论文 构手工报销的方式。今年,北京市医保系统已经开始了门诊费用信息采集上传的 试点,为逐步过渡到门诊病人持卡就诊、门诊费用当时结清做准备工作。 医疗保险信息系统的建设是落实医疗保险改革的重要措施之一,北京市政府 对医疗保险信息系统的建设高度重视并将其列为北京市信息系统建设的重点工 程。医疗保险信息系统的建设是北京市社会保障信息系统建设的突破口,因此它 的建设要充分满足医疗保险信息系统业务的需求并为未来的“多险合一、社区 医疗、病种付费等预留接口或扩充余地。我们要把该系统建立成为一个完备、高 效、与社会保障事业发展相适应的信息系统,使该系统真正起到推动北京市社会 保障体系发展的作用。从2 0 0 0 年开始北京市政府进行了北京市医疗保险信息系 统的一期工程建设,到目前为止,该系统已成功运行多年。同时,随着医疗保险 政策的不断变化,该系统也正在不断完善。 虽然北京市医疗保险信息系统已经取得了相当的成功,但是北京市医疗保险 自启动以来不断的有新的参保人群被纳入医疗保险管理范围,这就也就需要该系 统不断的被升级或更新。由于时间紧迫,为了使新的医疗保险政策、结算方式按 时实施,信息系统只实现了用户的基本需求。随着用户为信息系统建设提出更多 的需求和信息系统建设的深入,我们迫切地需要对现行信息系统进行功能性及操 作性地优化和升级。 由于首都信息发展股份有限公司将原数据采集系统企业版由一个满足所有 参保单位的大全版采集软件拆分为四个版本:普通单位版、人才职介版、街道版 和大客户版,以分别适用于不同的参保用户,所以由公司领导决定开发北京市医 疗保险数据采集核心子系统,从而满足不同版本用户的基本需求,并在核心版本 的基础上根据不同用户的特殊需求去扩展数据采集核心子系统从而满足不同的 要求。 1 2 研究内容及研究意义 1 2 1 研究内容 本论文研究的重点是采用n e tr e m o t i n g , x m l 及数据库技术实现医疗保险 数据采集核心子系统。为此总结出本课题的主要研究内容如下: 1 详细介绍n e tr c m o t i n g 的概念、基本特征以及采用r e m o t i n g 技术开发 并部署医疗保险数据采集子系统。 2 研究并开发以x m l 作为中间数据结构并进行数据交换的组件。 3 研究并开发屏蔽异构数据库间差异的数据库中间组件。 4 研究并应用同步通知数据处理状态的组件。 5 研究并应用有效保持系统数据同步的方法。 第1 章绪论 1 2 2 研究意义 现代操作系统和运行时环境需要保护每一个应用程序使之不受其它应用程 序失败的影响,操作系统通过在应用程序自己的进程中运行各个程序来防止其它 应用程序的影响。如果一个应用程序由于某种原因失败只影响该进程,则其它进 程中的应用程序可以继续执行。由于一个进程中的内存地址在另一进程中没有意 义,因此从某个其它进程调用这个进程中的函数可能会比较复杂。在托管环境中, 应用程序域和上下文可以用比操作系统进程更低的成本提供隔离和安全性,并具 有更强的伸缩能力。n e tr e m o t i n g 技术的研究和应用有助于提供一种可以在应 用程序域之间简单明了地进行通信的基础结构,并且使用安全技术为通信提供保 护。【2 】n e tr e m o t i n g 是在d c o m 等基础上发展起来的一种技术,它的主要特 点是实现跨平台、跨语言并能够穿透企业防火墙。它支持h 1 曙以及t c p 信道, 它不仅能传输x m l 格式的s o a p 包,也可以传输传统意义上的二进制流,这使 得该技术变得效率更高也更加灵活。采用该项技术去研究实现数据采集系统不仅 可以有效的实现系统中所需的功能和轻松的完成系统架构的部署,同时也可以为 开发同类的其它系统积累相关的技术经验。 由于系统要经常和外界不同结构的数据完成交换的功能,如果采用硬编码的 方式去完成系统与特定结构的数据进行交换的功能,那么就为系统后期的扩展与 维护带来了困难,因此我们采用了一种可扩展的标记语言作为不同结构数据交换 的中间层。在系统进行数据库数据交换时通过引用该层就可以提高系统的灵活 性,并为后期系统的升级带来方便。 , 屏蔽异构数据库间差异的组件的开发能够帮助我们实现系统在不同的数据 库间无缝的迁移。由于核心数据采集系统的开发要面对不同的客户群体,而他们 所采用的系统数据库是不同的,因此这套组件的开发能够帮助我们顺利的满足不 同用户的需求。同时为了高效而安全的在网络上传输数据我们也开发了数据序列 化和压缩的组件。 数据同步方法的研究可以帮助我们有效的保持各企业的数据的正确性。由于 数据采集系统处理的数据量很大并且处理后的数据往往要通过网络传输到客户 端,这样就很可能因为各种原因导致数据被破坏。因此我们要去研究一套有效并 且高效的保持数据同步的方法。在老版本的系统中对数据库的同步我们大都采 用n e t1 x 的本地事务管理办法,该方法虽然可以管理本地事务,但是面对分 布式的数据处理就无能为力了。如果我们遇到了分布式事务需求就不得不应用晦 涩难懂的企业级数据管理办法。在该版本的数据采集系统开发中,我们基于n e t f r a m e w o r k2 0 研究并开发出一套对本地事务和分布式事务都行之有效的事务管 理组件,它可以大大的帮助我们简化维持数据同步的方法。 以上从技术角度论述了系统研发的现实意义,下面从实用性角度将系统研发 北京工业大学工学硕士学伉论文 工作的意义总结如下: ( 1 ) 降低数据采集工作量以往数据采集大都采用手工方式,这样就需要大 量的人工去各地区单位进行数据的收集。开发了该系统后可以减轻人工劳动,大 量的数据采集及处理工作可以交给系统去自动完成。 ( 2 ) 有效保持数据同步在手工采集数据阶段由于数据间的比对比较困难, 在发生了人员或单位信息变更后很难对原始数据进行数据的同步,这样就给信息 管理带来的困难,有了该系统后此项工作可由系统自动完成并且保证各地区单位 的数据达到实时同步,这样就有效的保证了信息的正确性。 ( 3 ) 最小的投资风险成熟的架构及组件降低了创建新的业务服务所带来的 投资风险,同时也减少了维护和管理旧系统所带来的投资和风险。 ( 4 ) 更快的产品上市速度成熟的系统架构及技术将成为该企业的核心资 产。使用这些成熟的架构及技术构建和部署服务将显著地加快产品的上市速度, 因为对现有服务和组件的创造性重用缩短了设计、开发、测试和部署产品的时间。 ( 5 ) 促进医疗保险事业的发展该产品是北京市医疗保险信息系统的一个子 系统,它的成功开发不仅解决了北京市医疗保险信息系统发展过程中面临的新的 需求,促进了医疗保险信息系统的完善,同时也为其它城市建立相应的医疗保险 信息系统留下了宝贵的经验和技术。 1 3 不足与改进 现代软件技术是不断发展的,虽然数据采集系统在设计初期已经采用了比较 成熟和先进的技术,但是随着s o a ( s e r v i c e - o r i e n t e da r c h i t e c t u r e ,面向服务架构) 技术的成熟和广泛应用,公司后期系统的研发以及北京市医疗保险信息系统的后 期版本都采用了该技术。该技术的应用可以帮助公司对业务需求变更做出更快的 响应以及让应用程序的开发部署更容易让服务的管理更方便。由于数据采集系统 建设初期公司正处于对s o a 技术的学习和实验阶段,所以为了保障系统的开发 进度和稳定性我们在开发过程中没有采用该技术。如果数据采集系统进行新版本 的研发可以考虑采用基于s o a 的技术。 1 4 本章结构 北京市医疗保险数据采集系统是医疗保险信息系统的重要组成部分,它的成 功研发不仅有着直接的经济效益,同时也具有深远的社会效益。本章详细的论述 了该系统的研究背景、研究内容和研究意义。由于科学技术的发展,系统研发过 程中采用的技术可能已经被更先进的技术所取代,所以文章最后还探讨了采用目 前更先进的技术实现该系统的可能性,并提出了相关的改进意见。 第2 章关键技术研究及应用 第2 章关键技术研究及应用 2 1n e tr e m o tin g 技术 2 1 1 n e tr e m o tin g 结构及原理 本地方法调用是通过堆栈实现的。将方法参数压入线程堆栈中,线程执行方 法时将堆栈中的参数取出作为本地变量,并将方法的返回结果压入堆栈中。【3 】 这样就完成了一次方法的调用。如图2 - 1 所示: 调用前的栈空间调用后的棱空间 函数调用 以 参数返回值 v 撇 图2 - l 本地函数调用 f i g u r e2 - 1l o c a lf u n c t i o nc a l l 应用程序域之间是无法共享同一个线程堆栈的,因此采用基于消息的方法调 用机制。在客户端通过代理对象将原先基于堆栈的方法调用信息( 定位远程对象 的信息、方法名、方法参数等) 封装到一个消息对象中,再根据需要将这些消息 对象转化成某个格式的数据流发送到远程对象所在的应用程序域中。当经过格式 化的消息到达服务器后,首先从消息中还原出对象,之后在远程对象所在的应用 程序域中构建出相应方法调用堆栈,此时就可以按照传统的基于堆栈的方法调用 机制完成方法的调用,而方法返回结果的过程则按照之前的方法反向重复一遍。 如图2 - 2 所示: 客户作用坨量务器靖作用域 c i i 酬 一竺! 竺h & l l e j r ii i i 呐 刖竺! ! l s t a c ks i n k t 、j 图2 - 2 远程函数调用 f i g u r e2 - 2r e m o t ef u n c t i o nc a l l n e tr e m o t i n g 就采用上述方式的原理进行数据的通信。n e tr e m o t i n g 应 用程序域由传输通道、序列化格式器,服务端对象组成,客户端应用程序域由客 户端对象、代理、传输信道、序列化格式器组成。客户端代理负责在客户端处理 基于堆栈的参数传递模式和基于消息的参数传递模式之间的转换。格式化器负责 北京工业大学工学硕士学位论文 将消息对象转换成可在网络上传输的数据流,并将其发送到服务器。透明代理是 远程对象的精确副本,真实代理接受透明代理创建的消息并将其通过信道传递到 远程对象。【4 】n e tr e m o t i n g 体系结构如图2 3 所示 图2 - 3 n e tr e m o t i n g 体系结构 f i g u r e2 - 3 n e tr e m o t i n ga r c h i t e c t u r e n e tr e m o t i n g 可以提供全面的受控代码类型系统的网络保真性,提供在网 络上通过引用来传递对象的功能,并且可返回到特定进程中的特定对象并提供二 进制通讯能力。创建分布式应用程序时,如果需要高度控制性并要求能够选择系 统偶合程度就可以使用n e tr e m o t i n g 。其提供了与公共语言运行时的深入集成, 并且为开发人员提供了全面的跨连接类型系统保真性。这包括构造函数、委托、 重载方法、通过值和引用传递对象、类的层次结构、接口、方法、属性、字段, 以及通过可插入通道、分布式标识、激活等在连接上的应用程序之间进行 m a r s h a l b y v a l u e ( 锘j 作副本) 。使用r e m o t i n g 可以从任何进程提供r e m o t i n g 终结 点。n e tr e m o t i n g 可以从元数据生成受控类和对象的服务说明,我们可以使用 密集侦听模型将自己的操作作为应用程序入站和出站消息流插入。同时还可以采 用套接字的二进制编码t c p 通道。【5 6 1 n e tr e m o t i n g 使受控组件、本机c o m 组 件以及接受服务的组件( 使用c o m + 服务的受控组件) 远程化。 n e tr e m o f i n g 提供了一种很有用的方法,用于管理跨应用程序域的同步和 异步r p c 会话。n e tr e m o t i n g 在为系统提供r p c 时要容易得多,而且由于使 用简单易懂的n e t 数据类型,消除了早期r p c 机制中存在的类型不匹配的情 况。“服务器激活的对象 是由服务器控制生存期的对象。“客户端激活的对象” 是当客户端调用n e w 或a c t i v a t o r c r e a t e l n s t a n c e 方法时在服务器上创建的。在处 理远程方法调用的过程中,n e tr e m o t i n g 将格式化的消息沿r e m o t i n g 通道从 客户端发送到服务器。r e m o t i n g 为管理远程对象的生存期提供了功能强大的机 制。【7 】 2 1 2 n e tr e m o l :i n g 传输通道 n e tr e m o t i n g 的通道主要有两种:t c p 和n t t p 。在n e t 框架中定义了 i l - m m m d 接口。i c h m m e l 接口包括了t c p c h a n n e l 通道类型和h t t p 通道类型。它 第2 章关键技术研,z 及艇用 们分别对应r e m o t i n g 通道两种类型。t c p 通道提供了基于s o c k e t 的传输工具, 使用t c p 协议来跨越r e m o t i n g 边界传输序列化的消息流。t c p c h a n n e l 类型默认 使用二进制格式序列化消息对象,因此它具有更高的传输性能。h t t p c h a n n e l 类 型提供了一种使用h 郇协议,使其能在i n t e m e t 上穿越防火墙传输序列化消息流。 默认情况下,h t t p c h a n n e l 类型使用s o a p 格式序列化消息对象,因此它具有更好 的互操作性。通常在局域网内,我们更多地使用t c p c h a n n e l ;如果要穿越防火墙, 则使用h t t p c h a n n e l 。【8 州由于在北京市医疗保险数据采集系统将要部署在局域性 的网络中,并且系统对数据传输性能的要求比较高,因此我们在系统的开发中选 用t c p c h a n n e l 来传输数据。 2 1 3w i n d o w s 服务及远程对象 在实际的应用中我们通常会选择用w i n d o w s 服务来承载远程对象。选择 w i n d o w s 服务的原因是它能自启动服务。服务器重启后不需要再去考虑启动服 务。使用n e tr e m o t i n g 功能生成的远程对象必须承载在w i n d o w s 服务中,以使 客户端应用程序可以访问这些对象。客户端使用t c p 信道与在w i n d o w s 服务中 承载的远程对象进行通讯。 2 2x m l 概述 可扩展标记语言x m l ( e x t e n s i b l em a r k u pl a n g u a g e ) 是元标记语言,它提供描 述结构化数据的格式x m l 支持生成新一代的基于w e b 的数据查看和操作应 用程序x m l 是用于w e b 上的数据的通用语言。x m l 使开发人员能够将各 种应用程序的结构化数据传递到桌面,以用于进行本地计算和演示。随着x m l 应用的不断增长,x m l 的实现方式也在不断的增加。x m l 可以用于各种用途从 标记简单文件和存储临时数据到两个应用程序或进程间传递信息。x m l 已经毫 无疑问的成为了通用的数据共享标准。【9 1 0 】 2 2 1x m l 命名空间 x m l 的命名空间是w 3 c ( t h ew o r l dw i d ew e bc o n s o r t i u m ) 推出的一个标 准,是用来统一命名x m l 文档中的元素和属性的机制。使用命名空间,可以明 确标识出x m l 文档中元素、属性以及其它标记,可以避免名称之间冲突所带来 的问题,它们都具有自己的领域,同时也方便程序员查询和提取数据。在x m l 文档中一般都用u r l 来表示命名空间,但是一般的u r l 都比较长,放在元素和 属性名称前难于书写,因此,会使用一个简短的字符来代替,并称之为命名空间 的前缀。 一个x m l 文档的结构包括4 个部分,分别如下: ( 1 ) x m l 的声明一般x m l 文档的第一行都是x m l 的声明,用来指出 x m l 文档的版本号,有时也会指明文档编码。 北京工业大学t 学硕十学位论文 ( 2 ) 根元素每个x m l 文件都包含有唯一的一个根元素,其包含了其它的 子元素。 ( 3 ) 元素每一个x m l 文档中,其根元素中都包含了多个子元素,通常称 之为x m l 文档中的元素。x m l 的元素有三个部分组成,包括起始标签、内容 和结束标签。起始标签和结束标签必须完全相同,同时要保证元素与元素间不能 交迭。 ( 4 ) 属性属性是依附与元素而存在的,任何一个元素都可以具有或不具有 属性。元素若包含多个属性,则属性间用空格分隔,同时属性值需要使用单引号 或双引号括起来。 1 1 1 2 2 2 文档对象模型及规范 d o m ( d o c u m e n to b j e c tm o d e l ,文档对象模型) 是一种独立于语言和平台的定 义,它定义了构成d o m 的不同对象,却没有提供特定的实现。实际上,它能够 用任何编程语言实现。例如为了通过d o m 访问传统的数据存储,可以将d o m 实现为传统数据访问功能之外的一层包装。利用d o m 中的对象,开发人员可以 对文档进行读取、搜索、修改、添加和删除等操作。d o m 为文档导航以及操作 h t m l 和x m l 文档的内容和结构提供了标准函数。 x m l 将数据组织为一棵树,所以d o m 就是对这棵树的一个对象描述。我们 可以说通过解析x m l 文档,为x m l 文档在逻辑上建立一个树模型,树的结点 是一个个对象。我们通过存取对象就能存取x m l 文档的内容。 d o m 对x m l 数据提供了全面的程序化访问。当使用d o m 时,将x m l 数据作为一个节点树来处理,这个树从根元素开始并根据数据结构的需要遍历不 同的深度级别。我们有两种方式遍历x m l 文档的层次结构。一种方式是按照数 据包含的嵌套级别从父节点依次移动到子节点,另一种方式是使用其它方法直接 定位于一个或者多个匹配的选择节点。 文档中的每个节点都是一个由d o m 定义的指定类型。节点可以表示文档本 身或者一个元素、一个属性、文本内容或者任何在x m l 文件中有效的项。 x m l n o d e 基类为所有节点类型定义了一套基本的属性和方法。每个节点的指定 类型都是一个从x m l n o d e 基类派生的类。0 2 1 2 2 3 数据库与x m l 文档间的映射 为了在数据库与x m l 文档之间传递数据,必须在x m l 文档结构和数据库 结构之间建立映射,在实际转换中映射的方式一般有以下两种:基于模版驱动的 映射和基于模型驱动的映射。不过考虑到系统可扩展性以及实现方式的灵活性、 简单性,我们采用基于模型驱动的映射方式。x m l 结构所有的标识都严格遵守 x m l 规范,形成w e l l f o r m e dx m l 格式,因此不需要依据d t d ( d o c u m e n tt y p e 第2 章关键技术研究及应用 d e f i n i t i o n , 文档类型定义) 文件来定义。同时,考虑随机访问的需要,采用d o m 实现数据库到x m l 文档的映射。【l 列 2 2 3 1 数据库结构导出到x m l 文档应用程序将数据库中指定表或者视图的 数据导出时首先要通过应用层的后台服务与数据库建立连接,然后进行数据库查 询,从数据库中提取相应数据后,后台服务负责把数据组织成结点形式以x m l 格式存储在文件中实现时,需要根据传输缓冲区的大小考虑数据包的大小,即 一个数据包所含的记录条数,从数据库生成x m l 文件的结构流程图如图2 4 所 不: l 创建舭文档 上 i 从数据库读取数 i据 0 将数据存储到 d a t a s e t 中 上 通过i ) a t a s e t 将数 据写入x m l 文档中 图2 4 导出数据到x m l 文档流程 f i g u r e2 - 4e x p o r td a t at ox m l d o c u m e n th o w 2 2 3 2x m l 文档结构导入到数据库结构 异构系统之间进行数据交换时,目 标系统在收到数据后,要将数据转换成本地数据库格式并写入本地数据库。 d a t a s e t 对象以层次结构对象模型保存数据,因此在结构上类似于关系型数据 库,除了保存数据信息它还可以保存d a t a s e t 定义信息如约束和关系。在导入时, 首先读取控制信息如表名和操作类型,按照t y p e 的值来进行i n s e r t ,d e l e t e 或是 u p d a t e 。当数据导入数据库发生主键冲突时,对产生冲突的记录要做一些特殊的 处理,根据实际需要或者删除目标数据中的数据记录或者删除待导入数据中的冲 突记录。将x m l 文件存到数据库的结构流程如图2 5 所示: l 创建新的d a t a s e t 0 l 通过d a t a s e t 读取 x g l 文档并保存 0 对d a t a s e t 中的数 据进行验证 山 d a t a s e t 中的数据 更新到数据库 图2 - 5x m l 文档导入到数据库流程 f i g u r e2 - 5x m l d o c u m e n ti m p o r ti n t od a t a b a s eh o w 北京t 业大学工学硕士学位论文 2 2 4x m l 与d a t a s e t 2 2 4 1载入x m l 至d a t a s e t 可以通过多种方法将煳l 增加至d a m s e t ,最 常用的方法是d a t a s e t 的r e a d x m l o 方法。如果调用r e a d x m l ( ) 函数来装载一 个非常大的文件,可能会因此而影响性能。为了保证r e a d x m l ( ) 的最佳性能, 对于大文件,应该对d a m s e t 中的每个表都调用d 溅l e b e g i n l o a d d a t a 0 方法, 然后再调用r e a d x m l ( ) 。最后对d a t a s e t 中的每个表都调用 d a t a t a b l e e n d l o a d d a t a 0 方法。如下示例所示: f o r e a c h ( d a t a t a b l et i nd s t a b l e s ) t b e g i n l o a d d a t a 0 ; d s g e a d x m l ( f i l e n a m e x m l ) f o r e a c h ( d a t a t a b l eti nd s t a b l e s ) t e n d l o a d d a t a 0 ; ) b e g i n l o a d d a t a 0 方法在载入数据的时候关闭了通知、索引维护和约束。 e n d l o a d d a t a ( ) 在载入数据之后启用了通知、索引和约束。在从x m l 文档中 载入d a t a s e t 模式信息时,可以使用r e a d x m l s c h c m a ( ) 方法。这个方法使用 x s d 模式来载入d a t a s e t 模式。r e a d x m i s c h e m a ( ) 接受流、x m l r e a d e r 或者文 件名作为参数。在x m l 文档中缺少内嵌模式的情况下,r e a d x m i s c h e m a ( ) 方 法将x m l 文档中的元素解释为模式,并可存储为特定格式的文件。用 r e a d x m l s c h e m a ( ) 方法载入已经包含有模式的d a t a s e t 时现有的模式将被扩展, 并且将会在表中添加新的列。 2 2 4 2 转化d a t a s e t 为x m l 我们可以使用d a t a s v t 对象的w r i t e x m l ( ) 方 法将d a m s e t 的x m l 表示串行化为文件、流、x m l w d t e r 对象或者字符串。当 d a t a s e t 串行化为x m l 的时候,d a t a s e t 中的内容将被显示为元素或者属性。可 以通过再d a t a c o l u n m 对象级别设置相应属性控制这种显示行为。【1 4 】d a t a c o l u 咖 对象有个名为c o l u m n m a p p i n g 的属性来决定如何在x m l 中显示列。如下示例所 示: f o r ( i n ti = 0 ;i 当d a t a s c t 被串行化为x m l 格式的时候,以上代码将使得类型表的列都以 属性的形式显示。应用w r i t e x m l s c h e m a ( ) 方法写出d a t a s e t 的模式,这个方法 接受一个参数该参数用来指定生成x s d 模式的位置,这个位置可以是一个文件、 第2 章关键技术研究及应用 暑皇皇i n h i i 皇曼曼曼量曼曼曼皇曼曼皇曼曼曼皇曼鼍量曼! 曼曼曼曼曼曼曼量曼舅量曼曼曼曼曼曼曼曼曼曼曼曼皇曼皇曼皇曼鼍舅舅量曼曼曼曼! 量量 x m l w r i t e r 或者s t r e a m 。 2 2 5x m l 与文件操作 2 2 5 1从文件中读取x m l 通常情况下,如果需要将x j v l 作为原始数据进 行访问,则可以使用x m l t e x t r e a d e r ,这样可避免d o m 开销。省去对d o m 的 访问可使读取x m l 的速度加快。处理x m l 数据每个记录都有一个可从 n o d e t y p e 属性确定的节点类型。返回的x m l n o d e t y p e 取决于正在使用的 x m l r e a d e r 类。例如x m l t e x t r e a d e r 类从不返回类型为d o c u m e n t 、 d o c u m e n t f r a g m e n t 、e n t i t y 、e n d e n t i t y 和n o t a t i 0 1 1 的节点。 2 2 5 2 将x m l 写入文件如果需要编写x m l 作为原始数据则可以使用 x m l t e x t w r i t e r ,这样可不必使用d o m 。x m l t e x t w r i t e r 是x m l w f i t e r 类的实现, 该类提供将x m l 写入文件、流或t e x t w r i t e r 的a p i 。该类有许多验证和检查 规则,以确保所编写的x m l 的格式正确。当与某些规则发生冲突时它将会引 发异常,并且这些异常应该被捕获x m l t e x t w r i t e r 有不同的构造函数,每个函 数指定写入x m l 数据的不同类型的位置。 1 5 , 1 6 2 2 6x m l 序列化 序列化是将数据的集合转化为信息流的过程。反串行化则是相反的过程即将 信息流转换回原先生成该流的数据。通过l 串行化可以少写许多开发基于 v l _ l 数据的转化应用程序代码。串行化是运行时进程,将对象或对象的图转化 为线性序列字节,然后可以将合成的内存块用于存储或通过特定协议在网络间传 输。 l 序列化将对象的公共字段和属性或者方法的参数和返回值转换为符 合特定l 架构定义语言文档的x m l 流。) 2 d l 序列化生成强类型的类,并 为存储或传输目的将其公共属性和字段转换为序列格式由于捌l 是一种开 放式标准,因此无论使用什么平台,任何应用程序都可根据需要处理) g v t l 流。 用n e t 创建的x m lw e b 服务使用x m l s c r i a l i z c r 类创建x m l 流,用来在整 个i n t e m e t 中或i n t r a n e t 上的x m l 服务应用程序之间传递数据。相反地,反 序列化获取这样的x m l 流并重新构造对象。x m l 序列化还可用于将对象序列 化为符合s o a p 规范的x m l 流。 d s o a p 是一种基于x m l 的协议,它是专 门为使用x m l 来传输过程调用而设计的。 n e t 中的序列化方法有三种:x m l 序列化、s o a p 序列化和二进制序列化。 若是序列化到文件的话,前两者生成的是x m l 文件,二进制序列化生成二进 制文件。x m l 序列化的优点是使用简单,也颇具灵活性,比如可以控制数据在 x m l 文件中是作为e l e m e n t 还是作为a t t r i b u t e ,以及显示的名称等。x m l 序 列化对一般的应用是足以应付的,但当序列化循环引用的对象,即有多个引用指 北京工业大学工学硕士学位论文 _ !,lil量曼皇鼍 向同一个对象实体时,x m l 序列化机制将在每个引用的地方创建一个对象副 本。这除了会导致数据存储上的冗余外,更严重的是使一个对象在反序列化后变 成了毫无关系的多个对象。s o a p 和二进制序列化的优点是可以精确地控制序列 化及反序列化的过程,并可以序列化对象的非公共成员。所以对复杂对象的序列 化,应该在实现i s e r i a l i z a b l e 接口后,用s o a p 或二进制的方式保存数据。 采用x m l s e r i a l i z e r 类的d e s e r i a l i z e ( ) 方法实现反序列化。反序列化的方法 返回的是一个o b j e c t 类型的值,所以我们需要在反序列化后将o b i e c t 对象转化 为我们实际需要的对象类型。 2 3 数据同步 2 3 1 事务概述 事务就是将多个任务绑定在一起使它们要不同时成功要不同时失败。例如,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论