• 热门标签

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

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

第2章XML 语法使用25
下载
素是这个树中其他所有元素的父元素,而且它可能不包含在其他任何元素当中。由于文档根和
文档元素并不是一回事,所以最好不要把文档元素看作是“根元素”(即使它是子元素树的根)。
图2 - 3显示了任何X M L数据对象中最大的文档树的结构。
图2 - 4显示了上一节关于“ t e x t f i l e”的例子所隐含的文档树结构。
每个X M L文档的文档根也是使用D T D或模式定义的文档描述的附属品(你将在第3章和第7
章了解到更多信息)。
任何格式正规的X M L文档都必须由形成一个简单的层次树的元素组成,其中有一个被称
作“文档根”的单个根节点。它包含第二层的元素树,这个树也存在一个被称作“文档
元素”的根节点。
下面我们看一看文档主体中的元素是如何安排的。
2.3.6 子元素
X M L文档中其他所有元素都是文档元素的后代(“孩
子”)。在前面的文本文件例子中,文档元素是< t e x t f i l e >元素,
而< l i n e >和< E O F >元素都是它的子元素。
图2 - 5所示的就是前一个“ t e x t f i l e”例子中隐含的元素
树:
元素树和其中的父-子关系是X M L的一个非常重要的特
性。
任何元素类型只能包含四种内容中的一种。如果元素类
型只允许包含其他元素或标记,而不能包含字符数据,那就
是说它包含元素内容。可能包含字符数据和其他元素的元素
类型被认为是可以包含混合内容。混合内容的一种子集就是
只包含字符数据的元素,我们习惯地称它为“字符内容”。最
后,“空元素”就是不包含任何内容的元素,虽然空元素标记
可能包含属性(这一点稍后我们将提到)。
26使用XML 高级编程
下载
图2-3 图2-4
图2-5
文档根序言
元素树
文档元素文档根文档元素元素树
尾声
2.3.7 元素嵌套
X M L对元素有一种非常重要的要求—它们必须正确地嵌套。对现实世界的对象的分析会
有助于解释“正确嵌套”的含义。实际上,我们甚至可以说X M L元素是任何必需遵守它们的现
实来源的规则的单词。
让我们来看一看本书传递到读者手中的整个过程。完成印刷后,本书会和其他2 3本书打包
到一个盒子中。两个盒子会被封装到一个纸箱中,许多纸箱会被装入一辆卡车然后运送到书店
中。整个过程可以用以下X M L元素表示:
程序清单2 - 3
在上面的例子中,缩排只是为了突出这些嵌套元素的层次结构,为了简单起见也省略了许
多对书和纸箱的描述。
现实世界中的盒子能够包容整本书,但不可能出现书的某些部分在盒子中,而其他部分在
外面的情况。同样,一本书也只能放在一个盒子中,不可能一部分在一个盒子,其他部分在另
一个盒子(当然,我们要恳求大家不要把书撕成两半)。此外,盒子必需放在纸箱中,而纸箱必
需顺序摆放在卡车里(请不要打开门把它们扔到大街上)。当然, X M L元素也必须遵守这些现实
世界包容关系的基本法则。
本例中隐含的层次树参见图2 - 6。
不正确的嵌套
在元素结构的问题上, H T M L和许多字处理格式几乎都没有X M L那么严格的要求。下面是
最常见的H T M L标记重叠的例子,它可以在大多数浏览器中使用,但在X M L中却是非法的:
第2章XML 语法使用27
下载
图2-6
大多数H T M L浏览器在显示这一内容时没有任何困难,但不同的浏览器会有不同的处理方式
(参见图2 - 7)。
图2-7
对于微不足道的文本格式来说,这种情况倒是无伤大碍,但是如果这些标记要描述的是现
实世界中的内容,例如姓名和地址,这种重叠就会造成混乱,甚至更糟。想象一下我们需要解
释下面的一段内容(非法的X M L格式):
这个例子中所隐含的树结构实际如下:
28使用XML 高级编程
下载
由于标记没有正确地嵌套,所以根本形成不了简单的元素层次树。中间的元素类型并没有
被定义而且并没有真正存在,它只是一个指明两个被正确定义的元素类型的交叉点的占位符。
虽然集合理论和非层次树肯定允许我们使用这类结构,但对于真正的编程实现来说这实在是一
场噩梦。
由于没有办法区分明确的或模糊的重叠,而且对由这类重叠生成的树操作起来也比较复杂。
所以X M L只是简单地禁止任何重叠标记。在第一次遇到没有被正确定义的嵌套标记时, X M L解
析器必需报告一个“ not well-formed(非格式正规的)”错误,而且通常情况下会退出处理并报
告一个“致命”错误(在本章后面关于解析器的部分可以了解更多关于致命错误的信息)。
H T M L / S G M L :
H T M L浏览器通常甚至正式接受不完整的标记,而S G M L工具即使遇到错误也经常试图继
续处理文档。但从设计的角度看,XML不允许这样的行为存在。
在我们开始讨论元素类型的属性前,我们先要说一说X M L中的字符串。
2.3.8 字符串
字符串(string literal)主要用在属性值、内部实体和外部标识符中。X M L都使用单引号(')
或双引号(")作为一对分隔符将其中的字符串包围起来。对于这些字符串的一个限制是用于分
隔符的字符不能够出现在字符串中—如果字符串中包含单引号,分隔符就必须使用双引号,
反之亦然。如果两个字符都必须出现在字符串中,用在字符串中(同时也用作分隔符)的字符
必需用适当的实体引用顶替( & a p o s ;或者& q u o t ;,二者我们都会在本章后面的2 . 6节“字符引用
和实体引用”中讨论)。
下面是一些合法的字符串表述:
下面则是一些不合法的字符串表述:
从技术的角度讲,根据X M L规范,字符串分隔符之间的文本是文档字符数据的一部分,在
讨论属性之前,我们先看一看它所包含的意义。
2.4 字符数据
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(12)