1、xml 规范(1)Extensible Markup Language (XML) 1.0本文档是 W3C 建议 XML 1.0 的中文版,其中可能有错误和不妥之处。英文版是唯一的正式版,位于:http:/www.w3.org/TR/1998/REC-xml-19980210http:/www.w3.org/TR/REC-xml/本文档位于:http:/ ? 1998 W3C (MIT, INRIA, Keio ), All Rights Reserved. W3C liability, trademark, document use and software licensing rules
2、apply.REC-xml-19980210-cn可扩展标记语言(XML) 1.0W3C 建议 1998 年 2 月 10 日本版本:http:/www.w3.org/TR/1998/REC-xml-19980210http:/www.w3.org/TR/1998/REC-xml-19980210.xmlhttp:/www.w3.org/TR/1998/REC-xml-19980210.htmlhttp:/www.w3.org/TR/1998/REC-xml-19980210.pdfhttp:/www.w3.org/TR/1998/REC-xml-19980210.ps最新版本:http:/w
3、ww.w3.org/TR/REC-xml上一版本:http:/www.w3.org/TR/PR-xml-971208编者:Tim Bray (Textuality and Netscape) Jean Paoli (Microsoft) C. M. Sperberg-McQueen (University of Illinois at Chicago) 摘要本 文档完整地描述了可扩展标记语言(Extensible Markup Language,XML) ,它是标准通用标记语言 (Standard Generic Markup Language,SGML)的一个子集。其目的在于使得在 Web
4、上能以现有超文本标记语言 (Hypertext Markup Language,HTML) 的使用方式提供,接收和处理通用的 SGML 成为可能。XML 的设计既考虑了实现的方便 性,同时也顾及了与 SGML 和 HTML 的互操作性。本文档的状态本文档已由 W3C 组织成员和其他相关各方审阅,并已被组织理事批准为 W3C 建议。这是一个稳定的文档,可以用作参考材料,也可以作为其他文档的正式参考文献。W3C 在建议制定过程中的作用是吸引对本规范的注意并促进它的广泛使用。这能增强 Web 的功能和互操作性。本 文档规定了一种用于 World Wide Web 的语法,此语法是通过取一个业已存在并
5、已广泛使用的文本处理国际标准( 标准通用标记语言,经增补和更正的 ISO 8879:1986(E)的子集而创建的。它是 W3C XML 行动组(XML Activity)的工作成果,关于 XML 行动组的详细信息可以 在 http:/www.w3.org/XML 找到。在http:/www.w3.org/TR 可以找到现有 W3C 建议和其他技术文档的一个列表。本规范中使用了Berners-Lee 等人定义的一个术语 URI,他们正在从事的的工作将更新 IETF RFC1738和IETF RFC1808。本规范的已知错误列表可以在 http:/www.w3.org/XML/xml-199802
6、10-errata 找到。请将本文档中的错误报告给 xml-editorw3.org。可扩展标记语言(XML) 1.0目录1. 绪论1.1 开发者和开发目标1.2 术语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 语言标识3. 逻辑结构3.1 起始标签,结束标签和空元素标签3.2 元素类型声明3.2.1 元素型内容3.2.2 混合型内容3.3 属性表声明3.3.1 属性类型3.3.2 属性的缺省值3.3.3 属
7、性- 值对的规范化3.4 条件段4. 物理结构4.1 字符和实体引用4.2 实体声明4.2.1 内部实体4.2.2 外部实体4.3 已析实体4.3.1 文本声明4.3.2 规范的已析实体4.3.3 实体中的字符编码4.4 XML 处理器对实体和引用的处理4.4.1 不被识别4.4.2 被包含4.4.3 进行验证时被包含4.4.4 被禁止4.4.5 被包含在常量中4.4.6 通知4.4.7 不处理4.4.8 作为 PE 被包含4.5 内部实体置换文本的构建4.6 预定义实体4.7 记法声明4.8 文件实体5. 一致性5.1 进行验证和不进行验证的处理器5.2 使用 XML 处理器6. 记法附录A
8、. 参考文献A.1 正式参考文献A.2 其他参考文献B. 字符的分类C. XML 和 SGML(非正式)D. 实体和字符引用的展开(非正式)E. 确定型内容模型(非正式)F. 字符编码的自动检测(非正式)G. W3C XML 工作组(非正式)-1. 绪论可 扩展标记语言,缩写为 XML,描述了一类称为 XML 文件的数据对象,同时也部分地描述了处理这些数据对象的计算机程序的动作。XML 是 SGML(标准通用 标记语言ISO 8879)针对应用的一个子集,或者说是SGML 的一种受限形式。根据定义,XML 文件是合乎规范的 SGML 文件。XML 文件由称为实体的存储单元组成,实体可以包含已析
9、数据或未析数据。已析数据由字符组成,其中一些字符组成字符数据,另一些字符组成标记。标记中包含了对文 件存储格式(storage layout)和逻辑结构的描述。XML 提供了一种机制用于约束存储格式和逻辑结构。称为 XML 处理器的软件模块用于读取 XML 文件,存取其中的内容和结构。 XML 处理器被设想为是为另一个称为应用的模块作处理。本规范从 XML 处理器应如何读取 XML 数据以及应向应用提供哪些信息的这两个方面,描述了要求 XML 处理器作出的动作。1.1 开发者和开发目标XML 由 XML 工作组(原先的 SGML 编辑审查委员会)开发,此工作组由 World Wide Web
10、Consortium(W3C)在1996 年主持成立。 工作组由 Sun Microsystems 的 Jon Bosak 负责,同样由 W3C 组织的 XML SIG(Special Interest Group)(原先的 SGML 工作组) 积极参与了 XML 工作组的工作。XML 工作组的成员在附录中给 出。工作组与W3C 的联系人是 Dan Connolly。XML 的设计目标如下:XML 应该可以直接用于因特网(Internet)。XML 应该支持大量不同的应用。XML 应该与 SGML 兼容。处理 XML 文件的程序应该容易编写。XML 中的可选项应无条件地保持最少,理想状况下应该
11、为 0 个。XML 文件应该是人可以直接阅读的,应该是条理清楚的。XML 的设计应快速完成。XML 的设计应该是形式化的,简洁的。XML 文件应易于创建。XML 标记的简洁性是最后考虑的目标。本 规范与其他相关的标准一起(Unicode 和 ISO/IEC 10646 定义了字符集,Internet RFC1766 定义了语言识别 码,ISO 639 定义了语言名称代码,ISO 3166 定义了国家名称代码 ),提供了理解 XML 版本 1.0 和构建相应计算机处理程序所需的所有信息。在完整保留所有文本和法律注意事项的前提下,本版本的 XML 规范可以自由分发。1.2 术语用于描述 XML 文
12、件的术语在此规范的正文中定义。在这些定义中以及描述一个 XML 处理器的动作时,使用了下表中的术语:可以(may) :允许合乎规范的文件和 XML 处理器按所描述的方式工作,但不要求必须如此。必须(must):要求合乎规范的文件和 XML 处理器按所描述的方式工作; 否则它们出现错误。错误(error):对本规范中的规则的违反; 其结果不确定。合乎规范的软件可以检测和报告错误,并可以从中恢复。严重错误(fatal error):合乎规范的 XML 处理器必须检测到,并向应用报告的一类错误。在遇到严重错误之后,处理器可以继续处理数据以发现更多的错误并可以向应用报告这些错误。为了 支持错误的更正,
13、处理器可以向应用提供文件中未经处理的数据(字符数据和标记的混合体 )。但是,一旦检测到一个严重错误,处理器必须停止正常的处理(也就 是说,它必须停止以正常的方式向应用提供与文件逻辑结构有关的数据和信息) 。由用户选择(at user option):合乎规范的软件可以或者必须(取决于句子中的情态动词)按所描述的方式工作; 如果它满足这个条件,它必须同时提供用户一种手段,使得用户能够启用和禁用所描述的工作方式。有效性约束(validity constraint):适用于所有有效的 XML 文件的一种规则。违反有效性约束属于错误;进行验证的 XML 处理器必须,由用户选择,报告这些错误。规范性约束
14、(well-formedness constraint):适用于所有规范的 XML 文件的一种规则。违反规范性约束属于严重错误。匹配(match):(对于字符串和名字:)被比较的两个字符串或名字必须完全相同。在 ISO/IEC 10646 中有多种可能表示方式的字符(例如,既有预定义 (precomposed)形式和基字符(base)+变音符形式的字符) 只在两个字符串中的表示方式相同时才匹配。由用户选择,处理器可以将这些字符规 范成某种规范形式。不进行字符的大小写转换。( 对于文法中的字符串和规则: )如果一个字符串属于一个文法产生式产生的语言,则它匹配这个产生式。(对于内 容和内容模型:
15、)当一个元素符合“元素有效性“ 约束中的描述时,它匹配其声明.出于兼容性考虑(for compatibility):仅用于保证与 SGML 兼容的 XML 特性。出于互操作性考虑(for interoperability):是一个不具约束性的建议,目的是增加 XML 文件能被在 ISO 8879的 WebSGML 改编附件之前已有的 SGML 处理器处理的可能性2. 文件如果一个数据对象满足本规范中规范的定义时,它是一个 XML 文件。一个规范的 XML 文件可以更进一步是有效的如果它满足某些进一步的约束。每一个 XML 文件都有逻辑和物理结构。物理上而言,文件由称为实体的单元组成。一个实体可
16、以引用(refer)其他实体,将它们包含在文件中。文件开始于“根(root)“或文件实体中。逻辑上而言,文件由声明,元素,注释,字符引用和处理指令组成,所有这些都在文件中用显式标记指明。逻辑和物理结构必须 如“4.3.2 规范的已析实体“中所描述那样严格地嵌套。2.1 规范的 XML 文件(Well-Formed XML Documents)一个文本对象是一个规范的 XML 文件如果它满足:作为一个整体,它匹配 document 产生式。它满足本规范中定义的所有规范性约束。此文件中直接或间接引用的每一个已析实体都是规范的。文件1document := prolog element Misc*匹
17、配 document 产生式意味着:它包含一个或多个元素有且仅有一个称为根(root)或文件元素的元素,它不出现在其他任何元素的内容(content) 中。对于其他所有元素,如果起始标签在另一个元素的内容 中,则其结束标签也在同一元素的内容中。换一个更简单的说法,以起始标签和结束标签为界的各个元素,必须严格地嵌套。这样做的结果是,对于每一个非根的元素 C,文件中另有一个元素 P,C 在 P 的内容中,而不在其他任何被 P 所包含的元素的内容中。P 被称为 C 的父元素(parent),而 C 被称为 P 的子元素(child)。2.2 字符一 个已析实体包含文本(text),文本是一个字符(c
18、haracter)序列,可以表示标记或字符数据。一个字符是ISO/IEC 10646ISO /IEC 10646中定义的文本最小单元。合法的字符包括制表符,回车,换行以及 Unicode 和ISO/IEC 10646 中定义的合法的图形字符。不提倡使用Unicode6.8 节中定义的“兼容字符(compatibility characters)“。字符范围2 Char := #x9 | #xA | #xD | #x20-#xD7FF | #xE000-#xFFFD | #x10000-#x10FFFF /* 除 了替代块(surrogate block),FFFE 和 FFFF 以外的任意 U
19、nicode 字符。*/将字符代码编码成位模型的机制各个实体间可能会有所不同。所有的 XML 处理器必须接受 10646 中的UTF-8 和 UTF-16 编码;用于指出所用编码或指定使用其他编码的机制在后面的“4.3.3 实体中的字符编码“ 中讨论。2.3 通用语法成分本节中定义了一些在文法中广泛使用的符号。S(空白)包括一个或多个空格字符(#x20),回车,换行和制表符。空白3 S := (#x20 | #x9 | #xD | #xA)+为方便起见,字符被分为字母,数字和其他字符三类。字母可以是字母表中的字母,或是一个音节基字符(syllabic base character)后跟一个或多
20、个组合字符,也可以是一个表意字符。在 “B. 字符的分类“中给出了每一类字符的完整定义。名字(name)是以字母或某些标点符号开头的记号,后跟字母,数字,连字符,下划线,冒号或句号,这些符号统称为命名字符 (name character)。以“xml“或其他任何匹配 (X|x) (M|m) (L|l) 的字符串开头的名字,被保留用于本规范的此版本或后续版本的标准化。注意:XML 名字中的冒号被保留用于名字空间(name space)实验。它的含义有待于日后标准化,那时那些将冒号用于实验目的的文件有可能需要更新。(不保证 XML 采用的任何名字空间机制会实际采用冒号作为定界符。)实际上,这意 味
21、着除非用于名字空间实验,XML 文件作者不应该在 XML 名字中使用冒号,但 XML 处理器应该接受冒号作为一个命名字符。Nmtoken(名字记号,name token)是任何命名字符的混合体。名字和记号4 NameChar := Letter | Digit | . | - | _ | : | CombiningChar | Extender5 Name := (Letter | _ | :) (NameChar)*6 Names : = Name (S Name)*7 Nmtoken := (NameChar)+8 Nmtokens := Nmtoken (S Nmtoken)*常量数据是
22、任何用引号括起的字符串,不包括用作定界符的引号。常量用于指明内部实体的内容(EntityValue),属性值(AttValue),以及外部标识符(SystemLiteral)。注意,对 SystemLiteral 的语法分析可以不扫描标记。常量9 EntityValue := “ (%“,而双引号(“)可以被表示为“。字符数据14 CharData := 注释的一个例子:!DOCTYPE S Name (S ExternalID)? S? ( (markupdecl | PEReference | S)* S?)? VC:根 元素类型 29 markupdecl := elementdecl
23、| AttlistDecl | EntityDecl | NotationDecl | PI | Comment VC:严格的声明/PE 嵌套 WFC:内部子集中的 PE 标记声明可以全部或部分地由参数实体的置换文本组成。本规范后面的各个非终结符(elementdecl,AttlistDecl,等等) 产生式描述的是在所有的参数实体被包含(include)之后的声明。有效性约束:根元素类型(Root Element Type)文件类型声明中的 Name 必须匹配根元素的类型。有效性约束:严格的声明/PE 嵌套参数实体的置换文本必须用标记声明严格嵌套。即,如果一个标记声明(上面的 markupd
24、ecl)的第一个或最后一个字符被包含于一个参数实体引用的置换文本中,两者必须都在此置换文本中。规范性约束:内部子集中的 PE在内部 DTD 子集中,参数实体引用只能出现在标记声明可以出现的地方,而不能在标记声明内部出现。(这个约束不适用于出现在外部参数实体内的引用,也不适用于外部子集。)同 内部子集一样,外部子集和任何 DTD 中引用的外部参数实体,必须由一系列被非终结符 markupdecl 所允许的完整的标记声明组成,其中可以夹杂空白字 符或参数实体引用。但是,外部子集和外部参数实体的部分内容可以通过使用条件段(conditional section)被有条件地忽略,在内部子集中 则不允许
25、这么做。外部子集30 extSubset := TextDecl? extSubsetDecl31 extSubsetDecl := ( markupdecl | conditionalSect | PEReference | S )*外部子集和外部参数实体与内部实体不同之处还在于:在它们内,参数实体引用不仅可以出现在标记声明间,还可以出现在标记声明内。有文件类型声明的 XML 文件的例子:Hello, world!系统标识符“hello.dtd“ 给出了文件 DTD 的 URI。声明也可以如同下面这个例子一样直接(locally)给出:Hello, world!如果同时使用外部和内部子集,内
26、部子集被看成出现在外部子集之前,这意味着内部子集中的实体和属性表声明的优先级要比在外部子集中的高。2.9 独立文件声明当文件从 XML 处理器递给应用时,标记声明可以影响它的内容,属性缺省值和实体声明是其中的例子。可以作为 XML 声明成分的独立文件声明,指明了对于文件实体而言,是否存在外部的声明。独立文件声明32 SDDecl := S standalone Eq (“ (yes | no) “) | (“ (yes | no) “) VC:独立文件声明 在一个独立文件声明中,值“yes“表示对于文件实体没有外部标记声明(不论是在 DTD 外部子集中,还是在由内部实体引用的外部参数实体中)会影响从 XML 处理器传递给应用的信息。值“no“表示有或可能有这样的外