注册 | 登录
收藏 | 帮助
热门文章
编辑推荐
相关文章  
上网要当心!HTML文件也能格式化
为imail和Mdaemon设计Webmail---
qmail+vpopmail+mysql+qmailadmi
邮件列表黄金搭档—Qmail+Ezmlm
XML文件导入SQL Server 2000
将XML文件导入SQL Server 2000
SQL Server和XML的集成
SQL Server XML 和 Web 应用体系
深入探讨SQL Server 2000对XML的
SQL Server 2000 XML 概述
您现在的位置: 顶尖设计 >> IT学院 >> 编程开发 >> XML >> 文章正文
XML1.0 中文文档(第二版)---2. 文件
作者:译者:裘强 (qqiu@yeah.net)  来源:http://lightning.prohosting.co  点击:  更新:2006-12-19
简介:
2. 文件 2.1 格式正确的 XML 文件 2.2 字符 2.3 通用语法成分 2.4 字符数据和标记 2.5 注释 2.6 处理指令 2.7 CDATA 段 2.8 序言和文件类型声明 2.9 独立文件声明 2.10 空白处理 2.11 行尾处理 2.12 语言标识

[定义:如果一个数据对象满足本规范中格式正确的之定义时,它是一个 XML 文件。一个格式正确的 XML 文件可以更进一步是有效的,如果它满足某些进一步的约束的话。]

每一个 XML 文件都有逻辑和物理结构。物理上而言,文件由称为实体的单元组成。一个实体可以引用(refer)其他实体,将它们包含在文件中。文件开始于"根(root)"或文件实体。逻辑上而言,文件由声明,元素,注释,字符引用和处理指令组成,所有这些都在文件中用显式标记指明。逻辑和物理结构必须如"4.3.2 格式正确的已析实体"中所描述的那样严格地嵌套。

2.1 格式正确的 XML 文件(Well-Formed XML Documents)

[定义:一个文本对象是一个格式正确的 XML 文件如果它满足:]

  1. 作为一个整体,它匹配 document 产生式。
  2. 它满足本规范中定义的所有格式正确性约束。
  3. 此文件中直接或间接引用的每一个已析实体都是格式正确的
文件
[1] document ::= prolog element Misc*

匹配 document 产生式意味着:

  1. 它包含一个或多个元素
  2. [定义:有且仅有一个称为根(root)或文件元素的元素,它不出现在其他任何元素的内容(content)中。] 对于其他所有元素,如果起始标签在另一个元素的内容中,则其结束标签也在同一元素的内容中。换一个更简单的说法,以起始标签和结束标签为界的各个元素,必须严格地嵌套。

[定义:这样做的结果是,对于每一个非根的元素 C,文件中另有一个元素 PCP 的内容中,而不在其他任何被 P 所包含的元素的内容中。P 被称为 C父元素(parent),而 C 被称为 P子元素(child)。]

2.2 字符

[定义:一个已析实体包含文本(text),文本是一个字符(character)序列,可以表示标记或字符数据。] [定义:一个字符是 ISO/IEC 10646 [ISO/IEC 10646](或 [ISO/IEC 10646-2000])中定义的文本最小单元。合法的字符包括制表符,回车,换行以及 Unicode 和 ISO/IEC 10646 中定义的合法字符。在制定本文档时,在附录 A.1 正式参考文献中引用的标准都是当时的最新版本,在这些标准的增补版或新版中可能会加入新的字符。因此,XML 处理器必须能接受产生式 Char 中所定义范围内的任意字符。不提倡使用 [Unicode] 6.8 节(或 [Unicode3] 3.6 节 D21 )中定义的"兼容字符(compatibility characters)"。]

