• 热门标签

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

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

第4章数据建模与XML使用101 下载
特殊的规定。非正式地讲,它表示文档必须符合D T D中的规则。我们对于D T D不能表示的许多
约束感兴趣,其中有些约束是X M L模式也无法表达的—例如,一条消息开始处的序号必须比
前一条消息的序号大一。本章后续部分出现的“有效”一词与X M L中的“有效”含义不同,它
是面向用户的:如果文档能够满足信息模型定义的所有约束,就认为它是有效的。
1. 为什么需要模式
以下论述摘自W3C XML模式建议的草案:
模式的目的是定义和描述一类X M L文档,它使用[ m a r k u p ]结构约束和说明各个组成部分
的含义、用法和关系,这些组成部分包括:数据类型、元素及其内容、属性及其内容、
实体及其内容,以及表示法。模式结构还能够提供附加信息的规范,例如:缺省值。模
式试图通过通用的文档词汇表说明自身的含义、用法和功能。因此, X M L模式结构能够
为各类XML文档定义、描述和归类XML词汇表。
我们认为以上论述说明了模式的功能,但并未说明原因。通过这段话,我们总结出模式有
以下两个作用:约束和解释。
2. 模式的约束功能
模式的作用之一是定义有效文档与无效文档之间的差别。规则的表述应该尽可能使软件能
够判断一个文档是否有效;但是在实际应用中,有些规则可以是只有人类才能够解释的。例如,
科学杂志的一条规则规定作者的地址必须只能包括城市和国家,或者摘要必须是法语的。
之所以需要这些约束,有以下两点原因:格式上的原因(每个出版物都要维护自己的品牌
图像、样式和设计的完整性)和处理的原因。处理的原因定义了处理过程的下一阶段(即:处
理文档)对信息的需求,无论这个过程是个商业过程(如:处理职位申请表)、印刷过程,还是
内部系统过程(如:更新数据库)。在这两种情况下,约束都可以看作是一种品质控制。
当然,约束并不总是好的。这是一种巨大的诱惑,你可能毫无顾忌地利用规则的约束能力对系
统进行过度严格的限制。信息系统常常不够灵活,我们的目标应该是明智地使用约束,使得处理活
动中的人能够最大限度地发挥他的聪明才智。如果使用过度,约束本身会对信息的质量产生负作用:
我过去不得不给电子商务系统提供错误的数据,因为这个We b页面坚持我的地址必须位于美国。
另外,我们的确能够定义明确的规则,并用软件进行检查,但是这并不意味着在可以想象
得到的每个处理阶段都利用规则验证文档的有效性。例如,当你从We b服务器向外传送文档时对
它进行检查就是多余的:当它被放到We b服务器上时应该检查有效性。另外,有些人盲目地毫无
顾忌地使用验证有效性的解析器。类似地,当X M L文档从一个软件系统发送到同一组织机构中
的另一个软件系统时,在测试阶段有必要验证其有效性,但是当一切正常运转之后,就不必重
复地验证有效性,因为软件之间应该相互信任。
3. 模式的解释功能
模式的第二个作用是解释—记录结构的说明和用法,使得发送方和接收方能够对消息有
相同的理解。
在文档和数据库领域,模式的这个作用都是次要的,虽然它实质上可能更加重要。部分原
因在于模式总是不能提供给需要它的人,即:在屏幕上输入数据的人。这就是为何许多系统都
102使用XML 高级编程
下载
受到一种称为语义漂移的现象的困扰,随着时间的推移,用户有改变系统使用方式和更改数据
字段含义的倾向,即使软件结构并未发生变化。在我遇到的一个例子中,用户故意输入会遭系
统拒绝的数据,因为有待纠正的记录文件能够方便地记录明天要打的电话。在另一个系统中,
我发现通讯社以发送虚假的新闻文章为幌子向客户发送发票。
你不能阻止这些事情的发生,正如建筑师不能阻止居住者在厨房里看电视。你所能做的是
尽量解释你所提供的结构的用途,并为用户提供灵活的空间,使得他们在不违背你的设计的前
提下达到自己的目的,而且使你的结构尽可能地直观和自然,以免用户产生被强迫走另一条路
的感觉。
端用户不必直接了解模式,这也意味着模式应该是应用程序可读的:例如,应用程序应该
能够提取数据字段的解释,并将这些解释作为提示文本显示在输入数据的屏幕上。七、八十年
代,模式的这种观念非常流行,它出现在数据字典中:数据字典强调模式在定义系统词汇中名
称的含义方面的作用,虽然软件公司对数据字典的滥用(他们将数据字典做成内部系统目录)
导致它最终被淘汰。
4.3.2 将DTD作为模式
如果模式的作用是约束和解释,那么XML DTD的局限性就显而易见了。它主要体现在以下
几方面:
(1) DTD能够表示哪些约束
作为一种约束语言, D T D是非常有限的。它能够控制元素的相互嵌套,却对元素中包含的
内容无能为力。它对属性的控制略微强一些,但即使如此也是非常有限的,例如: D T D无法规
定某个属性值必须是数字。这必然意味着许多实际的有效性验证工作必须由应用程序来完成;
事实上,我常常发现D T D的验证功能基本上没什么价值,不值得使用。
(2) 你能够依赖D T D的有效性验证吗
即使在D T D能够定义的有限的规则中, X M L文档仍然可以设置自己的议程:是否引用D T D,
引用哪个D T D,以及是否用私有的内部子集中的声明覆盖D T D中的声明,这些都是由文档本身
决定的。即使应用程序知道将使用验证有效性的解析器,文档乐于接受哪些约束也是由文档本
身来决定的,应用程序不能将自己的意愿强加给它。
假设你为旅游路线定义了D T D—i t i n e r a r y. d t d。为了将旅游路线邮寄给客户,你的应用程
序要负责打印旅游路线。如果应用程序不希望由自己来验证有效性,它需要确保输入的文档符
合名为i t i n e r a r y. d t d的D T D。为此,它要保证:
• 它所使用的解析器是能够验证有效性的。(这一条是不言而喻的,但是你的应用程序是使
用S A X、D O M还是X S LT,就很难判断了。)
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(44)