• 热门标签

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

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

效的。列出二十个可选的且不重复的子元素,却不限制它们出现的顺序是不可能的。这到底会
不会成为一个问题取决于文档是如何产生的。对于由人编写的文档,如果仅仅为了让X M L解析
器验证有效性就要求文档的作者按照指定的顺序排列所有子元素,这显然不太合理。
(5) 复合内容的元素
复合元素内容是文档中最常见的结构,在这种结构中,你可以利用标记以文本形式标志特
定的单词。标记当然应该是语义标记,而不能是纯表示标记,例如:
程序清单4 - 6
根据我们在本章描述的这类正式的建模方法不太容易产生复合内容结构—这并不意味着
这种结构不好。相反,它是一种非常出色的表示信息的方式,特别是对于那些比较模糊的信息,
我们希望捕获自然语言能够表达的微妙的有些模棱两可的含义。有时,试图将所有事物都规格
化和代码化是不恰当的。
复合元素内容不仅能够用来表述事实,而且能够说明事实的特性。同样,在大多数流行的信息
建模方法中没有复合内容的概念,虽然它有许多实际的用途,特别是在医疗记录、历史研究及假货
调查等方面,我们不仅要记录结论,如:“Thomas Wi l s o n铅中毒”,而且要记录与事实相关的观察资
料:谁在何时下的结论?有什么证据?有多大把握?有人持不同意见吗?它将产生以下类型的结构:
程序清单4 - 7
复合元素内容并不非常适合这种目的,因为它总是允许任何子元素以任意顺序出现任意多
106使用XML 高级编程
下载
次,特别是它允许多个文本内容单元。除了复合元素内容之外,还有几种更好的可选方案:一
种方法是将“事实”表示为元素,将“事实的特性”表示为这些元素的属性;另一种方法是为
文本内容设定另一级元素,这样上述例子将变为:
程序清单4 - 8
但是如果出现大量的没有注释的所谓“事实”元素,且只有一个值,将会难于处理。
(6) PCDATA内容的元素
最后,我们将介绍P C D ATA内容。P C D ATA元素是构成文档的原子,更高级的结构是以它为
基本组成单位的,如果你用元素表示特性,则大部分元素都将是P C D ATA元素。
(7) 对象类型层次建模
在X M L中,没有明显的类型层次概念,但是可以用参数实体仿真它,有经验的D T D设计者
在潜意识中已经形成了这一观念。
在专用类型的定义中,总是要在派生它的类型的定义中添加一些特殊的内容。例如,对象
类型< r e f u n d >是类型< p a y m e n t >的专有化形式,它在< p a y m e n t >定义的基础上增加了< r e a s o n >和
< a u t h o r i z e d - b y >等属性。如果我们在D T D中使用参数实体定义类型,这种扩展能够以非常自然
的方式来表达。
下面的例子使用子元素表示特性:
程序清单4 - 9
(8) 当几个特性的数据类型相同时
在前面对建模的讨论中,我们曾经提出这样一个问题:如何命名用于代表两个独立特性
B i l l i n g - A d d r e s s和S e r v i c e - A d d r e s s的元素。对于这种情况,你常常会创建几个有相同数据类型的
元素类型,即:这些元素类型有相同的有效性规则。同样,在D T D中,你自然可以用参数实体
表示最基础的数据类型:
第4章数据建模与XML使用107 下载
(9) 在D T D中定义属性
当你开始定义属性时,可供选择的余地已经不大了,它们几乎完全是按照信息模型构建的。
确定一个属性是可选的还是必需的一般非常简单。决定是否要为属性设定缺省值通常也要
从实际角度出发—它主要取决于当文档的作者对属性值不关心时,你作为文档的设计者是否
认为有必要确定所用的值。当然,当你扩展D T D使之包含前一版本没有的属性时,缺省值非常
重要。
从事数据库设计与开发的人一般不习惯D T D中F I X E D属性值的概念(对于在D T D中声明为
F I X E D的属性,它的每个实例都有相同的值),但是它确实是一种功能非常强大的机制。它可能
用于以下情况:
• 采用类似于J a v a中静态字段的用法,用它们表示元素类型的属性,使之区别于实例的属性。
例如,可以使用固定属性标识元素的数据类型:因此d a t e - o f - b i r t h字段可能有固定的属性
d a t a t y p e = " d a t e ";或者可以利用固定属性命名用于验证元素实例值的J a v a类。
• 使用它们标识超类。举例来说,如果使用许多不同的元素标记记录客户一生中的不同事件
(例如: o p e n - a c c o u n t,c l o s e - a c c o u n t,s t a r t - s e s s i o n,m a k e - o r d e r,c a n c e l - o r d e r或m a k e -
p a y m e n t),你可能需要某些程序分析特定客户的所有事件。你不必对表示事件的元素类型
列表进行硬编码,而是可以给每个元素类型设置一个固定的属性i s - e v e n t = " y e s ",这样你的
程序就能够使用该属性选择相关的属性。例如你可以在D T D中写入以下代码:
然后,在用X S LT编写的应用程序中,可以处理属于事件的所有元素类型:
• 用于目前是常量,将来可能变化的属性:例如版本号。
• 与条件部分或参数实体配合使用,提供仅在程序的特定运行中固定的属性。例如,可以在
外部参数实体中定义名为a c c e s s - r i g h t s的F I X E D属性,它根据用户取不同的值。通过使用
以下条件部分,可以在X S LT应用程序中筛选出允许用户看到的数据:
(10) 选择属性类型
C D ATA有倾向成为所有属性的缺省类型,因为它允许任何字符串作为属性值,然而实际上
多数属性很可能都符合N M TO K E N或N M TO K E N S类型。N M TO K E N是由一个或多个字母、数字
或某些标点符号(包括.和-)构成的序列, N M TO K E N S是由空白分隔的N M TO K E N值列表。因
此:
是有效的N M TO K E N值,另外:
是有效的N M TO K E N S值。通过使用这些类型而获得的额外的有效性是微乎其微的,但是它能
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(46)