DOMINO应用系统中异构数据交换技术的研究与实现

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:wffg0907
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:Domino系统提供了丰富的类和方法来支持其与异构数据库进行数据交换,本文通过分析基于Domino系统办公自动化系统信息共享的特点,探讨了Domino系统的三种异构数据交换方法,对三种方法不同的特点进行了分析,并就其具体实现进行了描述。
  关键词:DOMINO;异构数据;交换技术;XML
  中图分类号:TP317.1文献标识码:A 文章编号:1009-3044(2007)04-10918-03
  在一些大范围的办公应用系统中,存在着许多基于异构数据源的应用系统,不同应用系统之间需要进行数据交换。在本文所涉及的政府部门实际案例应用中,Domino应用系统提供了政府部门网上信息发布审批流转的处理平台,审批处理后的信息需要转化为以一种具有通用性、简单性、易转换性特点的方式来存储,并提供给由异构平台构筑的政府专网和外网的信息发布系统中,这样就必要研究Domino系统与异构系统的数据转换技术。事实上,XML技术已经成为异构数据转换的中介与标准[1],XML具有数据交换简单、可定制标记语言、数据可以实现结构化存储等特点,特别是其可自描述特性,它使控制信息不是采用应用软件的独有形式,而是采用简便易懂的标记形式来表现[2],在表达数据信息时,XML通过文本形式来描述,容易越过不同平台的障碍进行正常的数据交换。正因为这些优点,Domino系统与异构系统通过XML实现数据转换也就成为一种必然。本文着重分析了Domino系统中的二种XML数据转换技术,实现了Domino系统中Notes数据库文档的XML文本格式转换。同时,还分析和实现了Notes数据库文档中附件的输出转换技术。
  
  1 Domino系统中的数据交换技术分析
  Domino系统采用文档型数据库[3],数据库的基本元素就是文档本身,文档可以同时包含结构化的和非结构化的信息,所以,Notes能够存储和管理非结构化数据,在数据库中,可以任意为记录添加字段,添加列表型的字段,处理RTF域、附件这样的大对象。数据处理非常灵活,当然这样也在一定程度上影响了效率。而对于传统型关系数据库,它们以结构化的方式存储数据,数据库具有冗余度低、程序与数据独立性较高、易于扩充、易于编制应用程序等特点。因此,要实现Domino系统与其他异构数据库的数据转换,必须能够把Domino系统中的非结构化信息以结构化的方式来表达出来,对于一般的文档对象,我们完全可以把其中的数据信息和结构抽取并输出到XML文件中来实现数据交换,但是,以附件形式存储在Domino系统中的图像、声音等非结构化数据,简单的输出并不能解决问题,因此可以采取直接输出的方式,把它们以文件的形式从Notes文档中剥离出来,以实现数据的交换。
  Domino系统本身具有高度的数据集成性,它为数据信息的XML输出提供了良好的支持,特别是Notes/Domino 6,它提供了一系列新的XML相关类来实现各种XML格式的输入和输出,其主要结构如图1所示[4]:
  图1 DOMINO XML相关类
  Notes/Domino 6的XML相关类主要分成三个部分:
  (1)DXL相关类,它包括NotesDXLExporter、NotesDXLImporter 两个类,这二个类可以实现DXL(Domino XML)文件的输入和输出,DXL是DOMINO系统中的内部XML文件, DOMINO系统可以对其进行直接的识别和操作;
  (2)XML处理类,它包括NotesXSLTransformer、NotesSAXParser、NotesDOMParser等类,通过它们,我们可以实现NOTES的NSF文件对不同XML文件的格式支持;
  (3)辅助类,包括NotesNoteCollection、 NotesStream类,其主要作用是进行XML文档选择和生成XML文件。
  
  2 Domino系统中的数据交换技术输出实现
  2.1 用Domino相关输出类来实现XML输出
  基于Domino中XML输出类的类型,DOMINO可以直接输出以下几种格式的XML文件[5]:
  (1)DXL:(Domino XML)是属于DOMINO内部可以直接识别的XML文档,对NOTES系统是最好的兼容性;
  (2)XSLT(Extensible Styles Language Transformation):用于对XML文档进行格式化,实质上XSLT是一种用来转换XML文档结构的语言;
  (3)DOM (Document Object Model):它是一种文档平台,它允许程序或脚本动态的存储和上传文件的内容,结构或样式 ,它以层次结构组织的节点或信息片断的集合。这个层次结构允许人们通过加载整个文档和构造层次结构来在树中寻找特定信息;
  (4)SAX ( Simple API for XML): SAX通过一系列的事件来执行相应的操作,当SAX解析器遇到一个元素时,它可以把其当成一个事件对待,来调用相应的代码来访问储存在XML文档中的信息。
  以上几种XML格式,其实除DXL格式外,其他三种均是基于DXL而输出的。下面,我们以Notes文档的DOM输出为例来说明Domino系统的XML输出。对于DOM的输出来说,它的实现主要由NotesSession、NotesDXLExporter、NotesStream、NotesDXLExporter等相关类来实现,具体步骤如下:
  (1)通过NotesSession对象的CreateStream方法生成输出文件
  Set outputStream =session.CreateStream
  outputStream.Open (outputFile)//outputfile为生成的文件名
  (2)制定XML文件生成规则,即通过相关FORMULA语言的选择来确实要输出哪些结点。
  query=“......”
  nc.SelectionFormula =|@contains|+|(|+|unid|+|;|+query+|)|
  (3)创建DXL输出器和DOM解析器、处理器
  Dim exporter As NotesDXLExporter
  Set exporter = session.CreateDXLExporter(nc)
  Set domParser=session.CreateDOMParser(exporter, outputStream)
  (4)遍历Notes文档,生成各个树结点,并输出。
  Select Case node.NodeType
  Case DOMNODETYPE_DOCUMENT_NODE:process….
  :
  domParser.Output( )
  End Select
  通过Notes中现成的类来生成XML,比较简单、方便,但由于其是其是基于对原有的文档进行分析来生成XML文件,它的运行是在服务器上的,也就是说,它所生成的XML文件存在于服务器上。由于安全控制方面的原因,这样无疑就给用户拷贝文件造成了不便,因此,我们可以考虑用第二种方式,即利用JAVASCRIPT来读取文档中现成的域,实时生成XML文档,达到我们在本地生成XML输出文件的目的。
  2.2 JavaScript输出XML的实现
  对于以B/S方式运行的Domino系统来说,我们可以通过在Notes表单中放入相应的域,在运行表单时,把需要输出的XML文件内容写入此域中,再用JavaScript在网页中读入域内容并写入文件的方法来达到输出XML文件的目的, JAVASCRIPT是基于本地进行操作的,因此,这也就保证了XML文档可以在本地生成,其具体步骤如下:
  (1)添加一个WebQueryOpen代理,其作用是在打开Notes文档时,对文档进行遍历,取出符合输出条件的域的值,生成XML格式 文本,把他们传给一个NSF文件中的一个域
  Forall i In docCur.Items//遍历文档中的域
  Select Case i.name
  Case "FileTitle”:tem=“TITLE” //将要输出的域名转化为指定标记
  ……
  End Select
  End Forall
  xml=xml+"<"+tem+">"+i.text+"“ //将域中的值加入到字符串中
  docCur.xml=xml//将此字符串值符给表单中的一个RTF文本域
  (2)通过JavaScript来读取打开的Notes文档的域值,把其写入到JavaScript在本地生成的一个文件中。
  fso = new ActiveXObject("Scripting.FileSystemObject"); //生成文件对象
  f = fso.CreateTextFile(destination , true);//生成输出文件
  ShowedInfo = document.getElementById( "xml" ).innerText;
  f.Write ( ShowedInfo );//读入xml域中的值并把其写入文件
  2.3 附件输出的实现
  对于文档中附件的输出来说,Domino系统提供了现成的GetAttachment、Extractfile的方法来实现,我们可以通过GetAttachment取得当前文档中NotesEmbeddedObject对象
  Set attach = docCur.GetFirstItem( "AttachmentName" )
  // AttachmentName 为域名,它通过@AttachmentNames命令来取得当前文档中附件名的集合
  Set object = docCur.GetAttachment(attach.values(a))
  通过Extractfile方法来把NotesEmbeddedObject对象中的附件来释放到相关路径下:
  Call object.Extractfile(tmppath+attach.values(a))
  和DOM输出一样,这种方法是基于Domino内部的类和方法来实现的,它所面向的是对服务器进行的操作,所生成的文档也是存在于服务器上,因此为了使客户可以使用文档中的附件,有必要通过JavaScript来把生成的文档下载到本地,其代码如下:
  Agent process
  ……
  Print| <script language="JavaScript">|
  Print|fso = new ActiveXObject("Scripting.FileSystemObject");|
  Print| fso.CopyFile (source, destination)|
  Print| </script>|
  
  3 结束语
  事实上,本文所描述的Domino系统异构数据交换技术实现已经在某政府部门的电子政务系统中得到很好的应用。该应用案例的网络运行环境是:内网应用由Domino系统平台构筑,专网和外网应用由.Net平台和Sql Server数据库构筑。实践证明,如果用Domino系统的内部类来实现XML的输出,具有简单、方便,且与Domino系统兼容性好的特点,但是由于其代理是在服务器端运行的,需要占用服务器的资源,在大量处理数据,特别是许多用户执行程序时,效率并不很高。另外,基于实际运用的需要,用户也不希望把生成的XML文档存于服务器上,这些都是这种方法的局限性。对于JAVASCRIPT来说,它采用直接读取相关域的方法来生成XML文档,比较简便,而且程序是在本地运行,大大减轻服务器的负担,但是,由于这种方法涉及到了对文件进行操作,因此,它要求系统在安全性方面必须保证允许SCRIPT语言进行文件的读写,这样就给系统造成了很大的安全隐患,特别是附件的输出,它在DOMINO在服务器端生成文件后,使用JAVASCRIPT来读取、传输附件文件,这不仅涉及到本地的操作,也涉及到了对服务器端的操作,安全性的问题更加突出。
  基于以上方法的种种不足,我们后面可以进一步利用JAVA在文件流操作方面的优势来实现XML文件的本地输出,因为Domino系统对JAVA提供了良好的支持,一些XML输出类和方法可以直接在JAVA进行重用,利用这些类和方法,JAVA可以直接读出Notes文件中的相关信息,在保证系统安全性的同时达到XML输出到本地的目的。另一方面,在Domino应用网络可以和异构数据库互通的环境下,我们也可以使用Domino系统本身提供的LS:DO(LotusScript Data Object)来实现数据信息的直接交换。作为LotusScript的一个扩展库,LS:DO提供了一系列类,可以实现和支持ODBC标准数据库的连接,因此,我们可以在Domino系统中对不同的异构数据源进行参数设置,生成可配置的文档,这样,用户就可以根据自己所用数据库的类型进行动态选择,系统通过用户的选择来读取配置文档,生成相应的ODBC连接,直接进行数据转换,这也是一种较好的方法。
  参考文献:
  [1] Bray T,Paoli J,Sperberg - Moqueen C M,et al, Extensible Markup Language(XML)1.0[S] [EB/OL]. http://www.w3c.org/TR/REC-XML,2004
  [2] 方翔 李伟生.关系模式到XML模式的影射[J].计算机应用研究,2002(1):130-131
  [3] 王立峰 王珍 李从心 杜晓宁.基于Notes/Domino的数据库文档传输技术的研究[J].计算机应用与软件,2006(9):53-56
  [4] Lotus Notes and Domino Help[S].IBM Corporation,2003.
  [5] Sally Blanning DeJean,David DeJean. LotusScript: XML classes in Notes/Domino 6[S],IBM Corporation,2003.
  本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
