• 热门标签

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

时间:2010-08-09 13:16来源:蓝天飞行翻译 作者:admin
曝光台 注意防骗 网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者

程序清单1 6 - 1
696使用XML 高级编程
下载
以上文档对应的D T D有些特殊。我们将C o l l e c t i o n作为文档类型。严格意义上讲,它将转化
为一个D T D,但是我们希望将C o l l e c t i o n作为能够包含各种对象的通用容器。有些人认为,每次
使用C o l l e c t i o n时,都需要声明命名空间,然而我们不希望如此严格:
程序清单1 6 - 2
4. 程序员成果报告历史应答
成果报告应答文档I T S t a ff e r由包含零个或多个P r o j R e p o r t元素的C o l l e c t i o n构成,其中每个
P r o j R e p o r t元素必须包含用于表示项目名称和项目I D的元素,以及包含形式随意的文本描述的元
素,其中的描述是由程序设计管理员输入的:
程序清单1 6 - 3
下面是我们使用的C o l l e c t i o n变种:
程序清单1 6 - 4
16.5 实现
负责开发本章应用程序原型的编程小组在开始正式编程之前首先熟悉了我们的设计理念。
第16章实例研究2—XML和分布式应用程序使用697 下载
除了了解系统及X M L词汇表中的类,他们还学习了如何使用组件。编程小组决定使用M S X M L
D O M接口解析和操作交换数据;使用M S X M L的I X M L H T T P接口实现通过H T T P在页内传输
X M L文档;使用M S X M L的XML DSO进行数据绑定。他们使用A D O获取、插入和更新关系数据
库中的数据。
16.5.1 定位服务
根据前面介绍的五条原则,定位服务的正确方法是:每次当客户端需要向服务器发送查询
时,通过搜索目录获得适当的U R L。网络管理员应该在目录中以相关的词汇表名称为条目列出
所有服务。在我们的例子中, H i s t o r y. a s p应该与P r o j P e r f o r m a n c e Q u e r y和P e r f o r m a n c e R e p o r t相关。
由于本书的核心内容不是L D A P目录,因此我不打算详细说明查询的过程。客户端函数G e t A S P ( )
以词汇表名称为参数,返回不含h t t p : / /的U R L:
程序清单1 6 - 5
以上代码假设你已经创建了名为P r o j Tr a c k的虚拟目录,其中包含应用程序的资源,而且
该目录与程序的页面位于同一H T T P服务器上。对于本例来说,这两个假设是很容易实现
的。如果你打算将以上代码用于其他应用程序,应该对代码进行适当修改。
当我们需要知道服务的U R L时,将调用函数G e t A S P ( ),并以所需的词汇表名称作为参数。
对于G e t A S P ( )的返回值,我们需要添加前缀“ h t t p : / /”,并将结果作为X M L H T T P组件的U R L。因
此,要发送对应于词汇表S t a ff Q u e r y的请求,需要以下两行代码:
《Designing Distributed Applications》介绍了通用的LDAP和Windows 2000 ActiveDirectory,
因此我在将服务列在目录中,并通过两个组件实现G e t A S P ( )的功能。如果你打算尝试抽
象定位,并且没有A c t i v e D i r e c t o r y或其他L D A P目录服务,你可以将U R L保存在数据库中。
当然,这种方法的缺点是在实际应用中每个人都必须连接公共的数据库。如果你希望做
进一步的改进,可以将对数据库的访问封装在众所周知的A S P页面中,这个A S P页面的功
能就如同我们的GetASP()函数。
698使用XML 高级编程
下载
任何支持特定数据词汇表(如: S t a ff)的服务自然也能够理解相应的查询词汇表(如:
S t a ff Q u e r y)。如果不存在数据词汇表,查询词汇表就没有意义;同样,如果没有提交数据时的
查询词汇表,数据词汇表就没有意义。理解了查询词汇表与数据词汇表之间的链接关系,在定
位服务时就可以随意请求查询词汇表或者数据词汇表。有些程序员认为理所当然应该请求数据
词汇表,因为这是我们真正感兴趣的内容。其他程序员认为应该请求要发送给服务器的词汇表,
因为这是服务必须处理的词汇表。请求数据词汇表的优势在于双方都能够非常清楚地知道要返
回给客户的内容。然而,请求查询词汇表可以确保服务器能够处理你即将发送给它的内容。如
果你怀疑特定的查询词汇表是否与相应的数据词汇表配对,应该请求查询词汇表。否则,客户
端应该请求数据词汇表。在服务定位的设计中,应该保持松散的耦合,以便新的应用程序与旧
的服务集成。
16.5.2 管理数据绑定
页面P r o j Tr a c k . h t m l中用到了数据绑定。我们利用该技术在页面的两个表单中显示程序员记
录和成果报告记录。成果报告表单是一个表格,我们通过数据绑定多次重复一个模板行,显示
一个程序员的所有成果历史。这不是一次能够完成的。一次典型的用户会话是由一个管理器管
理的,它要执行多次对程序员和历史的搜索,其中还要插入程序员和成果报告。我们必须注意
不要让绑定断开。
为此, P r o j Tr a c k . h t m l包含两个数据岛,分别对应于两个表单。它们是位于页面< B O D Y >元
素中的空外壳:
程序清单1 6 - 6
在设计时,表单元素是与适当的数据岛绑定的。以下是程序员表单的名字字段对应的
第16章实例研究2—XML和分布式应用程序使用699 下载
I N P U T元素:
随后你将看到我们必须手工操作数据岛的解析树,并且动态建立数据绑定。记住了这一点,
让我们继续讨论程序功能的实现。
16.6 输入和编辑程序员信息
我们首先分析一下利用服务向数据库添加新程序员的过程。管理员在空白表单中添入信息,
然后点击N e w / U p d a t e按钮。此时,客户端的按钮点击处理过程O n I n s e r t C l i c k ( )要做出反应。客户
根据用户提供的数据构建查询文档。
16.6.1 客户端
无论我们输入新的程序员记录还是修改旧的记录,客户端都将执行相同的操作——建立查
询文档。我们要生成包含I T S t a ff e r元素的C o l l e c t i o n文档,I T S t a ff e r元素中包含表单字段的值。隐
含的I N P U T元素s t a ff I D Te x t用于区分插入和修改操作。如果我们输入新的程序员记录,该字段为
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程下(60)