【转载】Web Services&XML:XML与HTML的结合(数据岛的应用)

    目前,许多Web网站的内容数据都存放在数据库或数据文件中。对于Web程序开发人员来说,如果要想把有用的信息从数据库中提取出来,传统的方法
是在服务器端编写脚本程序(如VBScript、javascript、CGI、ASP、Perl等等),通过对数据库执行SQL查询得到相关记录,然后
把查询结果组织成HTML页面返回给客户端,用户使用浏览器观察最终结果。

为了提高系统服务的灵活性、可扩展性,使服务对象范围更
广,许多商业网站都尽可能地把商务规则、原始数据和表现形式当做相互独立的服务分别提供。HTML那种蕴数据于显示之中的方式显然不合乎这种需求。因此,
把原始数据存放在XML文档中,使用样式单文件显示内容是XML技术适合于电子商务的优势所在。但从本质上来说,XSL技术不是面向数据显示的,它是一种
格式转换技术,在显示手段和方式上都远不及HTML那样丰富。对编程人员来说,一种较为理想的方案是把HTML和XML两种技术相结合,优势互补,使真正
的原始数据在能够保持本来意义和结构的同时,还能充分利用HTML那千变万化的显示技巧。XML数据岛就是这种技术融合的产物,它使用<
XML>标签把XML数据直接嵌入到HTML页面中,从而实现了二者的优势互补。

IE中数据岛的处理方式

为了能够处理这种内嵌XML代码的HTML页面,Internet Explorer 4.0(以下简称IE 4.0)引入了DSO(Data Source Objects,数据源对象)技术,用Java Applet实现。

例如:

< APPLET CODE=“com.ms.xml.dso.XMLDSO.class”
ID=“xmldso” WIDTH=0 HEIGHT=0 MAYSCRIPT=TRUE>

< PARAM NAME=“URL” value=“myXML.xml”>

< /APPLET>

上述例子中,CODE属性指明了DSO Java小程序,MAYSCRIPT属性保证用户端脚本能够处理数据对象,PARAM标签指明了XML文档的位置。

使用Java的局限性在于只能在HTML文档中说明XML的URL地址,而不能直接将XML标签嵌入其中,这就和真正的数据岛方案还有一定的差距。微软
在Internet Explorer 5.0(以下简称IE
5.0)中对DSO技术进行了扩展,突破了以往的限制,使HTML和XML真正地融合到了一起。HTML页面中支持直接使用< XML>标签。

例如:

< HTML>
< XML ID=“xmldso”>

< ?xml version=“1.0”?>

some XML……

< /XML>

只要保证每个数据岛的ID都是唯一的,就可以在页面中的任何必要的地方嵌入数据岛,并且这些DSO彼此都是相互独立的。

除了上面例子中的这种直接嵌入方式,还可以使用外部引用方式链接数据岛。

例如:

< XML ID=“xmldso” SRC=“myXML.xml”>
< /XML>

这样,只有当公司的客户对象继续使用IE 4.0,并且为了解决这部分客户的兼容性问题时,Java Applet才是编程人员要考虑的选择方案。

在IE 5.0所实现的DSO技术中,如果数据是通过SQL语言对数据库进行查询得到的结果,那么就把它们存放在ADO(ActiveX Data
Objects)记录集中。服务器把这种ActiveX控件(通常是ADO记录集)发送到客户端,由客户端脚本程序做进一步的处理。实际上,IE
5.0就是把XML数据岛作为一种特殊的ADO记录集进行处理的。

XML的数据绑定

1.ADO记录集的映射

XML中的每一条主元素都被映射为ADO记录集中的一条记录,而子元素则相应地被映射到记录集中的字段(也称为域)。

例如,存在XML数据岛books.xml如下:

< XML ID=“xmldso”>
< ?xml version=“1.0”?>

< booklist>

< book>

< title>Straight Talk About Computers< /title>

< isbn>72-80088-005< /isbn>

< /book>

< book>

< title> Gourmet Microwave < /title>

< isbn>72-80081-082< /isbn>

< /book>

< /booklist>

< /XML>

