您的位置:寻梦网首页编程乐园XML 编程XML技术讲座
XML 编程

XML技术讲座之十三

数据库与信息交换

XML信息交换的类型

从整体上讲,XML定义了应用间传递数据的结构,而且这种结构的描述不是基于二进制的、只能由程序去判读的代码,而是一种简单的、能够用通用编辑器读取的文本。利用这种机制,程序员可以制订底层数据交换的规范,而各模块之间传输的数据将是规范的符合既定规则的数据。从应用的角度来看,XML信息交换大致可分为下面几种类型:数据发布、数据集成和交易自动化。通过XML可以实现跨媒体、多介质的数据发布。传统的信息发布方式多是基于纸介质和CD-ROM的信息发布,而XML的出现,使得跨媒体数据发布技术又向前发展了一步。2000年5月18日,一个由数字印刷领域的知名厂家组成的所谓"按需印刷"组织(PODi)发布了"个性化印刷置标语言"(Personalized Print Markup Language, PPML)规范。这是一种基于XML的技术规范,主要用于带有可再利用内容文档的快速印刷。如果说数据发布涉及到的是服务器-浏览器形式的数据交换,那么,数据集成则是一种服务器-服务器之间的数据交换,这对于B2B电子商务系统尤其重要。另外,XML也有助于提高应用的自动化程度。遵循共同的标准,使得应用程序开发商开发出具有一定自动处理能力的代理程序,从而提高工作效率。

XML数据存取机制

XML数据源多种多样,根据具体的应用,大概可分为下面三种:一种是XML纯文本文档,第二种是关系型数据库,第三种则来源于其它各种应用数据,如邮件、目录清单、商务报告等。其中,第一种来源是最基本的也是最为简单的,将数据存储于文件中的优点在于可以直接读取,或者加以样式信息在浏览器中显示,或者通过DOM接口编程同其它应用相连。第二种数据来源是对第一种来源的扩展,其目的是便于开发各种动态应用,其优点则在于通过数据库系统对数据进行管理,然后再利用服务器端应用(如ASP、JSP、Servlet)等进行动态存取。这种方式最适合于当前最为流行的基于三层结构的应用开发。第三种数据由于来源广泛,因此需要具体情况具体对待。下图示出了典型的XML数据存取机制。

XML在数据库中的应用模式

通常,XML在数据库中的应用模型需要借助三层架构来实现。这种模式下,在用户接口层,利用CSS或XSL技术,XML可以实现基于Web浏览器的多样式可视化显示。而中间层则需要有一个代理程序运行于其中,通过它来访问数据库管理系统中的数据和输出XML文档。另外,这种代理程序还可以进行双向的基于事件的数据更新,也就是说,客户端的数据变化(如数据的插入、删除、修改等)可以通过代理程序反映到底层数据库,而数据库的更新也能够通知到客户端。表面上看,这种机制同传统的三层架构没有什么区别,但实际上是不同的,因为此时在传输过程中的数据都是已经XML化了的。 微软在其Windows分布式Internet应用(即Windows DNA)架构中集成了XML技术。通过中间层的代理程序,可获取的数据来源可以不必局限于某台固定的数据库服务器,而可以是分布于企业内,甚至于遍及全球各地的数据库服务器。另外,借助于XML Schema,开发者就能更为精确地描述和交换数据,因而大大地提高这种应用的效率。

XML提供了一种连接关系数据库和面向对象数据库以及其它数据库管理系统之间的纽带(参见下图)。XML文档本身是一种由若干节点组成的结构,这种特点使得数据更适宜于用面向对象格式来存储,同时也有利于面向对象语言(C++、Java等)调用XML 编程接口访问XML节点。关系数据库和面向对象数据库首先需要将数据从数据库中提取出来,经过转换或直接以XML数据形式发布到网上(局域网或Internet网),然后相互交换数据,经应用层系统处理后再转存入库。

XML数据交换技术及应用

到目前为止,已有大量关于XML数据交换技术和应用面世。其中,有的只是将现有技术扩展XML支持,有的属于XML中间件产品,还有的是比较完整的XML应用。它们大多数都提供了对数据库的支持,这不能不从一个侧面反映出XML与数据库的密切关系以及基于XML数据库应用的潜力。不同的编程语言和脚本语言需要不同的SQL API和XML语法分析器组合。例如,对于一个C++程序员来说,编写一套访问数据库的XML应用程序可能需要利用ODBC和C++ XML 语法分析器;而对于一个Java程序员来说,可能只需要JDBC和Java XML语法分析器就够了;更为特殊地,如果你对微软的Visual Basic和VBScript脚本语言比较熟,那么很有可能你会用它们来开发XML应用,此时,你只要再学习一下ADO,然后借助微软的XML语法分析器进行编程。除此之外,DB2XML、InterAccess、ODBC2XML、XML Servlet、XOSL、ASP2XML都提供了基于XML的数据存取机制,它们有的是以组件的形式提供,有的属于转换工具,还有的则是完整的软件包。下面是一个ASP示例,通过在调用ADO和DOM接口从数据库中提取数据以动态生成XML文档。

<% @language = "VBScript" %>
<% Response.ContentType = "text/xml" %>
<?xml version="1.0" encoding="GB2312" ?>
<%

' 动态构建XML文档
set xmlDoc = Server.CreateObject(Microsoft.XMLDOM)
set root = xmlDoc.createNode("element","通讯录","")
xmlDoc.appendChild(root)

' 查询数据库
sqlStr = "select * from roster"
set cConn = Server.CreateObject("ADODB.Connection")
cConn.Open "ROSTER","sa", ""
set rsData = cConn.Execute(sqlStr)

rsData.MoveFirst()
while (not rsData.EOF )
'构建联系人子节点
set tmpNode = xmlDoc.createNode("element","联系人","")
xmlDoc.documentElement.appendChild(tmpNode)

'构建姓名、年龄、电话、地址子节点
for i = 0 to rsData.Fields.Count - 1
set childNode =
xmlDoc.createNode("element",rsData.Fields(i).Name,"")
childNode.text = rsData.Fields(i)
tmpNode.appendChild(childNode)
next

rsData.MoveNext()
wend

Response.Write(xmlDoc.xml)
%>

编程实现基于XML的数据存贮当然是一种手段,但略显繁琐,因此一些支持XML的数据库产品又提供了一种更为方便的途径,即通过URL的方式直接进行XML的数据存贮。比较典型的示例如下:

  • http://localhost/northwind?sql=SELECT+FirstName,LastName+FROM+Employees+FOR+XML+AUTO&xsl=
    employee.xsl&contenttype=text/html&root=root (注:Microsoft SQL Server 2000技术实现)
  • http://localhost/tamino/xmldb?_XQL=patient/name (注:Software AG Tamino Server技术实现)

来源:网络世界