摘要:可扩展标志语言(简称xml)在实现信息标准化、信息的交流与共享上有其独特的技术优势,因此它受到了广泛的重视。全文首先提出了基于xml的三层client/server模型;然后对其从数据获取、传输至显示以及外部处理的应用进行分析;接着以图书资料管理系统为例,说明了其具体的实现;最后对基于xml的三层c/s模型在信息标准化、数据处理等方面的应用优势进行了总结。
关键词xml,client/server模型 三层结构模型
1.问题的提出
可扩展的标记语言 (extensible markup language,缩写为xml)是sgml (standard generalized markup language,标准通用标记语言)的一个子集,是简化的sgml。它是互联网联合组织(w3c)创建一组规范,以便于软件开发人员和内容创作者在网页上组织信息,其目的不仅在于满足不断增长的网络应用需求,而且也在于确保在通过网络进行交互合作时,具有良好的可靠性与互操作性。
随着web技术、分布式对象技术两者的有机结合,传统的client/server主从结构逐渐向灵活的多级分布式web计算模型进行着演变。多级分布式web体系结构可划分为三层:表示层(客户机层)、功能层(应用服务器层)、数据层(数据库服务器层)。
而由于xml可以自定义文件类型,有利于信息的表达和结构化组织,而且可以以一致的方式格式化和传送数据,若将其运用到三层client/server模型中,必将产生很大的网络应用优势。于是也就引出了本文讨论的问题--基于xml的三层c/s模型。
2.基于xml的三层c/s模型
从网络体系结构各层次上看,基于xml的三层c/s模型具体实现的功能概括如下:
数据层--实现数据的集成,xml数据产生于多种数据源,但都以统一的xml格式表达传输。
功能层--实现数据的发送与处理,应用服务器通过http交换数据,通过dom处理xml数据。
表示层--实现数据的显示,xml数据的可以有多种表现形式,而且可以为外部直接访问、编辑或转换,也可被其他系统所用。
基于xml的三层client/server模型的应用结构如图一所示:
在基于xml的三层c/s模型中把xml作为一种结构化信息交换的表示方法,负责所有与数据源的通信,根据最终用户的要求,聚集和组织从多个远程数据库服务器上获取数据,并用xml形式交互式的把数据源返回的消息传递给客户机。
以下是对基于xml的三层c/s模型应用过程的分析:
2.1从数据层获取数据生成xml文档
由于xml能够使不同来源的结构化的数据很容易的结合在一起,所以通过xml,可以在中间层服务器上对从后端数据库和其它应用处来的数据进行集成。然后,数据就能被发送到客户或其他服务器做进一步的集合、处理和分发。
虽然每个数据库描述数据都是不同的,但xml可以自己定义文件标签,例如:通过xml,图书管理资料就可以很容易以标准的方式按照书名、作者、图书简介或其他的标准进行分类。
2.2 xml数据的发送与刷新
利用xml开放的、基于文本的格式,可以将它通过http像html一样传送。同时,中间层应用服务器将支持xml更新功能,将数据服务器上数据的变化及时地传递给客户,反之亦然。因此,中间层能够从客户端得到更新的数据,并把数据传送到数据储存服务器上。
2.3 xml数据在表示层的显示
xml描述的数据发到表示层后,能够用多种方式显示。xml定义的数据,其显示与内容是分开的,因此允许对同一数据指定不同的显示方式,使数据更合理地表现出来。css和xsl为数据的显示提供了公布的机制,本地的数据能够以客户配置、使用者选择或其他标准决定的方式动态地表现出来。如图二所示:
html描述数据的外观,而xml描述数据本身。由于xml注重的是内容,其显示要通过xsl(extensible stylesheet language,可扩展样式语言)或css来实现。xsl是为xml文件定义的一种标识语言,它提供类似但却远远超过css的强大功能。
xsl以包含了一套元素集的xml语法规范而定义,该语法规范将被用来把xml文件转换成html文件或xml文档。一个xsl样式表集合了一系列设计规则以用于将信息从xml文件中汲取出,并将其转换成html等其它格式。xsl凭借其可扩展性能够控制无穷无尽的标签,而控制每个标签的方式也是无穷尽的。这就给web提供了高级的布局特性。
2.4 处理和编辑xml数据
在基于xml的c/s模型中,不但能够通过xml集合多个数据源的数据,并把数据源数据及时传输给表示层,而且,只要能理解xml数据,就能从客户层处理和编辑中间层的数据,然后通过中间层与数据层之间的数据刷新机制,对数据层数据进行刷新。
运用xml解析器能够读入一串xml数据,经过处理,产生一棵结构树,并且使用dom把所有数据元素作为对象。解析器或者用脚本把数据进行进一步的处理,或者把数据移交给另外的应用软件或对象进行进一步的处理。
dom实际上是一个应用编程接口(api),用来定义一种标准方法。通过这种方法,能够处理xml结构树的元素。对象模式控制着使用者如何同结构树交流,并且把所有树的元素作为对象暴露出来。dom用扩展方式支持名域、数据类型、查询和xsl转化。
3. 基于xml的三层c/s模型的应用实例
下面具体介绍如何实现基于xml的三层c/s模型,以我们做所过的三层c/s 模式的图书资料管理为例,它是基于xml表达、传输与处理的,其详细实现如下:
3.1 获取数据生成xml文档
中间层通过xml获取数据源数据,生成xml文档,其中每一的书目信息包括:书名、作者、图书简介、出版日期。下面所列的就是获取数据源的一段典型例程。
<%@ language=vbscript %>
<? xml version="1.0" encoding="gb2312" ?>
<图书资料管理>
<%set connection=server.createobject("adodb.connection")
connection.open
set itemrecordset =connection.execute("select * from item ")
do while not itemrecordset.eof%>`
<书目>
<书名><%= itemrecordset("书名") %></书名>
<作者><%= itemrecordset("作者") %></作者>
<图书简介><%= itemrecordset("图书简介") %></图书简介>
<出版日期><%= itemrecordset("出版日期") %></出版日期>
</书目>
<%itemrecordset.movenext
loop%>
</图书资料管理>
3.2 xml文档通过http从应用服务器传送到客户机层,并且支持xml更新功能,使得中间层或数据服务器上数据的变化可以传递给客户。
3.3 xml数据的在表示层(客户机层)的表达
发送到客户端的数据(图书资料管理数据),可以根据用户对象及其不同的应用要求有不同的显示形式。如下所示的xsl样式表,就是一个显示示例,将生成一个html文档,包括一个表格,其中的一行就为一个"书目"元素。
<xsl:template match="/">
<html>
<head>
<title>图书资料管理</title>
</head>
<body>
<table>
<xsl:for-each select="图书资料管理">
<tr>
<xsl:for-each select="书目">
<td>
<xsl:process-children/>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
3.4 编辑、处理数据的实现
只要理解了中间层xml文档的数据,就能从任何地方处理和编辑数据(图书资料管理数据)。
如下例所示,loaddocument程序打开xml文档,然后调用另一个程序displaynode,它用来显示文档的结构。loaddocument传递给正在打开的xml文档的childnodes属性一个引用作为它的参数,同时传递一个整数用来标示开始显示的层次级别。代码利用参数来格式化在visual basic文档结构显示窗口中的文本。
displaynode属性的函数会遍历文档寻找需要的node_text节点类型串,一旦代码找到一个node_text的节点,它会利用nodevalue属性来获得相应的文本串。另外,当前节点的parentnode属性指向一个元素类型的节点。元素节点实现了一个nodename属性,
public sub loaddocument()
dim xdoc as msxml.domdocument
set xdoc = new msxml.domdocument
xdoc.validateonparse = false
if xdoc.load("c:\my documents\sample.xml") then
displaynode xdoc.childnodes, 0
else
' the document failed to load.
end if
end sub
public sub displaynode(byref nodes as msxml.ixmldomnodelist, _
byval indent as integer)
dim xnode as msxml.ixmldomnode
indent = indent + 2
for each xnode in nodes
if xnode.nodetype = node_text then
debug.print space$(indent) & xnode.parentnode.nodename & _
":" & xnode.nodevalue
end if
if xnode.haschildnodes then
displaynode xnode.childnodes, indent
end if
next xnode
end sub
4.总结
在基于xml的三层c/s模型中,中间层一次性从远程数据库中获取满足客户需求的信息,生成相应的xml文档,以后中间层就不需要再与远程数据库进行交互了,即与远程数据库的连接也就终止了。一旦中间件软件把满足客户需要的信息组装起来以后,就可以以xml 形式发送给客户了,这样客户与中间层也就无需进一步交互。
同时,丰富的xml数据发送给客户端后,客户应用和脚本语言就可以直接使用这些数据,这时客户端与中间层服务器之间连接就可以中止了。
因此,在c/s模型中发送给中间层的信息是简洁的、个人化的和精确的。应用服务器负责在正确的时候组装并交付正确的信息,这将网络上的流量减小并提供了高度的交互能力和用户的满意程度。而且,由于中间层可以提供动态的、易访问的内容,这些内容可以被客户方操作。而且,无需刷新整个用户界面就可以更新页面的内容,这样就减少了从服务器方获取客户方已有的信息所需的交互时间。用户可以方便的远程管理数据,使得网络成为一种具有更大的交互性和互操作性的媒体。
其次,运用基于xml的三层c/s模型,xml结构化的数据可以从商业规范和表现形式中分离出来,而且可以更详细地定义某个数据对象的数据结构,解决了信息标准化的问题。
通过在三层c/s模型使用xml,使得企业之间可以通过网络,与合作伙伴间,进行跨平台,跨操作系统的信息交换。
参考文献
[1] hiroshi maruyama ,kent tamura , naohiko uramoto .xml and java developing web applications[m]. addison-wesley, august 1999.
[2] ed tittel, norbert mikula , ramesh chandak . xml for dummies [m]. idg books worldwide ,
inc ,1999.
[3] 宋晓梁,刘东生,许满武. 中间件及其在三层客户机/服务器模型中的应用[n] . 计算机应用990713