此时,映射后的ADO记录集为:

title isbn

Straight Talk About Computers 72-80088-005

Gourmet Microwave 72-80081-082

2.与HTML元素的绑定

在HTML文档中嵌入数据岛之后,就可以将XML数据岛与HTML元素绑定在一起。每一个DSO条目(即数据岛)都有唯一的ID号。首先将HTML元素
中的DATASRC属性设置为相应的ID,就可以把HTML元素和数据岛联系在一起。然后再通过设置DATAFLD属性值,来确定所提取的XML元素。

例如,与DIV元素绑定的代码如下:

< DIV ID=title DATASRC=#xmldso DATAFLD=“title”>< /DIV>
< DIV ID=price DATASRC=#xmldso DATAFLD=“isbn”>< /DIV>

注意:并非所有的HTML元素都能与XML数据岛绑定。目前,支持这种DSO绑定机制的元素如下:

A、APPLET、BUTTON、DIV、FRAME、IFRAME、 IMG、INPUT (此处类型是:CHECKBOX、HIDDEN、
LABEL、PASSWORD、RADIO和TEXT)、LABEL、 MARQUEE、SELECT、SPAN、TABLE和 TEXTAREA。

3.以表格方式显式XML数据

若把XML数据与TABLE元素绑定在一起,就可以自动地显示为多行的表格形式。

例如,XML数据与TABLE元素绑定的代码如下:

< TABLE BORDER=1 DATASRC=“#xmldso”>
< THEAD>

< TR>< TH>Title< /TH>

< TH>ISBN< /TH>< /TR>

< /THEAD>

< TBODY>

< TR>< TD>< DIV DATAFLD=“title”>< /DIV>< /TD>

< TD>< DIV DATAFLD=“isbn”>

< /DIV>< /TD>< /TR>

< /TBODY>

< /TABLE>

这样,通过将TABLE元素中的DATASRC属性设定为#xmldso,把两者绑定起来。表格内部分为表头(THEAD)和表体(TBODY)两部
分。每一个< book>元素都会显示为一行表格,具体每一栏显示哪一项数据,则由DIV元素中的DATAFLD属性指定。

一般情况下,我们从数据库中查询得到的结果集可能很大,所以从服务器返回到客户端时,数据会被分成若干个页面分别进行传递。此时,利用TABLE元素中的DATAPAGESIZE属性可以指定每个页面包含记录集条目的个数。

例如:

< TABLE DATASRC=“#xmldso” DATAPAGESIZE=10>
很显然,如果XML数据格式是对称的,则无论是映射到ADO记录集还是绑定到表格元素上,效果都会很好。而在实际应用中,XML数据为非对称的例子也
很多,比如一本书的作者可能就不止一位,这在映射和绑定时都会产生一定的麻烦。解决问题的办法就是利用嵌套。每一行表格仍对应一条主元素,每一栏也对应着
一个子元素。对于重复元素,则使用嵌套的表格。我们假设在books.xml中,第一本书的作者为Dean
Straight,第二本书的作者为Charlotte Cooper、Shelley Burke和Regina Murphy。此时,绑定过程如下:

● 创建TABLE元素,并将数据岛ID赋值给DATAFLD属性;

● 对于单独的XML元素,如< isbn>,创建TD元素,并设定相应的DATAFLD属性;

● 对于重复元素,在TD元素内部嵌套一个表格;

● 用单行单列的形式显示作者信息。

注意这里的DATAFLD属性必须设定为“$TEXT”,

以保证嵌套元素的内容被全部显示在指定的元素中。

完整的HTML代码如下所示:

< TABLE BORDER=1 DATASRC=“#xmldso”>
< THEAD>< TR>< TH>Title< /TH>

< TH>ISBN< /TH>

< TH>Author< /TH>< /TR>< /THEAD>

< TBODY>

< TR>< TD>

< DIV DATAFLD=“title”>< /DIV>< /TD>

< TD>< DIV DATAFLD=“isbn”>

< /DIV>< /TD>

< TD>

< TABLE BORDER=0 DATASRC=“#xmldso” DATAFLD=“author”>

