• 热门标签

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

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

2. CDATA
所有的内容最终都会变成文本。当属性值为纯文本时,你可以将该属性声明为C D ATA类型。
例如:
该属性的值可以是任意长度的字符串。唯一的限制是它不能包含标记。上述声明可以有以
下实例:
只要属性值是纯文本,解析器都会将它视作有效。
3. ID 、I D R E F、I D R E F S:文档中的关系表示
毫无疑问,对于I D类型的属性,其值必然是具有唯一标识功能的名称。而且它们必须遵守
X M L名称定义的规则。特定元素的I D属性值在整个文档中必须是唯一的。它可以作为元素的唯
一标识符。每个元素至多有一个I D类型的属性。最后需要说明的是, I D类型的属性必须设置为
# I M P L I E D或# R E Q U I R E D,不能是# F I X E D或缺省的。可想而知,为I D提供缺省值,特别是固定
的缺省值是毫无意义的。这会破坏I D的唯一性。例如,在下面的声明中,社会保障号( S S N)
作为个人的唯一标识符,并与文件中的个人信息相关联:
如何使I D类型的属性发挥作用呢?当然是通过引用。我们可以利用它在两个对象之间建立
一对一的关系。I D R E F类型可以用于在文档中创建链接和交叉引用。I D R E F属性的值必须受到
与I D类型同样的约束。它们必须与文档中的某个I D属性具有相同的值。I D R E F值不能指向文档
中不存在的I D(但是除此之外还有其他方法,我们将在第8章介绍)。在应用程序中,我们通过
第3章文档类型定义使用63 下载
I D和I D R E F实现交叉引用,而不必多次重复整个元素。如果文档中包含上述声明,可以在D T D
中写入以下声明:
我们很容易想到,i d属性是指P e r s o n中的S S N属性。则文档中可以写入以下代码:
程序清单3 - 8
通过交叉引用, C u s t o m e r可以写作具有I D R E F属性的空元素,而不必包含整个P e r s o n元素。
当我们需要P e r s o n信息时,由于P e r s o n元素的S S N属性与C u s t o m e r的i d属性具有相同的值,因此
应用程序能够通过i d找到P e r s o n元素。
有时,我们希望将一个元素与其他多个元素相关联。这就要依靠I D R E F S类型。它能够建立
一对多的关系。这类属性的值是一系列以空格分隔的I D值。其中每个I D必须满足对I D类型的约
束,当然它们必须与文档中的I D属性值相匹配。
以上代码段声明了一个空元素,它定义了项目组与成员之间的一对多包含关系。M e m b e r s属
性通过引用P e r s o n元素列举出项目组成员的标识, P e r s o n元素是在D T D的其他位置声明的,它具
有I D类型的属性。例如:
以上代码表示的项目组由三个人构成,他们的社会保障号分别是: 111 - 2 2 - 3 3 3 3、2 2 2 - 11 -
4 4 4 4和1 2 3 - 4 5 - 6 7 8 9。
利用I D、I D R E F和I D R E F S,我们可以表示关系数据库中常见的关系。如果你将X M L作为本
地数据库与专用数据模式之间的转换工具,你会深刻体会到这几种类型的价值。
4. ENTITY、E N T I T I E S:可替换的内容
实体可以用于属性声明中,它能够重用公共的结构,提高代码效率。对于一个可能多次出
现的结构,你可以声明代表该结构的实体,然后通过引用实体实现对结构的调用。另外,实体
中可以包含未解析内容,并作为有效的属性值。通过这种方式,文档创作者可以引用各种类型
的数据,而不仅仅是X M L标记。如果你有一个图形文件,并希望将它作为图解,可以借助实体
将它插入文档。为此,首先将属性类型声明为E N T I T Y:
在D T D中,还要声明实体:
64使用XML 高级编程
下载
N D ATA(表示法数据)关键字说明实体的数据有相应的n o t a t i o n类型(参见后面对
NOTATION类型的讨论)。
而后,在X M L文档中,我们可以在属性中引用图像:
以上代码将G I F文件s a l e s _ c h a r t . g i f与S a l e s R e s u l t元素相关联。
对于经常要重用的实体,这种方法非常值得推崇。例如,在我们所举的例子中,每月只
需修改s a l e s _ c h a r t . g i f文件,就可以重用它。但是,假如实体的值需要频繁修改,这种方法
就不可取了。
为了将E N T I T Y作为属性类型,你需要执行四个步骤。前三个步骤都是在D T D(外部D T D或
内部子集)中进行声明。第四个步骤涉及特定的文档实例。我们将这四个步骤总结如下:
• 声明一个表示法(我们很快就会介绍有关内容)。
• 声明一个或多个实体,以便在属性中使用。
• 为元素声明类型为E N T I T Y的属性。
• 在文档中创建元素类型实例,将实体名称作为属性值。
正如我们能够将多个I D R E F值作为单一的属性值( I D R E F S),实体也可以有类似的特性。
这就是E N T I T I E S类型,它与I D R E F S具有类似的效果。属性值中的每个名称必须符合E N T I T Y
类型的规则,实体名称之间以空格分隔。因此,我们有以下代码(我们暂时省略表示法声
明):
程序清单3 - 9
我们关于事故现场的报告有一个A c c i d e n t S c e n e元素,其中包含现场、汽车和受害者的照片。
5. NMTO K E N、N M TO K E N S:名称记号
某些情况下,你可能希望将属性值作为离散的记号,而不是文本。为此我们可以使用枚举
类型(稍后即将讨论该类型),但是,假如我们希望值列表能够无限扩展呢?这就需要依靠X M L
中称为名称记号( name token)的类型。它在D T D中缩写为N M TO K E N。N M TO K E N类型必须
遵守元素名称的命名规则,但是其中一项限制除外。它们只能包含字母、数字、冒号、句点和
连字符。然而,与元素和属性名称不同的是, N M TO K E N的第一个字符可以是任意字符。下面
的代码说明了如何声明N M TO K E N属性:
第3章文档类型定义使用65 下载
程序清单3 - 1 0
上述代码表示元素E m p l o y e e有一个名为s e c u r i t y _ l e v e l的属性,其值符合X M L名称记号的规
则。我们可以用它来控制对机密文档的访问。由于定义属性列表时使用了N M TO K E N,而不是
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(27)