返回首页
当前位置: 主页 > 航空资料 > 计算机 >

XML高级编程上(125)

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin 点击:
  
10.2.1 数据标准
正如我们在前面所讨论过的,许多人都有从X M L的文档视图到数据结构视图转变的困难。
尽管X M L经常被作为一种有力的标记文档的方法,也应该记住在XML 1.0规范讨论“ X M L文档”
时,它的意思是与一个字处理文档或电子表格不同的东西。
字处理和电子表格文档在你的硬盘上是清晰可辨的,它们保存在一个目录下的文件里。一
个X M L文档也可能以这种形式存在,并且许多正在开发的应用程序也使用这种方法来保存信息。
然而,这些应用程序最终有局限,通常调用一些在文本两边用一些标记来标识出的行,以便它
们能够以一种有趣的方法来表示莎士比亚的著作。
然而,一个X M L文档不需要存在这种固定的形式。它可以在需要的地方被创建,通过一个
We b服务器。然后,也可能对同样的“文档”有两个需求,可能返回不同的结果。例如,生成
一个X M L文档的页面,其中包含一列Wr o x的作者,可能今天返回一个列表,明天就又增加了新
的作者了。
为了举例说明它,让我们创建一个基本的A S P脚本来输出一个Wr o x作者的列表作为简化的
X M L:
程序清单1 0 - 1 2
第10章XML和数据库使用377 下载
X M L的结果文档可能看上去像:
程序清单1 0 - 1 3
378使用XML 高级编程
下载
我们已经将相关的数据表示成一系列的节点,通过使用X M L,意味着现在可以发布这个数
据到任何感兴趣的系统中,倘若系统可以首先转化X M L。例如,我们可以输出一个存在O r a c l e
中的作者列表,输入到P O E T数据库中,不需要写任何的O r a c l e到P O E T的转换程序。实际上,甚
至没有人要编写一个关系到对象的转换程序。我们所要做的就是确保两边都可以读或写普通的
X M L语法。应该记住, O D B C是被设计用来在不同的数据库系统上建起一座桥梁,然而我们拥
有X M L意味着更加先进。
一个应用程序,它可以像M i c r o s o f t的A c c e s s表格或一个J a v a应用程序一样直接处理数据库中
的信息—如果发生同I n t e r n e t的通信,它可以使用如图1 0 - 1 2所示的结构。
图10-12
然而在这个方法中有几个问题:
• 仅有理解O D B C的系统可以接收这个信息。
• 很多防火墙不允许O D B C的交易。
• ODBC易被黑客攻击。这些黑客可能发送一些需要被服务器验证的未经授权的交易。
通过在通信管道的两端加上X M L接口,我们去除了客户端对O D B C的依赖(参见图1 0 - 1 3)。
同样,如果我们以某种方法封装X M L,并且通过8 0端口(正常的H T T P端口)传送它,可以
第10章XML和数据库使用379 下载
服务器
客户
数据

解决防火墙的阻挡问题。实际上, M i c r o s o f t有一个新的技术, S O A P(简单对象访问协议,
Simple Object Access Protocol),它就是这么做的。想了解关于S O A P的更多信息,参见第11章。
图10-13
10.2.2 查询标准
如前所述,我们刚写的用于返回一个包括作者信息的X M L文档的A S P脚本,将返回所有在
数据库中的作者。显然,这个对我们很有用,我们想通过查询这个数据的子集减少网络流量和
响应时间。
为了开始,让我们只是简单地修改一下作者到X M L脚本,以便它可以在W H E R E子句中接收
一个参数。大部分的代码仍然保留,所以我只显示出新的行:
程序清单1 0 - 1 4
这个允许我们简单地通过在U R L中指定一个参数而取回不同作者的X M L表示。例如,我们
要求返回的X M L被放在H T M L页面中的数据岛(Data Island)中,格式为:
程序清单1 0 - 1 5
380使用XML 高级编程
下载
网络服
务器
目前只有M i c r o s o f t实现了数据岛,但是对这个例子没有什么影响。我将介绍如何用U R L来
要求X M L返回单个的作者。同样的脚本也可以用来取回全部或几个作者。
1. XML 查询与数据库查询
然而,现在我们碰到了一个有趣的问题,我们是以相关数据库的特殊格式来运行查询,但
是得到的结果却是X M L。这个现象非常重要,我们表现的输出数据独立于后面的数据存储的格
式,如果也能够使用一种独立于后端的数据库的方式查询数据是不是更好呢?例如,我们用对
象数据库来替换关系数据库。刚才使用的查询方法—L a s t N a m e = ' M o h r '—可能在一个对象环
境下就没用了。如果我们用来取回数据的查询不需要改变就会很理想了。
如前面所述,尽管我们已经在X M L的数据库上创建了一个层,但仍需要按照处理下面的数
据库的方式进行查询。实际上,应用结构如图1 0 - 1 4所示。
图10-14
M i c r o s o f t已经明确表态;一个层位于SQL Server 7上返回指定的S E L E C T语句查询结果为
XML。
2. XML查询语言
我们已经建立了一个简单的方法从任意的关系数据库取回数据并且以X M L来表现它们。换
句话说,我们已经将关系数据映射到X M L的节点结构。至于外部的世界关系到我们的数据库,
可能也包含X M L,用我们现在的实现方法查询数据,外部世界将需要知道数据是以什么格式存
储在这个例子中的关系数据库。相反我们需要能够查询节点。
在写这本书的时候,有许多关于分析X M L语法查询的工作已经完成—这个我们在第8章已
经讨论过。因为关于这方面不存在什么协议,专门为现在这个例子的目的,我们将把数据库看
成一个大的X M L文档,并且使用X S L语法来满足要求。
第10章XML和数据库使用381 下载
网络
服务器
虽然我们的数据作为
XML返回,但我们仍
然使用对数据类型的
专门查询方式
关于X S L的查询语法已经从X P a t h中分离出来。可以在h t t p : / / w w w. w 3 c . o rg / T R / x p a t h上看到
一些介绍。
我宁愿使用X P a t h而不是其他的建议来查询X M L,因为它允许一个查询被表述成一个U R L。
 
中国航空网 www.aero.cn
民航翻译 www.aviation.cn
本文链接地址:XML高级编程上(125)
 
------分隔线----------------------------