《战火》第一章“红色警戒”融入了RTS游戏的经典元素,强调策略、发展、配合等战斗中必不可少的关键环节,同时充分发挥了网游的互动性。《战火:红色警戒》中的任务,不仅从细微之处让人切身感受到自己正通过磨练不断地成长,也让每个人感受着这个处在遥远星系中的世界是如此真实。    初级主线任务    一、新人报道  1.找到新兵训练官“卡尔”  2.然后选择新手奖励    二、新手挑战  1.找新兵训练官“
期刊
摘要:基于ADO.Net以非连接环境方式访问数据库的Asp.Net应用程序中,DataGrid是比较常用的数据处理控件。本文主要对DataGrid如何实现数据库的更新、删除和插入操作进行了论述.  关键词:ADO.Net;非连接环境;ASP.Net;DataGrid;数据处理  中图分类号:TP274文献标识码:A文章编号:1009-3044(2007)04-10898-01    1 DataG
期刊
笔者是非常喜欢汽车的,相信各位男性朋友中的大部分都非常喜欢车吧,记得笔者刚获得身份证所办的第一件事就是去报考驾校,那时候驾校是非常落后的,笔者学习用的车辆是北京吉普212,那是笔者见过所有小车中采用两脚离合系统的小车了。还记得在训练的时候的一次突发事件,笔者正以60公里的速度(相对此车来说已经是高速了)前进,突然发现刹车系统失灵,笔者果断的采用了急轰油门强行降档的措施,因为猛松离合自然让车辆发生了
期刊
摘要:本文详细介绍了在Delphi中,如何对数据库中的数据错综复杂的复合查询。  关键词: Delphi;复合查询  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)04-10899-02    1 引言  在编写有关数据库管理系统时,设计单一的数据查询很容易,但要实现多功能的复合查询就需要费一点周折。本人在编写企业安全管理系统时实现了较为复杂的查询功能;在此拿出来与大
期刊
摘要:从技能应用、护理程序、预期结果及专业知识四个方面对护士的操作进行考核,为了快速准确地给出相应的等级评定,本文在Excel的VBA中为该考核标准自定义了一个函数。  关键词:Excel;VBA;自定义函数;护士操作考核  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)04-10906-01    1 引言  在护理的管理工作过程中,经常要对护理人员的操作进行考核,
期刊
摘要:设计并实现基于WinCE的运动员训练及考核系统,并给出了考核模块的部分源代码。  关键词:WinCE;嵌入式操作系统;计时器   中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)04-10935-02    1 引言  运动员的训练计划确定了各个项目的训练内容、要求和进程,计划的制定和执行为教练人员及时掌握运动员的训练情况提供了科学依据,但由于其项目繁多,各个人员
期刊
摘要:随着WebService在分布式应用中的不断推广,其安全性能受到了越来越多的重视。传统的Web Service以文本的方式传送SOAP包,而且SOAP协议将安全定性为传输问题,这制约了其进一步的发展,为了解决这些问题,本文对Web Service安全问题进行分析,通过将PKI技术与Web Service技术的结合,形成了可信的Web Service解决方案。  关键词:Web Service
期刊
摘要:本文介绍了ASP.NET应用程序中的两种常用的身份验证的方法。给出了两种方法的实现,并对其特点进行了分析和比较。  关键词: ASP.NET;身份验证;网络安全  中图分类号:TP393文献标识码:B文章编号:1009-3044(2007)04-10891-01    1 引言  ASP.NET提供四种用户验证方式:Windows身份验证、窗口身份验证、Passport验证以及IIS身份验证
期刊
摘要:讨论了USB通信技术,分析了USB通信协议。画出了USB通信流,给出了USB通信参考模型以及USB设备枚举流程。  关键词:USB;通信技术;协议   中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)04-10959-01    1 引言  USB是一种新型、快速、双向、同步传输的并可以热插拔的通用串行数据传输总线 [1],它具有以下优点:  (1)使用简单:所用
期刊
摘要:CAPP智能文档是一种工艺卡片和工序卡片的快速生成系统。本文不仅介绍了该系统的底层架构和主要技术,而且以工艺卡片和工序卡片的建立为例详细阐述了其在VSTO中的实现和CAPP智能文档的基本操作。  关键词:CAPP智能文档;工艺卡片;工序卡片  中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)04-10930-03    1 智能文档的概述  CAPP智能文档是结
期刊