Chinaunix首页 | 论坛 | 博客
  • 博客访问: 411708
  • 博文数量: 95
  • 博客积分: 5001
  • 博客等级: 大校
  • 技术积分: 1030
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-13 11:43
文章分类

全部博文(95)

文章存档

2007年(95)

我的朋友

分类: 系统运维

2007-05-18 23:01:08

XML 语法
XML 的结构规则反映在它的语言规则或语法上,在这里,我们将要检视一些结构规则,并看
看它们在撰写语言组件时扮演的角色。与SGML 比较起来,大多数的人应对HTML 比较熟悉,
所以,在这里我们将用HTML 来参照XML。正如您所知,HTML 和XML 都是SGML 的应用。
也正因为HTML 和XML 有相同的父语言,两者的语法也就很类似,但也并不是完全十分相似。
开始及结束标签
在HTML 文字码中,一个元素通常包含开始和结束标签。XML 不像HTML,它要求每个元素都
要有结束卷标。举例来说,HTML 的Paragraph 元素通常会包括一个开始标签、一些内容,和
一个结束标签,如下所示:

This is an HTML Paragraph element.


如果您写过很多HTML 的文字码,您可能正在想:「等一下,我从来不曾使用过Paragraph 的
结束标签!」您甚至可能不知道HTML 有Paragraph 的结束标签。因为HTML (和它的父语言
SGML)允许卷标的省略。也就是说,您可以省略结束卷标而文字码仍然正确。
HTML 是以预先定义结构为基础,这样的结构允许处理器假定某一标签应该位于文件的何处。更
明白的说,因为在HTML 中的Paragraph 是不能在另一个Paragraph 标签里面,所以当处理器
能读到一个开始的Paragraph 标签时,便假定前一个段落的结束。这种最小化的技巧在XML 中
是不被允许的,而这正是二种语言语法上最明显的不同。
空白元素卷标
即使XML 必须使用结束标签,但它却支持空白元素的呼叫。空白元素卷标有效地将没有内容元
素的开始和结束卷标结合起来,使用特殊的格式: 。请注意:跟随标签名称后的
是正斜线(/)—HTML 并不支持这样的标签。假如,我们建立一个标签叫 ,若这个
GENUS 元素没有包含任何数据,我们可能要用开始和结束标签,如下所示:

或者,我们也可以用空白元素卷标:

属性
属性提供一个方法给元素指定一个值,但却不使属性本身成为元素内容的一部分。让我们看看一
般HTML 元素以及它如何使用属性:
Microsoft Home Page
在这里,以卷标所代表的Anchor 元素包含一个名为HREF 的属性。属性的值是
。虽然,这个属性的值永远不会显示给使用者,但它却包含元素重要
的讯息,并且为Anchor 元素提供了目的地。在XML 中,name/value 的格式说明属性使用的方
法。
下面这个例子为我们范例文件的其中一种组件加入了属性:



Columbine
Aquilegia canadensis

请注意:在开始卷标中的ZONE 属性是跟着name/value 格式的。
Note
在上面的例子中,并未提到属性值的另一个重要特质是:他们能包含任何ASCII 字符,包括那
些通常保留作为卷标用的字符。因此,在当初设计时,属性的值是无法被XML 处理器所解析的,
也就是说,无法检查属性值的有效性(validate)。因此,处理器将只检查属性名称及值,看看
它们是否与DTD 中宣告的类型相符,但并不在乎值的内容是什么。
有效的(Valid)与格式正确的(Well-Formed)XML
XML 最重要的二个特征是:它能为文件提供良好的结构以及让数据具有自我描述的能力。但如
果不能强制执行那些结构和文法的规则,上述的特征将不会有很大的意义。如果您曾经建立过
SGML 文件,您应该对有效的(Valid)文件有初步了解。
如果您熟悉HTML,您也应该了解格式正确(Well-Formed)文件的概念。下面将讨论这些
名词的意义。
有效的文件
一个有效的XML 文件必须很严谨地遵从所有的规则。。此外,有效的文件也必须遵守
XML 规格书所规定的有效文件的限制(constraint)。
下面的范例是从XML 关于属性预设的有效性限制:
Validity Constraint: Required Attribute
如果预设宣告是#REQUIRED 关键词,那么所有元素的属性型态都必须在属性列表宣告中被列

