您正在查看: 前端开发 分类下的文章

传统关系数据库对XML的支持-MS SQL Server

9.4.1.1 MS SQL Server

开发基于XML的动态应用,如动态信息发布、动态数据交换等,前提是必须有数据库的支持。在这一方面,Oracle和Microsoft走在其他厂商的前面,Oracle做为全球第一大数据库及数据库应用解决方案提供厂商,早在1999年就率先推出支持XML的数据库产品——Oracle 8i。在这一章,我们来简要地介绍一些对XML提供支持的数据库。

就在XML技术在全球日益盛行的时候,Microsoft于2000年1月宣布其SQL Server对XML提供支持,并且发布了一个预览版本。由此可以看出Microsoft在其战略决策上将XML技术放在一个何等重要的地位,而这一消息的发布无疑将给广大的XML技术人员和SQL Server用户带来了强劲动力。

Microsoft SQL Server的XML支持计划,是其下一步庞大计划的一部分,即旨在产生一组功能强大的产品和服务来实现所谓的BizTalk框架。BizTalk是Microsoft现有的、帮助商务公司实现应用软件一体化的分布式互连网应用DNA (Windows Distributed interNet Applications )体系结构的延伸和扩展。以后的Microsoft产品和工具本身都将包含对BizTalk服务体系结构的支持。Microsoft Commerce Platform、Office、BackOffice 以及Windows 都将利用BizTalk XML Schema来保存文档的额外信息,并且用它来实现BackOffice和基于Windows应用软件的一体化集成。Microsoft产品套件、Microsoft Office 2000发行的下一个主要版本都打算将html提升成为一种内置支持的文件格式,并且使用XML来存储额外的文档信息。Microsoft SQL Server正是其实现这一目的的底层数据管理的有力工具。

在此之前,Microsoft就一直致力于将XML技术同其数据库旗舰产品SQL Server相集成,以帮助建立下一代的高效的基于Web的企业应用。Microsoft宣称,其下一版本SQL Server,即代号为Shiloh,将是一个完全支持XML的产品,利用该产品,用户可以在Web浏览器下输入一个URL地址,即可访问SQL Server数据库,而返回的结果可以是一个XML文档。另外,它还允许通过输入样式参数,指定样式信息,以便在浏览器中输出丰富的页面。例如,一个典型的URL如下所述:

href=http://localhost/Northwind?sql=select+name,id, company,email +from+clientList+for+xml+auto

XML SQL技术预览提供了以下几种XML访问功能:

  • 利用HTTP协议以URL的方式访问SQL Server数据库。
    这是最基本的访问方式。另外,通过指定样式模板参数,可以返回具有一定样式信息的数据。该样式模板是一个包含一条或多条SQL 语句的合法的XML文档。返回的XML文档可以通过指定的XML模式来定义,三种模式为:RAW、AUTO、EXPLICIT。
  • 利用在SELECT语句中附加FOR XML返回XML格式数据。
    作为对XML模式的一种补充,通过在FOR XML中指定DTD或XML schema来达到对返回XML文档的格式化。
  • 利用基于XML的UPDATE语句来更新数据库中的记录。
    SQL Server支持基于XML的插入、删除、修改等数据库更新操作。通用的更新语法是:
<sql:sync xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<!-- 用于删除和修改操作中 -->
<sql:before>
<TABLENAME <!-- 数据表名 -->
[sql:id="value"] <!-- 仅用于修改操作中 -->
col="value"col="value"…
/>
</sql:before>
<!-- 用于插入和修改操作中 -->
<sql:after>
<TABLENAME <!-- 数据表名 -->
[sql:id="value"]
[sql:at-identity="value"] <!-- 仅用于插入操作中 -->
col="value" col="value"…
/>
</sql:after>
</sql:sync>
  • 利用对象模型在Script脚本程序中实现同样的功能。
    XML SQL技术预览提供的osqlxml.dll允许利用对象模型在Script脚本程序中实现基于XML的数据库操作。下面是一个ASP示例:
<%@ LANGUAGE = VBScript %>
<% Response.ContentType = "text/xml" %>
<%
SET oSQLXML = CreateObject("Microsoft.SQLXMLRequest")
oSQLXML.Connection = "
Driver=SQL Server;
Server=FRANKMAN-CAVE;
Database=Northwind;
uid=sa;pwd=
"
oSQLXML.ExecuteQuery("Select * from customers for XML AUTO")
Response.BinaryWrite oSQLXML.ResultAsBinary
%>

XML SQL 技术预览展示了Microsoft在XML技术应用上的实力,通过将XML同数据库相结合实现了强大的功能。但是,由于该技术目前只是一个预览版本,其本身还会不断发展,相信在正式发布时将会有所改进。

传统关系数据库对XML的支持-Oracle 8i

9.4.1.2 Oracle 8I

Oracle公司在其最新的Oracle 8i数据库产品中提供了对XML的支持,使其成为开发基于XML的Internet应用的系统平台。作为Oracle 8i数据库的一个主要组成部分,Java版本的XML SQL实用工具在Oracle公司的XML战略计划中扮演着重要角色。该工具包包含了一组Java类,可完成下述两大功能:

  • 向数据库发送查询语句,然后从返回的结果中输出XML文档(文本或DOM节点树)。
  • 将XML数据保存至数据库。

这两大功能可以说是SQL 数据库支持XML的最基本要求,却足以体现当今XML技术发展的潮流。微软宣称在其下一代数据库产品Microsoft SQL Server "Shiloh"中也提供类似的支持,但其正式版本尚未发布。因此,无形之中,Oracle占据了良好的先机。

Oracle Java版本的XML SQL 实用工具具有下列特性:

  • 能够从SQL查询中产生XML文档。
  • 能够从SQL查询语句或JDBC ResultSet对象中输出文本或文档对象模型节点树(DOM)。
  • 能够将XML文档数据写入数据库表或视图中。
  • 支持W3C的XML 1.0推荐标准。
  • 可以通过扩展进而支持SAX 1.0 文档访问。
  • 支持基于下列字符集的文档: UTF-8、UTF-16、ISO-10646-UCS-2、ISO-10646-UCS-4、EUC-KR、US-ASCII 、EBCDIC-CP-*、ISO-8859-1to -9、BIG 、GB2312 、EUC-JP 、KOI8-R 、ISO-2022-JP 、 ISO-2022-KR 、Shift_JIS

XML SQL 实用工具输出的XML文档实际上根据数据库表内在结构动态确定。比如,将ROWSET做为返回结果集的根元素,每行数据将ROW做为元素标记,而每个字段名称都将做为ROW元素下的子元素。下面给出一个典型示例:

假定查询语句为:

SELECT Name, ID, Company, Email FROM clientList

则可能返回如下的XML文档:

<? xml version = "1.0" encoding="GB2312" ?>
<ROWSET>
<ROW id="1">
<Name>张三</Name>
<ID>1</ID>
<Company>A公司</Company>
<Email>zhang@aaa.com</Email>
</ROW>

<ROW id="2">
<Name>李四</Name>
<ID>2</ID>
<Company>B公司</Company>
<Email>li@bbb.org</Email>
</ROW>
</ROWSET>

XSQL servlet是Oralce XML开发工具包的重要组成部分,它实际上是一种Java的服务器端小程序,利用Java版本的XML SQL 实用工具将关系数据库中数据转换为XML文档。XSQL servlet属于模板驱动类型,应用时需要将SELECT查询语句作为<query>元素嵌入到模板中,当查询处理完成后,这些内嵌的元素将会被返回的结果所替换,最终输出成为一个XML文档。另外,它还支持通过HTTP传送查询参数以及利用XSL将输出结果样式化,通过XML、SQL、XSL三者的结合从而产生动态的Web页面。

相关网址:http://technet.oracle.com/tech/xml

传统关系数据库对XML的支持-Informix

9.4.1.3 Informix

随着XML逐渐受到越来越多的重视,Informix公司也发布了其XML策略:快速、简便地构造高性能、可缩放、基于XML数据驱动的Internet应用,支持和加速开放标准。

首先,Informix公司在其数据库产品Informix中加入XML支持。作为Informix Internet Foundation 2000的一部分的Informix Web DataBlade模块,可以通过一个简单的SQL接口产生动态的XML数据和文档。

