• 热门标签

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

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

定义这些D T D都能够共享的外部参数实体。
• 可以为所有文档类型使用相同的D T D,但是每一部分使用不同的顶级元素标记。D T D没有
规定哪个元素应该作为文档元素,因此可以在同一D T D中定义几个文档类型。通过这种方
式,各个文档类型之间可以方便地互相引用。
D T D本身不一定是一个孤立的实体;它可以通过外部参数实体引用其他D T D中的定义,或
者通过条件部分进行参数化,因此它实际上能够变得非常灵活。遗憾的是,这同时也意味着复
杂性:组织机构常常会发现由于某个D T D过于复杂,而导致其他人无法理解它。
无论选择哪种方法,都应该尽量保证不同文档类型的通用性。这意味着要将名称和地址等
公共部件标准化,将元素和属性的命名规则标准化,将消息的时间标签和序号等重要数据标准
化。
本章稍后将进一步讨论D T D的设计。
4.2.2 将信息模型映射到XML
在本节中,我们将详细介绍如何将信息模型的不同部分映射到X M L文档结构。
1. 表示对象类型
通常,信息模型中的对象类型将转换为X M L结构中的元素类型。
你可以将对象类型名称作为元素名称,或者如果对文档占用的空间很在意,可以采用对象
类型名称的缩写。大多数人都喜欢给元素标记使用短名称,这不仅仅是为了节省空间,而且因
为它能够增强X M L的可读性:或许它能够避免人们将过多的注意力集中于标记,而忽视了真正
的内容。
对象类型是类型层次的一部分,你能够选择从哪一层开始建立X M L元素。举例来说,如果
d e p o s i t是p a y m e n t的子类,可以将< d e p o s i t >作为元素标记;或者将< p a y m e n t >作为元素标记,并
通过其他方式说明这是一个d e p o s i t,或许可以借助属性,如: <payment type="deposit">。
使用最特殊的类型( d e p o s i t)的优越性体现在D T D能够更精确地定义与该元素相关的属性
和子元素。使用更通用的类型( p a y m e n t)的优越性体现在它从一定程度上简化了应用程序代码
的编写,你不必关心它到底是哪种类型的p a y m e n t。
永远记住,设计数据结构时不要单纯为了程序员编写第一个应用程序方便。因为当这个程
序寿终正寝后,数据结构仍然会存在很长时间。
2. 表示关系
模型中的某些关系可以利用X M L文档结构中的元素嵌套表示。显然,“包含”关系可以通过
这种方式表示,例如: < f o o t n o t e >元素可以嵌套在< c h a p t e r >元素中, < h o t e l >元素可以嵌套在
< r e s o r t >元素中。
第4章数据建模与XML使用93 下载
毫无疑问,一个元素只能被一个父元素包含,因此必须采用其他方式处理模型中其余类型
的关系。实际上,这意味着某种链接。
在X M L中,有几种表示从一个元素到另一个元素的链接的方法:
• 可以使用I D和I D R E F属性。I D属性包含的值能够在文档中唯一标识元素; I D R E F属性的值
必须与文档中某个元素的I D相同。因此,I D可以作为关系数据库中的主关键字, I D R E F作
为外部关键字。另外,不要忘记I D R E F S数据类型,关系数据库中没有直接与之对应的结
构: I D R E F S包含一组以空格分隔的I D R E F值,因此它可以作为一对多关系的“一”端,
或者多对多关系的任何一端。
• 可以使用X P o i n t e r引用。它与H T M L中我们熟悉的H R E F属性等价。可以通过X P o i n t e r值引
用同一文档或其他文档中的元素。
• 可以在X M L文档中使用应用程序定义的主关键字和外部关键字,而不对它们进行特殊声明。
应用程序知道这些值是用于表示关系的,而X M L软件会将它们视作普通数据。
以上三种方法各有所长。使用I D / I D R E F的主要优势在于X M L解析器能够帮助你进行文档的
有效性验证。遗憾的是,标准的D O M接口并不提供根据I D寻找元素的方法,但是许多D O M实现
都通过专有的接口弥补了这一缺陷,例如M i c r o s o f t提供了n o d e F r o m I D()方法。X S LT也提供了
使用I D值的机制,但是通过将I D值作为关键字访问元素并不比通过非I D值访问元素更加有效,
因为它不支持执行更高级的操作。使用I D还有其他局限性,例如,它们在整个文档中必须是唯
一的(仅仅保证在一个元素类型中的唯一性是不行的),每个元素只能有一个I D属性,它们必须
遵守X M L名称的语法规范(这意味着“ 2 3 4”、“I 1 8 / 2 9 6”和“ABC 123”都不是有效的I D)。因
此,这种方法不占有绝对优势。
在下面的例子中,使用I D是非常合适的。在团体旅游的旅行计划中,有可选的活动和游览
项目,但是旅游团中的每个人并非都有相同的选择。例如,父亲母亲要去娱乐场所,而小孩要
去动物园。在旅行计划中,我们将通过以下方式表述这种情况:每名游客都有一个I D值,在游
览项目中,利用I D R E F S字段列出所有参加该项目的游客,具体代码如下:
程序清单4 - 2
94使用XML 高级编程
下载
在以上代码中,我们采用了单向链接—从游览项目到游客。当然,我们也可以使用反向
链接,在< t r a v e l e r >元素中设置游览项目属性,或者可以使用双向链接。通常,我尽量避免双向
链接,因为它产生的唯一结果就是必须检查一致性,并确定当出现不吻合的情况时该如何处理。
如果决定使用单向链接,无论哪个方向都可以。对于一对多关系,你会本能地在“多”端使用
I D R E F S属性,因为在关系型表中就是这样处理外部关键字的,但是在“一”端使用I D R E F S属
性也未尝不可。
X P o i n t e r引用比I D / I D R E F更加灵活,然而遗憾的是它尚未完全标准化,而且未被广泛实现。
令人欣慰的是这种局面即将得到改善—X P a t h标准的制定工作接近尾声,它已经成为W 3 C建议,
它将作为以前的X P o i n t e r语法的替代品。X P o i n t e r的优势在于它允许从一个文档到另一个文档的
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(40)