曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
是这种形式仍然是静态数据结构。
按照元数据定义对象的特征,每个特定的对象实例用符合元数据定义的数据结构表示(参
见图1 6 - 3)。由于需要特别的灵活性和应付错误的健壮性(参见原则5),我们将使用自描述数据,
即:X M L。这意味着每个离散的数据元素被标记为X M L文档的元素或属性。数据的使用者总是
能够知道它所处理的是什么元素(无论它期望的是什么),以及元素在何处结束,因为元素是用
表示元素内容的标签标记的。因此,任何理解服务词汇表的使用者都能够理解数据提供者要表
688使用XML 高级编程
下载
客户端页面服务
达的含义。
图16-3
传统上,数据是以二进制格式传递的,它隐含着数据结构是共享的。如果通信双方有相同
的消息或公共的操作,意味着它们能够理解数据的二进制格式。数据的大小、数据类型以及数
据结构中各字段的顺序是在设计阶段严格定义的。服务器端自主地改变数据结构会导致客户端
的崩溃。你可能参加过编程小组开发大型客户-服务器应用程序,其中部分程序分配给其他程序
员完成。当你编写完处理特定数据结构的客户端程序后,却在某一天发现应用程序无法正常运
转。经过调查,发现另一个程序员在未通知你的情况下,已经根据增强程序功能的请求或错误
报告增加了一个字段,或者修改了现有字段的长度。你所负责的程序因为数据的随意变化而崩
溃。如果服务器及其结构是由分布于不同地理位置和时区的许多编程小组共享的,相信你不难
想象其中隐藏的麻烦。
利用X M L对数据进行编码不仅减小了出现这种麻烦的可能性,而且尽量扩大数据共享的范
围。使用数据的客户或服务可以忽略数据结构中无法理解的变化部分。由于我们有众所周知的
词汇表,因此能够标记结构中的每个字段。每个字段以字段的名称作为明确的分界线。所以,
我们总是能够逐个字段地验证数据的完整性,并使代码与真正接收的数据而不是设想要接收的
数据相对应。
16.2.4 服务是短暂的
在应用程序设计方面,必须保证持续性状态是由在计算过程中需要该状态的层单独保留的。
举例来说,购物代理对于购物者的标识和购物清单感兴趣,因此该信息应该由购物代理来维护,
而不是由代理访问的销售商服务保存。这不仅符合H T T P无状态的特性,而且能够减少网络上机
第16章实例研究2—XML和分布式应用程序使用689 下载
服务
服务
自描述数据
客户端应用程序
使用不同数据和组件的应用程
序和服务通过独立于平台的文
档进行交互。数据由自然格式
转化为公共的自描述格式,任
何理解任务词汇表的程序和服
务都能够访问这种格式。
器之间的依赖性。
服务有可能变化不定,客户端也许会改变它们的需求。因此,编写服务代码时,应该尽可
能保证它只需要维护与客户端进行一次交互过程中所需的状态信息(参见图1 6 - 4)。
图16-4
这并不总能实现,但是你应该将它作为自始至终追求的目标。应用程序是客户端的集合,
这些客户端通过发出获取数据的H T T P请求使用服务。一旦服务端发送了数据,就认为客户端接
受了服务端的服务。我们并不打算维护分布式系统中的状态信息,而是努力做到不需要维护信
息。客户端将获取它所需要的所有数据。
从组织机构的角度考虑,这条原则充分认识到随着时间的推移不同的开发小组会改变他们
的优先级。今天为了维护状态而达成的一致意见在将来可能发生变化。这条原则尽力消除了达
成这种一致的必要性。我们将限制保存资源的时间,以减少在需要时丢失资源的可能性。以访
问一个繁忙的We b站点为例,当你访问一个页面时,它可能出现故障或者崩溃。如果该页面包含
一个表单,你正在为了采购而输入信息,如果提交表单后得不到应答,你会非常生气。H T T P并
不能对资源提供保证,但是特定站点的应用程序隐含着资源的长期可用性。
16.2.5 服务必须可扩展,且能够降低对外部的要求
相信你没有忘记,我们潜在的问题是要使用独立的开发小组。时差、距离和组织机构界限
将这些小组分隔开来。我们完全能够想象在数据格式的实现上必然存在着一定的偏差。即使实
现是准确无误的,当新的实现版本发布时,广域网上也常常存在着不同版本的数据。由于X M L
能够对数据进行标记,因此我们可以通过读取标记判断文档的内容,并做出正确的应答。当然,
如果使用验证有效性的解析器,就能够消除这些错误,但这有可能不是我们所期望的。在某些
情况下,我们宁愿关闭有效性验证,接收格式正规但有一些小错误的X M L(参见图1 6 - 5)。
690使用XML 高级编程
下载
客户端需要服务
客户端使用服务
客户端使用完服务
即使坚持使用有效的X M L文档,我们仍然会对这条原则感兴趣。由于不同的组织机构有不
同的公共对象视图,因此我们希望将数据表示为既能
够描述数据的哪部分是公共的,又能够说明哪部分是
组织特有的。类似地,随着时间的推移,数据格式会
逐渐发展,所以我们希望描述数据格式发生了哪些变
化。这样,当客户端访问的服务所提供的数据与客户
端的想象稍有差别时,它仍然能够从中提取部分信息。
我们将利用X M L的标记和自描述特征表示我们的问题
词汇表。由于它完全是以文本方式书写的,因此我们
有理由相信即将遇到的任何计算平台都能够读取我们
的数据结构。我们可以设计一些用于指定X M L词汇表
的约定,以便表示集合、版本发展和通用格式规范。
这些约定超出了编写D T D和模式的规则。根据这些约
定编写的软件能够识别表示商业对象的数据结构集合,能够接受它所需要的特定版本的数据信
息,当它接收到无法识别的特殊格式时,它能够提取其中的通用数据版本(参见图1 6 - 6)。
图16-6
这些原则都是非常宏伟的目标。一个实例研究和一个基本的例子不足以说明这些原则的
各个部分。我们即将讨论的这个实例将用于解释在We b应用程序中使用X M L进行数据交
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML高级编程下(57)