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

XML高级编程上(43)

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin 点击:
  
的方法还有:在单词之间使用下划线,使用c a m e l C a s e表示法(第二个单词的首字母大写),
但是句点表示法对于处理程序来说更有意义。
• 使用能说明含义的名称作为元素名称,用属性表示数据类型,例如: < B i l l i n g A d d r e s s
t y p e = " A d d r e s s " >。这意味着应用程序仍然可以获得数据类型。实际上,由于每个
B i l l i n g A d d r e s s都是一个A d d r e s s,因此每个实例不必都包含t y p e属性,你可以在D T D中定
义F I X E D的属性值。然而,这种方法不能在D T D中自动定义结构化规则,说明所有
第4章数据建模与XML使用99 下载
t y p e = " A d d r e s s "的元素符合相同的样式。
• 采用完全相反的方法:使用数据类型作为元素名称,用属性表示元素扮演的角色,例如:
<Address role="Billing">。从编写D T D的角度看,这种方法更好,虽然它仍然存在局限性:
现在,你的确能够定义地址的规则,但是不能说明每个客户必须有一个帐单地址( B i l l i n g
A d d r e s s),而前一种方法能够做到这一点。
• 使用嵌套的元素层:
从理论角度讲,这可能是目前为止最好的方法:你能够定义C u s t o m e r必须包含一个
B i l l i n g A d d r e s s,B i l l i n g A d d r e s s必须包含一个A d d r e s s(且不能含有其他元素),此处的A d d r e s s与
文档中出现的其他A d d r e s s将遵循相同的规则。唯一的缺陷是,如果你对于模型中的每个特性都
严格应用这个规则,结果将产生大量标记。考虑到D T D的数据类型验证功能是相当有限的,因
此这种方法的前景也不太光明。
(6) 二进制数据
并不是对象的所有属性都能够用字符串表示:多媒体数据,特别是二进制数据就是例外。
在X M L设计中,如何表示图形等二进制数据呢?
主要有两种方法:二进制对象可以是内部的或者外部的。内部的意味着它们表示为X M L数
据流的一部分,外部的意味着它们位于独立的文件中。
对于内部存储,大多数人使用B a s e 6 4编码。这种编码技术将每个二进制数字序列编码为一
个A S C I I字符。它非常适于X M L,因为A S C I I字符通常不会与在X M L中有特殊含义的标记序列
(例如:“<”和“ ] ] >”)冲突。这意味着数据中不会偶然出现定界符。当然,二进制数据与
B a s e 6 4字符串之间的转换工作应该完全由应用程序承担。
对于外部存储,“纯X M L”方式是使用外部未解析实体和表示法。例如,为了包含对图形文
件p i c t u r e 1 . g i f的引用,你应该编写如下D T D(通常在内部子集中):
其中, g i f e d i t o r. e x e代表能够处理这种采用特殊格式的数据的应用程序的名称。实际上,除
非选择的X M L工具集有其他定义,否则它就用于唯一地标识一种格式。对未解析实体的引用是
作为E N T I T Y类型的属性的值出现的,因此D T D将包含以下声明:
最后,在文档中你希望图形出现的位置,通过未解析实体引用调用它,例如:
需要注意的是,实体引用中不包含“ &”:解析器知道这是一个实体引用,因为它已经在
D T D的AT T L I S T声明中进行了适当的声明。
100使用XML 高级编程
下载
最后,如果你认为上述方式过于繁琐,可以仿照H T M L使用U R L链接:
对于X M L解析器来说,这仅仅是一个普通的C D ATA属性,但是在应用程序级,你可以将它
解释为指向G I F文件的U R L。
需要强调的是,在我们介绍的技术中,虽然只有一种技术(未解析实体和表示法)使用了
特殊的X M L机制处理二进制数据,但并不意味着这是唯一被认可的方法:我们提到的其他技术
也同样可行。
如果你的主要目标是将X M L翻译为H T M L,以便在浏览器中显示,基于U R L链接的方法到
目前为止是最简单的。如果你在应用程序之间暂时性地传送数据,使用基于B a s e 6 4编码的内部
对象可能是最有效的,因为它能够避免与交叉引用的完整性相关的所有问题,例如:链接对象
更新后怎么办。
当X L i n k被标准化和实现之后,就有可能在X M L中嵌入某些二进制数据,例如:图形,它
将出现在源文档中。我们将在第8章讨论XLink。
5. 使用X M L实体
在对如何将信息模型转化为X M L设计的讨论中,我们一直未说明如何使用X M L实体。
实际上,这没什么值得惊讶的,因为在X M L中实体被认为是物理文档结构的一部分,而不
属于逻辑结构。实体引用应该被认为实体被内嵌在引用出现的位置。
然而,实体在逻辑上有一些用途。将文档体中的部分内容放入外部实体最主要的好处在于
它使得这部分能够独立于文档的其余内容而独立更新。对于那些与文档主体有着不同更新周期
或更新权限的文本或其他文档部件,这种方式非常有价值。这种控制能力比由共享公共内容而
产生的空间节省更加重要。对于一个复杂的D T D,如果它的各个部分分别由不同的人控制,这
种方法也同样有效。
我们在讨论信息建模时曾经提到信息所有者和信息生存周期的问题。在决定如何将文档分
割为物理实体时,或许应该考虑信息模型的这些因素。
4.3 模式语言和表示法
在本章的最后一部分,我们将研究如何以书面形式或电子形式表示文档的设计,使得人类
用户和软件都能够访问它。我们将介绍两种主要的模式表示法: D T D,以及各种X M L模式建议。
我们首先阐述一下我们的目标:我们希望获得什么?
4.3.1 模式的作用
在数据库和文档领域,模式这一概念的提出已经有许多年的历史了—它或许是这两个领
域少得可怜的几个共同点之一!模式的正式作用是定义所有可能的有效的文档集合;或者从反
面说,它的作用是定义约束,文档除了遵循X M L规范之外,还必须满足这些约束,才能被认为
是有意义的。
在此,我们必须谨慎使用“有效性( v a l i d i t y)”一词。在X M L标准中,“有效”意味着一些
 
中国航空网 www.aero.cn
民航翻译 www.aviation.cn
本文链接地址:XML高级编程上(43)
 
------分隔线----------------------------