账号:
密码:
最新动态
产业快讯
CTIMES / 文章 /
XML企业应用伺服架构
 

【作者: 葉建華】2000年05月01日 星期一

浏览人次:【4571】

前言

在上期中,我们讨论了XML在企业中所扮演的角色,以及XML在各个领域中所能带来的帮助与影响。随着企业水平整合的需求增加,各个传统垂直整合的企业信息系统已面临转型的压力,而XML的适时出现,正好减低了各个企业所需要付出的转型代价,就如同止痛剂一般,将会受到企业的普遍欢迎。


在本期中,我们将延续上一期所探讨XML的功能,继续介绍XML应该以什么样的形式与角色呈现企业之中,以担负企业信息中心的数据交换与存取的重责大任。笔者在前两期中曾经针对企业应用伺服架构做了一个简单的介绍,探讨在多阶层式的企业服务模型中,各个阶层的角色与责任,请参考(图一)。而其中在企业信息系统阶层部份,就是所谓的企业信息中心。在本期中,我们将介绍一个以XML为基础的伺服架构,讨论这样的架构如何在企业中担负中间阶层与企业信息系统阶层的任务。


《图一 多阶层式应用程序模型架构》
《图一 多阶层式应用程序模型架构》

XML很好,但是它要如何整合到企业信息系统中呢?

既然XML在企业中占有着重要的地位,那么,接下来的问题就是:XML到底应该在企业应用伺服架构中使用呢?这是颇为耐人寻味的问题。在前几期中,我们介绍了新一代的企业应用伺服架构,以及在架构中各个组成份子所扮演的角色,如图一所示。如果我们将期间所流动的信息,都能够以XML的形式来取代的话,将会形成一个以XML传递为主体的企业应用伺服架构。在这样的架构下,会衍生出几个重要的议题以供探讨。首先是各个组成份子如何处理XML的问题。一旦要使用XML来当作数据交换的媒介,这就意味着各个组成份子都要具有处理XML的能力。举例来说,在一个以XML为数据交换核心的医院中,各个系统便都需要了解医院病历数据的架构格式(也就是所谓的DTD, Document Type Definition),如此才能够解释期间所传递的病历数据,如下例所示:


<?XML version = *1.0* ?>


