• 热门标签

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

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

• 文档的< ! D O C T Y P E >声明中包含对i t i n e r a r y. d t d的引用。(遗憾的是,大多数标准A P I都不
提供该信息。)
• 解析器使用的是应用程序认为正确的i t i n e r a r y. d t d版本(这很难做到)。
• 输入文档中的文档元素具有正确的元素类型( D T D并没有说明哪个元素应该是顶级元素,
但幸运的是,应用程序很容易进行这项检测)。
第4章数据建模与XML使用103 下载
• 输入文档的内部D T D子集没有覆盖外部D T D中关键的有效性规则。举例来说,如果外部
D T D子集包含以下定义:
则应用程序自然会认为在有效的输入文档中, < PAY M E N T >元素应该包含M E A N S属性,且
属性的值是字符串“ c h e c k”或“c r e d i t - c a r d”。但是,如果输入文档的内部D T D子集包含以下声
明:
它将覆盖外部D T D中的声明。因此, M E A N S属性可以被省略,或者取值“ c a s h”,解析器
仍然会认为输入文档有效。
(3) 编写D T D
D T D和X M L采用不同的语法,因此它不仅难读,而且更难写,它采用的定界符与S G M L完
全不同。D T D对元素和属性含义的解释作用如同用编译后的J a v a字节码说明商业过程:语法中
甚至规定有些地方不能插入注释。
市场上的D T D编辑工具能够简化D T D的编写,但是归根到底,如果想完全理解D T D,就必
须学习它的语法。D T D不仅不方便,而且结构上比较笨拙,特别是不能像解析X M L文件那样解
析D T D。
(4) DTD和命名空间
最后一个问题是D T D几乎不能与X M L命名空间配合使用。命名空间使你能够在一个文档中
混合来自多个信息模型的元素,例如在关于污染扩散程度的文档中同时使用化学公式和地理编
码。你能够选择名称的前缀,而不会改变元素的含义,例如:你可以用< G E O : L I >代表立陶宛,
用< C H E M : L I >代表锂。
D T D和命名空间的问题主要体现在两方面。首先,文档只能引用一个外部D T D。其次,通
过添加前缀给元素重命名后,将导致D T D无法识别,因此如果你确实希望将二者相结合,实际
上每次都要创建新的D T D版本。
尽管D T D存在这些局限性,但是它是目前唯一的标准,因此我们将介绍如何根据信息模型
创建D T D。
根据信息模型创建D T D
我们已经了解了如何将信息模型中的概念转化为X M L文档的设计,其中的某些决策将直接
反映在D T D中。例如,选择将对象的特性表示为元素或者属性。
但是当你真正开始编写D T D时,有些问题才能够明朗,下面我们将介绍这些问题。
虽然D T D的建模功能相当有限,但是许多功能都能够通过非常灵活的参数实体机制获得。
参数实体可以实现D T D中不同定义之间的文本共享,除此之外它还有其他用途, D T D的效率在
一定程度上取决于使用参数实体的技巧。
大多数D T D都包含两种类型的定义:元素定义和属性定义。元素定义规定了元素的内容;
属性定义规定了每个元素中能够出现的属性。我们将依次介绍这两种定义。
(1) 定义元素内容
104使用XML 高级编程
下载
D T D支持以下五种元素结构定义(参见表4 - 3)。
表4 - 3
内容模型举例
E M P T Y内容<!ELEMENT confirmed EMPTY >
A N Y内容<!ELEMENT description ANY >
元素内容<!ELEMENT payment (currency?, amount, date, mode-ofpayment?)
>
复合内容<!ELEMENT estimated-cost (#PCDATA | note)* >
P C D ATA内容<!ELEMENT color (#PCDATA) >
实际上, X M L规范仅标识了四种结构:根据语法规定, P C D ATA内容只是一种特殊的复合
内容,但是从建模的角度看,这两者有很大差别。下面让我们看看如何使用每种结构。
(2) EMPTY内容的元素
从本质上讲, E M P T Y元素代表一个布尔值:它可能出现,或者不出现。如果你希望标记特
定的预约已经被确认,可以使用空的< C O N F I R M E D / >子元素来表示。
如果打算用属性而不是子元素表示对象的特性, E M P T Y元素也是非常有用的。(注意,
E M P T Y意味着它没有子元素或文本节点:但并不表示它没有属性。)当选择这种方法时,会发
现文档中几乎所有元素都是空的:文档可能包含几千个这种形式的元素:
如果你希望构造一个特殊的文档,它仅包含一个X M L元素,且该元素没有子元素,只有许
多属性:对于某些类型的消息来说,这种结构是非常合理的。
另外,还可以使用E M P T Y元素表示枚举数据类型的值(这种方法的确不太常见)。例如,
可以编写以下代码:
G E N D E R元素的声明可以采用元素内容结构的形式指定有效值列表,例如:
(3) ANY内容的元素
在由信息模型产生的D T D中,不太可能出现A N Y选项;相反地,如果部分信息模型未知,
常常会导致D T D中出现A N Y内容的元素。实际上,它并不允许一个元素包含任何类型的子元素,
只有D T D中定义的类型才能作为子元素出现,因此它等价于列出D T D中的所有元素类型。因为
有些元素类型在此出现是没有意义的,所以这仅仅是懒惰的表现:最好使用元素内容或复合内
容,并列出在这种环境下有意义的所有元素。
(4) 元素内容的元素
元素内容定义了哪些元素可以作为被定义元素的子元素,而且定义了它们出现的顺序,是
否必须出现,以及是否允许重复。在所有选项中,元素内容使得设计者能够对有效性进行最精
确的控制。考虑以下定义:
第4章数据建模与XML使用105 下载
以上声明规定R E S O RT必须有一个名称,必须位于一个特定的国家内,它可以在一个特定的
地区,并且必须包含一个或多个旅馆。根据语法规则,子元素可以以空白分隔,但是按照习惯,
空白是没有意义的。
使用这种声明最大的缺陷是它不仅说明了能够出现的元素及出现的次数,而且隐含地规定
了元素的次序:如果D T D中包含以上声明,则当国家出现在旅游胜地的名称之前就被认为是无
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(45)