< TR>< TD>< SPAN DATAFLD=“$Text”>< /SPAN>< /TD>< /TR>

< /TABLE>

< /TD>

< /TR>< /TBODY>

< /TABLE>

事实上,使用DSO效果最好的情况是针对结构对称的数据,而处理非对称数据更有效的办法是使用我们以后将要介绍的DOM技术。

DSO技术的应用

1. 访问元素的属性

用DSO访问元素的属性很简单,可以直接把属性按子元素来处理。

例如:

< book isbn=“9-001-122-12”>
……

< /book>

这样,在绑定到HTML表格中时,就可以直接按子元素来处理:

< TD>< SPAN DATAFLD=“isbn”> < /SPAN>< /TD>
如果遇到属性名和子元素名一样的情况,在元素名前加上“!”进行区分。 2.遍历记录集

DSO把XML数据岛当做ADO记录集进行处理的一大好处是可以利用ADO提供的各种方法对数据源进行访问,尤其是当把数据岛与类似SPAN、DIV和
INPUT等HTML元素绑定时。通常这些元素显示的是记录集的首条记录,要想对记录集进行遍历浏览,可以使用ADO的方法 :
Move、MoveFirst、MoveLast、MoveNext和MovePrevious。比如创建一个按钮响应函数,只要用户点击“Next”按
钮,就可以逐条浏览相应的记录。

例如:

< XML ID=“xmldso” SRC=“books.xml”>
< /XML>

Sub btnNext_onclick()

xmldso.RecordSet.MoveNext

End Sub

3.与Script语言相结合

有些用户比较习惯编写Script语言,利用DSO技术同样可以与各种Script很好地结合在一起。

例如(以VB Script为例),访问记录集时,代码如下:

Dim rsBooks

Set rsBooks = xmldso.RecordSet

访问字段(子元素)的值:

Dim sTitle

sTitle = rsBooks(“title”)

可以使用innerText和innerHTML属性把得到的值传递给HTML元素。例如,有一个DIV元素名为divTitle,赋值代码如下所示:

divTitle.innerTEXT = sTitle

利用脚本程序还可以处理许多DSO事件,下表列举了其中的一部分事件:

在脚本中处理各种事件的方法就是在< SCRIPT>标签中使用FOR属性指定XML数据岛ID,使用EVENT属性确定事件类型。

例如,获取记录集中条目的个数:

< SCRIPT Language=“VB Script” FOR=“xmldso” EVENT=“onDataAvailable”>
lblRecords.value = booklist.RecordSet.RecordCount

< /SCRIPT>

除了显示记录数据之外,脚本程序还可以对记录集进行快速查询、排序、编辑等操作。但要指出的是,虽然ADO技术中提供了类似SortColumn和
SortAscending等方法对XML数据进行排序,但是效果不如XSL中的排序操作,所以建议大家充分利用XSL技术来实现这部分功能。

其余的功能,如利用脚本对记录集进行诸如增加、删除、修改等操作,或是分页显示HTML表格等等,在这里就不一一举例说明了,用法与前面的操作大同小
异。最后需要说明的是,所有对DSO对象的操作都是在用户端完成的,实际上是服务器数据对象的一份复制品,这样做的好处是避免了网络承受大量数据通信的负
担。但这时用户端所做的任何操作对服务器上存储的数据毫无影响,如果要想对服务器记录也进行修改,那么就要用到客户端与服务器端的数据交换技术,我们将在
以后对此进行介绍。

中国人

原文地址:http://webdev.csdn.net/page/337792ab-1086-4b0e-bef3-d6d2ecc810a6

国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

时间: 2024-09-27 17:27:34

【转载】Web Services&XML:XML与HTML的结合(数据岛的应用)的相关文章

Build Data-Driven Web Services with Updated XML Support for SQL Server 2000

server|services|web|xml Download the code for this article: SQLXML3.exe (239KB) --->SUMMARY XML is becoming the ubiquitous data format on the Web, and XML support in SQL Server is evolving to meet the additional demand. Using XML, SOAP, HTTP, and SQL

COM+ Web 服务:通过复选框路由到 XML Web Services(1) (微软中国)