<!DOCTYPE patient-record [


<!ELEMENT patient-list (patient)* >


<!ELEMENT patient (pa_id, pa_lname, pa_fname,


phone, address, city, state, country, postalcode, record) >


<!ELEMENT pa_id (#PCDATA)>


<!ELEMENT pa_lname (#PCDATA)>


<!ELEMENT pa_fname (#PCDATA)>


<!ELEMENT phone (#PCDATA)>


<!ELEMENT address (#PCDATA)>


<!ELEMENT city (#PCDATA)>


<!ELEMENT state (#PCDATA)>


<!ELEMENT country (#PCDATA)>


<!ELEMENT postalcode (#PCDATA)>


<!ELEMENT record (date, description)*>


<!ELEMENT date (#PCDATA)>


<!ELEMENT description (#PCDATA)>


]>


其次,是整个伺服架构的布设问题。一个企业应用伺服架构一旦是以处理XML为核心时,它便相当于一个XML服务器,这样的伺服架构我们将会在本文后半部份介绍。最后则是XML数据的存取问题,因为XML终归是要集中起来以方便管理,所以在企业信息系统端最重要的XML储存处将会是是数据库服务器。目前来说,最广为使用的数据库服务器就是关系数据库,但是关系数据库的表格关系型管理与XML的阶层式数据结构又有着显著的不同,所以如何协调二者,以顺利地利用关系数据库存取XML,便成为一项颇值得深思的研究议题。接下来,我们就针对XML服务器的架构做一介绍,希望能够提供读者一些可资运用的概念与方向。


XML服务器架构的介绍

所谓的XML服务器,就是用来处理XML的整合环境,而所谓的XML处理,则包括了各种XML的运作,如建立、解析、接收、传送等等。要如何将这些工作予以简化,进而提供一个应用程序开发的平台,就是XML服务器最主要的任务。就某些角度来看,XML服务器和Web服务器似乎有几分神似,Web服务器不但可以透过HTTP协议来传递HTML文件,同时也可以当作用户与后端系统沟通的桥梁(也就是所谓的CGI)。而XML服务器也是一样,可以透过协议将XML文件传递给用户。旦其中有两点不同:首先,XML服务器提供了处理XML文件的标准应用程序界面,其次,它提供了数种不同的沟通方式来达到传递XML文件的目的。


所以,一个XML服务器最主要的目的,将会是在不同的应用程序或机构之间担任信息交换的角色,而非用户。举例来说,一个负责购买行为的应用程序,可以将XML的信息传递给另一个应用程序,以及数据库中内容的更新。因此,一个XML服务器,是一个完整的应用程序开发架构,能够提供各种不同的用途。(图二)便是一个典型的XML服务器架构。


《图二 一个典型的XML服务器架构》
《图二 一个典型的XML服务器架构》

由图二可知,一个典型的XML服务器,应该包括以下几个主要的组成份子:


1.客户端:

这是一个可以自由收送XML文件的应用程序,其范围涵盖很广,它可以是一个如个人数字助理般的设备,也可已是一个浏览器或是一个Web服务器,甚至也可以是另一个XML服务器。


2.通讯服务:

一个XML服务器应该要能够应付处理许多不同的通讯协议,其中Email和HTTP可能是最常被使用的协议。但是有某些应用程序可能会需要同时将XML文件传递到多个客户端,甚至将文件广播(multicast或是broadcast)出去,这时候就需要使用另一种型态的消息队列系统来提供这类型的服务。


理想上来说,一个XML服务器应该要能够提供处理任何一种通讯协议的运作架构,以提供应用程序传递数据之用。而这种处理多样化通讯协议的能力,可以内建在服务器之中,也可以独立在服务器之外,而以一种嵌入式外挂模块的型态存在。如此一来,在应用程序的开发上就可以达到在不需要任何改变的情形下,使用各种不同的通讯协议。我们常见的通讯协议,计有HTTP, Email, FTP, EJB, RMI, IIOP, COM,以及MQSeries等等。


3.XML伺服程序:

这是整个伺服架构的核心部份。在上一期中,我们说明了用Java来处理XML式相当有利的做法,因此,XML伺服程序自然可以用Java来进行开发。一个以Java为基础的XML伺服程序不但具有可移植性、扩展性以及较高的生产力,同时也可以提供一个整合新的服务与对象在应用程序之间重复使用的完美平台。同时,由于有许多不同厂商都开发了许多任务具程序,使得Java在这之中扮演着平衡各家技术的角色,如IBM、Microsoft以及Sun均提供了以Java为基础的XML parser,而W3C则提出了所谓的文件对象模型(DOM, Document Object Model),其中更定义了一组核心接口来处理XML文件的存取问题。


4.文件处理模块:

XML服务器中一个重要的功能,就是文件的处理。而所谓的文件处理模块是一种特定的应用程序逻辑,这种逻辑是用来处理某种类型的文件。而每一种文件处理模块通常也会定义一组方法来处理该种特定型态的文件。举例来说,一个订购单文件的处理模块可能会有submit、 acknowledge以及cancel方法,而每一种方法中都会包含一些特定的应用程序逻辑,以便和后端的数据库对象发生互动,如数据库及其他文件系统等等。


XML服务器实作

在XML服务器实作部份,最好是将每一种文件处理模块写成一个个不同的Java类别,而每一个运作项目则会定义成类别中的方法。每一种不同类别的文件都会被指定到不同且单一的文件处理模块,而文件的类别则可以被当成XML最上层的根节点(root node)。而一旦某个文件处理模块被启动之后,该模块也有能力去呼叫其他的处理模块来共同合作。


因此,你便可以定义出一个文件处理的链结流程,依序执行不同的模块来解析并处理整个XML文件。此外,文件处理模块也可以支持所谓的请求递送架构,用以定义出不同处理模块的先后执行顺序。当XML服务器收到递送过来的请求时,它便会将其放入队列之中以等待执行。不论是以链结流程或是请求递送的形式,都绝对可以确保处理模块拥有最高的重复使用效率。


1.数据对象的存取:

当文件处理模块开始运作之后,通常模块中的应用程序逻辑会呼叫适当的后端数据对象,并依据不同的处理方式,送出相对应的输入数据。举例来说,该模块可以透过一个SQL指令来将一个新的客户数据放入后端的数据库中。而一个XML服务器则应该实作出一些上层的数据库运作特色,如链接管理、数据库登入机制、JDBC的支持、以及事务处理等等。此外,如何和许多XML的数据端衔接也相当的重要,这些数据端包括SAP、PeopleSoft、大型主机,中间阶层软件,以及新一代的对象数据端如Java、EJB、CORBA以及COM等等。


当数据或是对象由后端传回之后,下一个问题便是如何在处理模块中产生XML文件。这种文件产生的过程可以经由许多不同的途径来完成,如对应或链接服务、样板的套用处理、对象本身的自行产生、甚至是透过XSL(Extensible Style Language)来完成。


这其中最主要的概念,便是将数据字段对应到XML文件中适当的元素位置。举例来说,一个叫做book_name的数据库字段应该对应到XML文件的<book_name>元素,这样的动作是经由动态对应来完成的。如果有多笔数据记录传回时,则XML文件也必须依照适当的对应来完成元素的产生。而数据在传回的过程中,也可以做一些过滤及转换(如代码转换)的工作。


2.XML核心服务:

XML服务器是使用XML核心服务来完成最重要的运作功能。所谓的XML核心服务,包括parser、 DOM、 XSL以及XML查询语言(XQL)等等。但是就如我们之前所提到的,这些核心服务也可以以嵌入模块的形式存在,如parser模块可以换成别家第三方的parser产品等等。这些核心服务共同提供了对文件的解析、确定文件类别处理模块、后端数据对象存取、以及数据以XML格式输出等等特色。


一个典型的运作范例

接下来,我们用一个例子来说明整个应用程序的运作流程。(图三)是一个查询数据库结果并输出为XML文件的范例。首先,我们将一个XML文件当成查询工作的输入数据(步骤1),其中author_list_Handler_S是处理author_list元素的文件处理模块,如图所示。



《图三 一个典型的运作范例》
《图三 一个典型的运作范例》

这个文件处理模块会将数据库中的作者数据透过一个SQL指令来取出(步骤2),而最后的结果就会如(步骤3)所示。接下来,一个称为PopulateXmlMsgBox的内容产生模块,会被用来将数据库中取出的数据予以格式化(请参考附录一)。


这个内容产生对象会利用数据库中的域名来当作每个项目的卷标,并运用相同的方法来处理所有数据库中所传回的记录数据。最后,我们所看见的,则是如步骤4中所产生的XML文件,并伴随着一个该XML文件的DTD。


下例为文件处理模块所输出的结果,我们可以更清楚XML如何实作:


/**


* 所产生的XML文件,并伴随着该文件的DTD


*/


<!-- author DTD -->


<?XML version = "1.0" ?>


<!DOCTYPE author-list [


<!ELEMENT author-list (author)* >


<!ELEMENT author (au_id, au_lname, au_fname,


phone, address, city, state,country, postalcode) >


<!ELEMENT au_id (#PCDATA)>


<!ELEMENT au_lname (#PCDATA)>


<!ELEMENT au_fname (#PCDATA)>


<!ELEMENT phone (#PCDATA)>


<!ELEMENT address (#PCDATA)>


<!ELEMENT city (#PCDATA)>


<!ELEMENT state (#PCDATA)>


<!ELEMENT country (#PCDATA)>


<!ELEMENT postalcode (#PCDATA)>


]>


<author-list>


<author>


<au_id>172-32-1176</au_id>


<au_lname>怀特</au_lname>


<au_fname>琼森</au_fname>


<phone>408 496-7223</phone>


<address>10932 Bigge Rd.</address>


<city>缦罗</city>


<state>加州</state>


<country>美国</country>


<postalcode>94025</postalcode>


</author>


<author>


<au_id>213-46-8915</au_id>


<au_lname>格林</au_lname>


<au_fname>玛嘉烈</au_fname>


<phone>415 986-7020</phone>


<address>309 63rd St. #411</address>


<city>奥克兰</city>


<state>加州</state>


<country>美国</country>


<postalcode>94618</postalcode>


</author>


<author>


<au_id>238-95-7766</au_id>


<au_lname>卡尔森</au_lname>


<au_fname>雪莉</au_fname>


<phone>415 548-7723</phone>


<address>589 Darwin Ln.</address>


<city>柏克莱</city>


<state>加州</state>


<country>美国</country>


<postalcode>94705</postalcode>


</author>


</author-list>


上面的例子,说明了一个动态的XML服务器所能发挥的能力。它可以仅用短短的五行Java程序代码,便达到对数据库下查询指令,并利用查询的结果产生一个完整的XML文件,其中并附有动态产生的DTD。此外,XML服务器也可以运用一个标准的XML parser来帮助我们完成解析XML文件的工作。这样的XML服务器,将可以发挥Java组件重复使用的特色,不但可以减少不必要的开发浪费,同时也可以简化管理上的需求,而成为一个优良的数据内容产生器。而就如同Web服务器是Web基础架构的重要单元一般,XML服务器也将会对下一世代的Web应用提供一个重要的建构基石。


后记

到目前为止,我们所讨论到的技巧与范例,似乎都是以简单的数据型态为主,如作者数据,在我们的范例中都是以一维的数据型态存在。而XML与SQL最大的不同点,便在于XML与SQL二者所著力的角度不同,XML基本上是以呈现高度结构化的数据为目的,而SQL则是着重在处理那些可以用行与列来表示的关系型数据表。结构化、阶层化的数据非常适合用来组织信息,因为这样的表示方法可以达到非常清楚且复杂的语意架构,而关系型的数据表,则因其关系型的特性,允许对相同的数据集,动态产生许多不同的数据结构。


由于以上这两种特色都相当的重要,因此要如何由数据库中动态的产生结构化的XML文件,将成为相当值得探讨的议题。相反地,如何将一个XML文件,以最经济的方式存入数据库中,也会是非常值得研究的主题之一。在下一期中,我们将针对SQL与XML各自的相同点与相异点,和读者一起来探讨如何结合二者的优点,在企业中发挥出最大的影响力。


相关文章
强化转型核心动力 打造更强数位韧性
数位转型下的工具机发展趋势
您的开源软体安全吗?
OLED与Mini LED争逐主流PC显示技术
企业创新契机 永续经营与数位转型并行
comments powered by Disqus
相关讨论
  相关新闻
» 鼎新电脑携手和泰丰田解缺工 以数位劳动力开启储运新时代
» Fortinet SASE台湾网路连接点今年落成 全台巡??落实云地零信任资安
» IBM力推AI服务平台 助企业顾问提升50%生产力
» Ansys模拟分析解决方案 获现代汽车认证为首选供应商
» SOLIDWORKS公开演示未来AI 率先导入工业设计软体应用


刊登廣告 新聞信箱 读者信箱 著作權聲明 隱私權聲明 本站介紹

Copyright ©1999-2024 远播信息股份有限公司版权所有 Powered by O3  v3.20.1.HK83TAPD5TISTACUK2
地址:台北数位产业园区(digiBlock Taipei) 103台北市大同区承德路三段287-2号A栋204室
电话 (02)2585-5526 #0 转接至总机 /  E-Mail: webmaster@ctimes.com.tw