处理器必须了解XML 规格书中的有效性限制,同时检查文件中任何可能违反限制的情况。如果
处理器发现了任何的错误,它必须将这些错误传送给XML 的应用程序。处理器同时也必须读取
DTD 档案,并以它所订的规则来检查XML 文件的有效性,同样地将这些错误传送给XML 的应
用程序。因为这些处理与检查要花很多的时间(更不要说频宽了),而且这些检查不一定是必需
的,因此XML 支持格式正确(well-formed)文件的概念。
格式正确的(well-formed)文件
虽然「格式正确的(well-formed)」表示有一些规则必须遵守,但这并不像那些有效性限制般
严格。在XML 规格书中说明了格式正确(well-formed)文件不是有效文件的概念。 所幸,只
有XML 处理器必须与那些「格式正确的」规则打交道。如果您是一位XML 文件的作者,当您
没有遵从那些规则时,处理器会让您知道!
Note
虽然格式正确(well-formed)文件并没有被要求严格地遵从有效性限制,但是一份有效的文件
必须符合所有的规则和有效性限制。
为什么XML 允许文件作者简单的遵从语法规则,且不用担心DTD 而来建立内容?虽然这很可能
造成混乱,但这并不是它的用意。XML 的目标之一是要使XML 文件易
于建立。而「格式正确(well-formed)」的概念,可以在没有建立DTD 的情况下,而仍能达到
文件易于建立的目标。下列是「格式正确(well-formed)」所提供的好处:
「格式正确(well-formed)」能减少客户端所需做的工作。举例来说,如果服务
器已经检查过文件的有效性,客户就不需要再作一次确认。这样,会因为客户端
不需要下载DTD 而节省下载时间,且因为XML 处理器不需要处理DTD,也节省
了处理的时间。
在许多情况下,制作DTD 或确认文件的有效性并不是必要的。举例来说,某人想
在一个小规模公司中使用XML 提供部门网站的架构,但在这个网站中,确认有效
性的功能并不需要。
除了使用DTD 之外,仍有许多其它方法提供文件的规则
根据XML 规格书,格式正确(well-formed)的文件必须符合下列各项标准:
1. 它必须符合文件的定义(如下面所描述)。
2. 它必须遵守XML 规格书中定义格式正确(well-formed)文件的限制。
3. 在文件中所有被参照的可解析实体都是「格式正确(well-formed)」。
它必须符合文件的定义 它必须符合文件的定义,也就是说:
1. 它至少包含一个元素。
2. 它包含一个根元素,也称为文件元素,而其它的元素都有适当的巢状架构
现在让我们再看看稍早所制作的范例文件:



Columbine
Aquilegia canadensis

这份文件包含PLANT 元素作为单一文件元素,而且COMMON 和BOTANICAL 元素是以巢状结
构置于文件元素中。为了要举例说明这项观念,下面的例子不是一个「格式正确的(well-formed)」
XML,因为它在根部(ROOT)包含二个元素:


Columbine
Aquilegia canadensis
COMMON 和BOTANICAL 元素都位于文件根部层级(root level),也就是说,这二个完整的
元素紧跟在前言之后。每个元素都有开始和结束标签,但没有一个元素是在另一个元素里面。
它必须遵守XML 规格书中定义格式正确(well-formed)文件的限制 XML 规格书中为「格式
正确(well-formed)」规定了某些必须遵守的限制。任何人想要开发一个XML 处理器都必须要
了解这些限制而且严格的执行他们。下面是XML 规格书中的限制范例:
Well-Formedness Constraint: Legal Character
使用字符参照的字符必须根据非结束字符(nonterminal Char)的规则。
如果字符是以「&#x」为开头,后面的数字和字母一直到遇到「;」符号,代表这个字符的值在
ISO/IEC 10646 里为十六进制。如果它是以「&#」开始,随后的数字直到「;」符号之前,代
表字符的值为十进制。
在文件中所有被参照的可解析实体都是标准的 当可解析实体被XML 处理器解析后,它就变成
文件的一部分,它们也必须将文件格式化来符合标准的限制。如果您会使用其它人所建立的外部
实体,这一点要特别注意。如果那些外部实体不符合标准的限制,它就可能在您的文件中造成错
误。
阅读(852) | 评论(0) | 转发(0) |
0

上一篇:XML 的结构

下一篇:XML 命名空间

给主人留下些什么吧!~~