services|web|xml|复选框|微软 COM+ Web 服务:通过复选框路由到 XML Web Services John Noss 和 Jonathan HawkinsMicrosoft Corporation 2001年11月 摘要:COM+ Web 服务新增了某些功能,可与 Microsoft .NET Remoting 集成,并通过 SOAP for COM+ 组件实现 XML Web Services 发布的复选框激活.本文通过几个示例介绍基本的互操作性.配置以及托管和非托管

COM+ Web 服务:通过复选框路由到 XML Web Services (转)5

services|web|xml|复选框 在图 3 所示的 COM+ 应用程序导出向导中,输入代理 .msi 文件的位置和名称. 在图 3 所示的 COM+ 应用程序导出向导中,输入代理 .msi 文件的位置和名称. 图 3:COM+ 应用程序导出向导 将代理 .msi 文件安装在单独的客户端计算机上,作为预先生成的 COM+ 应用程序. 安装时将对代理进行适当的配置,以便通过 SOAP 访问正确的服务器和虚拟根.对于客户端激活,可以不使用 WSDL 名字对象,而使用常规非托管的 COM+ 激活

COM+ Web 服务:通过复选框路由到 XML Web Services(3) (微软中国)

services|web|xml|复选框|微软 SOAP 与 DCOM 的局限性和区别 .NET Remoting 的目的之一是提供丰富的分布式环境,使开发人员能够在此环境中对序列化协议(格式化程序)和网络协议(频道)进行组合与匹配..NET 框架 1.0 版本中的 COM+ Web 服务仅支持一种格式化程序 (SOAP) 和一种频道 (HTTP).这并不是说其他频道和格式化程序不能使用 ServicedComponents 或 COM+,而是说没有自动配置为这些备用频道和格式化程序提供客户端和

微软的文章:what are xml web services

services|web|xml|微软 What are XML Web services?Published: May 2001 Key Points XML Web services allow applications to share data. XML Web services can be called across platforms and operating systems and regardless of programming language. .NET is Micr

COM+ Web 服务:通过复选框路由到 XML Web Services(2) (微软中国)

services|web|xml|复选框|微软 事务性组件示例简单的计算器远算不上工作量繁重的业务应用程序,因此我们现在考虑带有对象池的适于 COM+ 事务性组件的应用程序.最容易管理和配置的组件是由 ServicedComponent 导出的托管代码组件,如以下 C# 示例所示: using System;using System.Reflection;using System.Runtime.InteropServices;using System.EnterpriseServices;us

如何创建数据库Web Services

services|web|创建|数据|数据库 XML Web Services一个最显然的用处就是通用数据存取.通过它,你可以把公司的数据库被Internet上的许多客户端来访问,也可以动态地把它导入到第三方的Web站点上,甚至可以允许你的商业伙伴的Web Services去查询.下面就解释一下如何创建一个简单的Web Services,把你的数据库内容显示到Internet Explorer.第三方的Web Services和自定义的C#和VB.NET的客户端. 合作伙伴.客户.雇员在使用为多

vs.net中web services入门

services|web services 入门摘要:Microsoft Visual Studio .NET 和 XML Web services 提供了一个简单.灵活且基于标准的模型,开发人员无论使用何种平台.编程语言或对象模型均可以编写组合应用程序.本文将帮助您快速学习使用 Visual Studio .NET 创建并访问 XML Web services.本文包含一些指向英文站点的链接. 目录简介 用托管代码编写的 XML Web services 使用 Visual Studio 创建

演练:从 Windows 窗体调用 XML Web services

services|web|window|xml XML Web services 是 Visual Studio 的一个新功能,它提供在松耦合环境中使用标准协议(如 HTTP.XML.XSD.SOAP 和 WSDL)交换消息的功能.可以结构化和类型化这些消息或对这些消息进行松散定义.因为 Web 服务基于标准协议,所以 Web 服务应用程序可以与各种不同的实现.平台和设备通讯.有关更多信息,请参阅托管代码中的 XML Web services.可以使用 Web 服务增强 Windows 窗体功能