当未析实体名字作为记号在声明为ENTITY或ENTITIES类型的属性的值中出现时,进行验证的处理器必须将此实体和它的相关记法的系统和公共(如果有的话)标识符通知给应用。
4.4.7 不处理(Bypassed)
当实体声明内一个普通实体引用出现在EntityValue中时,它不被处理,保持不变。 4.4.8 作为PE被包含(Included as PE)
和外部已析实体一样,参数实体只需在进行验证时被包含。当参数实体引用在DTD中被识别并被包含时,它的置换文本被前后各加上一个空格字符;其目的在于强制参数实体的置换文本包含整数个DTD中的语法记号。
4.5 内部实体置换文本的构建(Construction of Internal Entity)
在 讨论内部实体的处理时,区分两种形式的实体值是有帮助的。常量实体值(literal entity value)是实际出现在实体声明中用引号扩起的字 符串。对应于非终结符EntityValue。置换文本(replacement text)是置换了字符引用和参数实体引用后的实体内容。
在 内部实体声明(EntityValue)中给出的常量实体值可以包括字符引用,参数实体引用和普通实体引用。这些引用必须被整个包含于常量实体值中。如前 述方式被包含的实际置换文本必须包含所有被引用的参数实体的置换文本,同时所有被引用的字符必须在常量实体值中字符引用所在位置被包含。但普通实体的引用 必须保持不变,不被展开。例如,如果有以下的声明:
?nbsp;1947 蒬itions Gallimard. &rights;
一旦引用\出现在文件的内容或属性值中时,普通实体引用\应该被展开。
这些简单的规则将可能会有复杂的相互作用;参见\实体和字符引用的展开\中对一个难的例子的详细讨论。
4.6 预定义实体(Predefined Entities)
实体和字符引用都可以用于转义左尖括号,\号(&)和其他定界符。普通实体集合(amp,lt,gt,apos,quot)专门用于此目 的。也可以使用数值字符引用; 一旦被识别,它们立即被展开,同时它们必须被当成字符数据,因此数值字符引用\和\可以用于转义出 现在字符数据中的<和&。
不管这些实体是否被声明,所有的XML处理器必须能识别它们。出于互操作性考虑,有效的XML文件应该如其他实体一样,在使用这些实体前先声明它们。如果声明的话,这些实体必须被声明为内部实体,其置换文本是被转义的单个字符或指向这个字符的字符引用。如下所示。
注意在\和\的声明中,<和&被两次转义,这是为了满足实体置换的规范性要求。 4.7 记法声明(Notation Declarations)
记法用名字标识了未析实体的格式,具有记法属性的元素的格式以及处理指令所针对的应用的格式。 记法声明赋予记法一个名字用于实体中,属性表声明中和属性值说明中,同时也给出了一个记法的外部标识符使得XML处理器或它的客户应用可以定位能以给定记法的格式处理数据的助理应用。
记法声明
[82] NotationDecl ::= '' [83] PublicID ::= 'PUBLIC' S PubidLiteral
XML 处理器必须向应用提供任何在属性值中,属性定义中或实体声明中定义或引用的记法的名字和外部标识符。它们还可以将外部标识符解析成系统标识符,文件名,或 是应用调用相应处理器处理给定记法格式的数据的所需的其他信息。(但如果XML处理器或应用所运行的系统中没有处理XML文件声明和引用的记法的相应应用 的情况,不是一个错误。)
4.8 文件实体(Document Entity)
文件实体(document entity)是实体树的根和XML处理器的处理起点。本规范没有规定XML如何定位文件实体;与其他实体不同,文件实体没有名字,而且可以完全不带任何标识地出现在处理器的输入流中。
5. 一致性(Conformance)
5.1 进行验证和不进行验证的处理器(Validating and Non-Validating Processors) 合乎规范的XML处理器可以分为两类:进行验证的和不进行验证的。
进行验证和不进行验证的处理器都必须报告在文件实体的内容中和任何其他它们读到的已析实体中对规范性约束的违反。
进行验证的处理器必须报告违反DTD声明中所述约束的情况以及不满足本规范中给出的有效性约束的情况。要完成这一点,进行验证的XML处理器必须读取和处理整个DTD和所有在文件中引用的外部已析实体。
不进行验证的处理器只被要求检查文件实体和整个内部DTD子集的规范性。虽然它们不被要求检查文件的有效性,但它们必须处理它们读取的所有内部DTD子集中 的声明和所有参数实体,直到遇到第一个对它们没有读取的参数实体的引用;也就是说,它们必须根据这些声明中的信息规范化属性值,包含内部实体的置换文本, 并提供缺省属性值。它们在遇到第一个对它们没有读取的参数实体的引用后,不应处理其后的实体声明或属性表声明,因为此实体中包含的声明可能覆盖前面的声 明。
5.2 使用XML处理器
进行验证的处理器的行为是高度可预测的;它必须读取文件的所有部分,报告所有对规范性和有效性的违反。对一个不进行验证的处理器的要求要低一点;它不需要读取文件实体以外的任何文件部分。这对XML的处理器的用户而言可能会有两个重要的影响:
某些规范性错误,尤其是那些要求读取外部实体的,可能不会被不进行验证的处理器检测到。例子有称为声明实体,已析实体和无递归的约束,以及\处理器对实体和引用的处理\中描述为被禁止的一些情况。
取决于处理器是否读取参数和外部实体,从处理器传给应用的信息可能会有所不同。例如,不进行验证的处理器可能不规范化属性值,不包含内部实体的置换文本,或不提供缺省属性值,这些动作要求先读取外部或参数实体中的声明。
为了使不同XML处理器间的互操作有最大的可靠性,使用不进行验证的处理器的应用不应依赖于不要求这些处理器具备的动作。那些要求使用如缺省值或在外部实体中声明内部实体等功能的应用应该使用进行验证的XML处理器。
6. 记法(Notation)
本规范中XML的形式化文法用一种简单的扩展巴科斯范式(Extended Backus-Naur Form,EBNF)给出。文法中的每一条规则定义了一个符号,形式如下:
symbol ::= expression
如果符号用正则表达式定义,则它以大写字母开头,否则以小写字母开头。字符串常量(literal strings)用引号括起。
在规则右边的表达式中,以下表达式用于匹配一个或多个字符的字符串: #xN
N是一个十六进制的整数,当ISO/IEC 10646中某个字符的规范(UCS-4)代码值作为无符号二进制数与N相等时,此表达式匹配这个字符。#xN中的前导0没有意义,在相应的代码值中的前导0的个数则由所用字符编码方案决定,对XML没有意义。
[a-zA-Z], [#xN-#xN]
与其值在指定范围内的任何字符相匹配(含界,inclusive)。
[^a-z], [^#xN-#xN]
与其值在指定范围之外的任何字符相匹配。 [^abc], [^#xN#xN#xN]
与任何不在给定字符集内的字符相匹配。 \
与匹配双引号中所给字符串的常量字符串相匹配。 'string'
与匹配单引号中所给字符串的常量字符串相匹配。
这些符号可以按下列方式组合,以匹配更复杂的模式,其中A和B表示简单表达式: (expression)
expression被当成一个单元,可以向本表描述的那样进行组合。 A?
与零个或一个A相匹配,即A可选。 A B
与A后跟B的模式相匹配。 A | B
与AB之一相匹配,但不同时匹配。 A - B
与任何匹配A但不匹配B的字符串相匹配。 A+
与一个或多个A相匹配。 A*
与零个或多个A相匹配。 其他在产生式中使用的记法有: /* ... */ 注释 [ wfc:... ]
规范性约束;用名字标识一个对与某个产生式相关联的规范文件的约束。 [ vc:... ]
有效性约束;用名字标识一个对与某个产生式相关联的有效文件的约束。
附录 A. 参考文献 A.1 正式的参考文献 IANA
(Internet Assigned Numbers Authority) Official Names for Character Sets, ed. Keld Simonsen et al. See ftp://ftp.isi.edu /in-notes/iana/assignments/character-sets.
IETF RFC 1766
IETF (Internet Engineering Task Force). RFC 1766:Tags for the Identification of Languages, ed. H. Alvestrand. 1995.
ISO 639
(International Organization for Standardization). ISO 639:1988 (E). Code for the representation of names of languages. [Geneva]:International Organization for Standardization, 1988.
ISO 3166
(International Organization for Standardization). ISO 3166-1:1997 (E). Codes for the representation of names of countries and their subdivisions -- Part 1:Country codes [Geneva]:International Organization for Standardization, 1997.
ISO/IEC 10646
ISO (International Organization for Standardization). ISO/IEC 10646-1993 (E). Information technology -- Universal Multiple- Octet Coded Character Set (UCS) -- Part 1:Architecture and Basic Multilingual Plane. [Geneva]:International Organization for Standardization, 1993 (plus amendments AM 1 through AM 7).
Unicode
The Unicode Consortium. The Unicode Standard, Version 2.0. Reading, Mass.:Addison-Wesley Developers Press, 1996.
A.2 其他参考文献 Aho/Ullman
Aho, Alfred V., Ravi Sethi, and Jeffrey D. Ullman. Compilers:Principles, Techniques, and Tools. Reading:Addison- Wesley, 1986, rpt. corr. 1988.
Berners-Lee et al.
Berners-Lee, T., R. Fielding, and L. Masinter. Uniform Resource Identifiers (URI):Generic Syntax and Semantics. 1997. (Work in progress; see updates to RFC1738.)
Br黦gemann-Klein
Br黦gemann- Klein, Anne. Regular Expressions into Finite Automata. Extended abstract in I. Simon, Hrsg., LATIN 1992, S. 97-98. Springer-Verlag, Berlin 1992. Full Version in Theoretical Computer Science 120:197-213, 1993.
Br黦gemann-Klein and Wood
Br黦gemann- Klein, Anne, and Derick Wood. Deterministic Regular Languages. Universit 鋞 Freiburg, Institut f