字符范围
[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* 除了代用块(surrogate block),FFFE 和 FFFF 以外的任意 Unicode 字符。*/

将字符代码编码成位模式的机制各个实体间可能会有所不同。所有的 XML 处理器必须接受 10646 中的 UTF-8 和 UTF-16 编码;用于指出所用编码或指定使用其他编码的机制在后面的"4.3.3 实体中的字符编码"中讨论。

2.3 通用语法成分

本节中定义了一些在文法中广泛使用的符号。

S(空白)包括一个或多个空格字符(#x20),回车,换行和制表符。

空白
[3] S ::= (#x20 | #x9 | #xD | #xA)+

为方便起见,字符被分为字母,数字和其他字符三类。字母可以是字母表中的字母,或是一个音节基字符(syllabic base character),也可以是一个表意字符。在"B. 字符的分类"中给出了每一类字符的完整定义。

[定义:名字(name)是以字母或某些标点符号开头的记号,后跟字母,数字,连字符,下划线,冒号或句号,这些符号统称为命名字符(name character)。] 以 "xml" 或其他任何匹配 (('X'|'x') ('M'|'m') ('L'|'l')) 的字符串开头的名字,被保留用于本规范的此版本或后续版本的标准化。

注:

建议 XML 中的名字空间 [XML Names] 中赋予了包含冒号的名字某种含义。因此除非用于名字空间,XML 文件作者不应该在 XML 名字中使用冒号,但 XML 处理器应该接受冒号作为一个命名字符。

Nmtoken(名字记号,name token)是任何命名字符的混合体。

名字和记号
[4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender [5] Name ::= (Letter | '_' | ':') (NameChar)* [6] Names ::= Name (S Name)* [7] Nmtoken ::= (NameChar)+ [8] Nmtokens ::= Nmtoken (S Nmtoken)*

常量数据是任何用引号括起的字符串,不包括用作定界符的引号。常量用于指明内部实体的内容(EntityValue),属性值(AttValue),以及外部标识符(SystemLiteral)。注意,对 SystemLiteral 的语法分析可以不扫描标记。

常量
[9] EntityValue ::= '"' ([^%&"] | PEReference | Reference)* '"' | "'" ([^%&'] | PEReference | Reference)* "'" [10] AttValue ::= '"' ([^<&"] | Reference)* '"' | "'" ([^<&'] | Reference)* "'" [11] SystemLiteral ::= ('"' [^"]* '"') | ("'" [^']* "'") [12] PubidLiteral ::= '"' PubidChar* '"' | "'" (PubidChar - "'")* "'" [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]

注:

虽然产生式 EntityValue 允许定义只包含单个 < 的实体(如,),但是强烈建议避免这种用法,因为对此实体的任何引用都会引起一个格式正确性错误。

2.4 字符数据和标记

文本字符数据和标记混合构成。[定义:标记包括起始标签结束标签空元素标签实体引用字符引用注释CDATA 段定界符,文件类型声明处理指令XML 声明文本声明,以及任何在文件实体顶层的空白(即,在文件元素之外且不在任何其他的标记中)。]

[定义:其他所有非标记的文本组成文件的字符数据。]

"and"号(&)和左尖括号(<)只有作为标记定界符,或在注释处理指令,或 CDATA 段中时才能以常量形式出现。如果在其他地方需要用到这两个字符,它们必须用数值式字符引用转义或分别用字符串"&"和"<"表示。右尖括号(>)可以用">"表示,而当它在内容中的字符串"]]>"中出现,但此字符串不表示一个 CDATA 段的结束时,出于兼容性考虑,必须用">"或一个字符引用转义得到。

在一个元素的内容中,字符数据可以是不包括任何标记的起始定界符的任意字符串。在一个 CDATA 段中,字符数据可以是不包括 CDATA 段结束定界符"]]>"的任意字符串。

为了允许在属性值中包含单引号和双引号,省略符或称单引号(')可以被表示为"&apos;",而双引号(")可以被表示为"""。

字符数据
[14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)

2.5 注释

[定义:注释可以在其他标记之外的文件中的任何位置出现。另外,它们可以在文件类型声明中文法允许的地方出现。它们不是文件字符数据的一部分,XML 处理器可以,但不是必须,允许一个应用检索注释的文本。出于兼容性考虑,字符串"--"(双连字符)不能在注释中出现。] 注释中的参数实体不被识别。

注释
[15] Comment ::= ''

注释的一个例子:

注意,此文法不允许注释以 ---> 结尾。下面的例子不是格式正确的。

2.6 处理指令

[定义:处理指令(PI)允许文件中包含由应用来处理的指令。]

处理指令
[16] PI ::= 'S (Char* - (Char* '?>' Char*)))? '?>' [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))

PI 不是文件字符数据的一部分,但必须传递给应用。PI 以用于指示传递给哪个应用的目标(PITarget)开头。目标名字 "XML","xml",等等,保留用于本规范的此版本或后续版本的标准化。XML 记法机制可以用于 PI 目标的形式化声明。参数实体在处理指令中不被识别。

2.7 CDATA 段

[定义:CDATA 段可以出现在字符数据可以出现的任何地方,它们用于转义包含会被识别为标记的字符串的文本块。CDATA 段以字符串 "" 开始,以字符串 "]]>" 结束:]

CDATA 段
[18] CDSect ::= CDStart CData CDEnd [19] CDStart ::= ' [20] CData ::= (Char* - (Char* ']]>' Char*)) [21] CDEnd ::= ']]>'

在一个 CDATA 段内,只有 CDEn

[1] [2] [3] 下一页






  • 上一篇文章:
  • 下一篇文章:
  • 分享此文:该页面添加到 Mister Wong 添加到雅虎Yahoo!收藏 Add to:Del.icio.us Post to Furl Digg this 添加到Google书签 reddit spurl blogmarks 365Key 评论  收藏  分享  打印
     我来说两句
    姓名:       验证码:   
    主页: 
    评分: 1分 2分 3分 4分 5分
    本频道近期热评文章:
      关于我们 | 联系我们 | 站点地图 | 广告投放 | 友情链接 | 在线留言 | 版权申明
    版权所有 © 2004-2007 顶尖设计(bobd.cn)
    未经授权禁止转载,摘编,复制本站内容或建立镜像. 沪ICP备07504942号 
    网络110
    报警服务