另外,Informix还开发了一种称作XML Mapper的应用,它使得开发者可以在Informix数据库中存储和检索XML数据。利用一组SQL表格和一个XML文档模板,XML Mapper能够自动生成文档对象代码。例如,假定有两个数据表(作者和图书)以及一个包含作者信息的XML模板,那么,就可以产生一个内置存储和检索XML功能的Java类。一般情况下,在该Java代码中会有两个关键的方法实现:getXML和setXML。在前面我们所做的假定条件下,getXML方法可以返回一个包含作者数据的字符串,而setXML则可借助XML模板进行数据库中数据的插入和修改。Informix XML Mapper 还可以生成一个servlet,它能够从数据库中取得数据,然后在Web浏览器中显示。

相关网址:http://www.informix.com/xml/

9.3 XML数据交换技术-ASP2XML组件

9.3.6 ASP2XML组件

ASP2XML是由Stonebroom开发的。它实际上是一个用来在XML文档和任意ODBC或者OLE-DB数据源之间双向传输数据的OLE COM组件。该产品是模型驱动的,并且将XML文档模型化成一个单一的表对象。当将数据从数据库传输成XML时,用户制定一个单一的SELECT声明,输出包含ASP2XML自定义的标志。当将数据从XML传输给数据库时,XML文档中必须包含ASP2XML自定义的标志,它们是该中间件处理时要用到的。这个组件可以在ASP脚本中使用,也可以当一个普通的组件使用。

相关网址: http://www.stonebroom.com/asp2xml.htm

9.3 XML数据交换技术-InterAccess软件包

9.3.7 InterAccess软件包

InterAccess是由XML Software Corporation开发的一套软件包。该软件包是一种以客户/服务器方式通过互联网访问ODBC/OLE DB数据库的软件,客户端和服务器之间以XML数据格式双向交换数据,其独特之处在于采用TCP/IP而不是通常的HTTP作为数据传输协议。InterAccess是由三个模块组成的:InterAccess服务器软件、InterAccess客户端COM动态库、InterAccess浏览器。参见下面的InterAccess体系结构图。

InterAccess 服务器软件运行于服务器上,专门用于处理客户端请求:从数据库中检索数据生成XML格式数据传送到客户端;或者接受客户端发送的XML格式数据并存储于数据库中。由于XML文档中的数据是以对象树的形式存在,因此很方便地即可将数据保存至数据库表中或从数据库表中检索。

在客户端,由一个COM对象处理与服务器的通讯。开发者可以利用内置的API接口函数开发应用程序以检索非XML格式的数据,也可以利用回调函数处理服务器方返回的XML数据。

InterAccess 还提供了一个专用浏览器,通过它,用户可以察看数据库表的内容或者执行SQL语句,最终结果可以保存或者拷贝/粘贴至其他应用程序,如Microsoft Excel 或Access。

下面给出的例子展示了如何通过调用InterAccess提供的COM组件开发基于XML的数据库应用。该例子通过一个数据源连接、登陆远程主机,向数据库发出SQL查询命令,最后打印返回的数据集。从形式上看,同ADO极为相似。

Private Sub btnCommand_Click()
’定义出错处理
On Error GoTo Error

’定义变量
Dim cnn As New XMLDB.Connection
Dim strSQL As String
Dim ds As XMLDB.IDataset
Dim col As XMLDB.IColumn

’连接并登陆数据库
cnn.Connect "iaccess.xmlsoft.com.au", 7777
cnn.Login "TRIAL", "", ""

’执行SQL查询命令
strSQL = "SELECT * FROM clientList WHERE ID like ’B%’"
cnn.Execute strSQL, E_CMD_TEXT, 0, 30
If cnn.Reply.Result <> 0 Then
DisplayErrors cnn.Reply
Exit Sub
End If

’处理数据库返回结果
Set ds = cnn.Reply.Dataset
While ds.EOD <> True
For Each col In ds.Columns
Debug.Print col.Value
Next
ds.MoveNext
Wend
Exit Sub

Error:
MsgBox Err.Description
End Sub

’显示错误信息
Private Sub DisplayErrors(Reply As XMLDB.IReply)
Dim Error As XMLDB.IError
For Each Error In Reply.Errors
Debug.Print Error.Description
Next
End Sub

相关网址:http://www.xmlsoft.com.au/iaccess.html