<a target="_blank" href="http://bbs.w3china.org/index.asp">更多信息请访问 W3CHINA.ORG讨论区</a>
A website dedicated to promoting the widespread deployment of W3C technologies.
A website designed to propagate information on the future of the Web.
A website ideally suited for discussions and the exchange of relevant information.
译文:
原文:
说明:
l 本文档是根据2001年10月24日发布的XML Information Set推荐标准进行翻译的。
l 译注的内容是非正式的,仅代表译者个人观点。
译者:
时间:
首次发布于2003年8月10日/最后更新于2003年8月10日
致 谢
感谢所有在文档翻译过程中给予技术指点和解答的专家,他们是:
<a target="_blank" href="http://www.w3.org/"></a>
当前版本:
<a target="_blank" href="http://www.w3.org/TR/2001/REC-xml-infoset-20011024">http://www.w3.org/TR/2001/REC-xml-infoset-20011024</a>
最新版本:
<a target="_blank" href="http://www.w3.org/TR/xml-infoset">http://www.w3.org/TR/xml-infoset</a>
上一版本:
<a target="_blank" href="http://www.w3.org/TR/2001/PR-xml-infoset-20010810">http://www.w3.org/TR/2001/PR-xml-infoset-20010810</a>
编者:
本规范为那些需要引用XML文档中的信息的规范提供了一组定义。
这一部分描述了本文档在发布时的状态。本文档可能会被其他文档所取代。本文档系列的最新状态由W3C维护。
本文档已经过 W3C 成员和其他相关方面(interested parties)的审阅,并已被W3C Director批准为 W3C推荐标准(W3C Recommendation)。本文档是稳定的(stable)。这意味着本文档可被用作参考资料或其他文档的规范性参考文献(normative reference)。W3C 制定推荐标准的任务是使之受到关注,并促使其被广泛使用。这将增强Web的功能性(functionality)与互操作性(interoperablity)。
本规范并不试图做到毫无遗漏;一个信息项(information item)或一个属性(property)是否被包括在内,主要取决于它在未来规范中的用处。本规范并没有规定XML处理器(XML processor)必须返回的信息。
信息集的创建可以通过解析XML文档的方式来进行,也可以通过调用方法的方式来进行(本规范没有描述这种方法)。参见
XML信息集没有规定或倾向于使用某个或某一类接口。本规范使用被修饰的树(modified tree)来描述XML信息集是出于简单和明了的考虑,并不表示一定要用树结构来构造XML信息集。其他类型的接口,比如(但不局限于)基于事件的(event-based)或基于查询的(query-based)接口都可以遵照本规范来提供XML文档中的信息。
对于“信息集(information set)”和“信息项(information item)”这两个术语,它们的含义类似于通常所说的“树(tree)”和“结点(node)”。尽管如此,本规范中仍将使用前面两个术语,以避免与其他一些数据模型(data model)混淆。注意:信息项与DOM中的结点(node)或XPath数据模型中的树(tree)和结点(node)没有一一对应的关系。
[namespace name]属性的值是规格化后的值;处理器不对它进行任何其它的URI转义操作。
这些属性的值不反映为获取资源而可能需要的URI转义操作,但是在下面两种情况下这些属性可能会包含转义处理后的字符:(1)这些字符是在文档中指定的;(2)这些字符是服务器在重定向时返回的。
在解析相对URI时,[base URI]属性(property)应优先于xml:base属性(attribute)被使用。因为在合成的信息集(Synthetic Infosets)中,它们可能会不一致。
有些属性有时可以取值no value或unknown[译注//注意:这里的no value和unknown仅表示抽象的含义,并不表示实际的属性值就是字符串“no value”或“unknown”。在实际应用中如何体现这两个特殊的值与具体的信息集接口(interface)有关,不同的信息集接口可能会采取不同的方式来体现这两个值]。它们分别表示该属性的值未知或该属性没有值。这两个值是相互区别的,它们与其它值也有所不同。要特别注意的是:这两个值与空字符串(empty string)、空集(empty set)以及空列表(empty list)是不同的(后三者仅表示没有成员)。本规范没有使用null做为属性值是因为:在某些领域,它(null)有着特殊的含义,而这些含义不符合这里的需要。
本规范描述了通过解析XML文档的方式得到的XML信息集。XML信息集也可以通过其他方式来构造(比如使用像DOM这样的API,或对已有的信息集进行修改)。
对应于一个真实XML文档的信息集必然在多处保持一致。比如,某个元素的[in-scope namespace]属性必然与该元素以及该元素的祖先的[namespace attributes]属性一致。但对于使用其它方法构造出的信息集,这一点未必成立。在这种情况下,该信息集没有相应的XML文档。因此,若要将其序列化(serialize),就必须解决这些不一致(比如输出所有在元素范围内有效的命名空间的声明)。
每个信息集有且仅有一个文档信息项(document information item)。信息集中的所有其他信息项都可以从文档信息项的属性以及属性的属性等等来获得。
文档信息项包含以下属性:
5. [base URI] 文档实体的基准URI。
6. [character encoding scheme] 文档实体(document entity)采用的字符编码方案的名称。
7. [standalone] 本属性表明XML文档是否是一个独立文档(standalone document)。它的值是根据XML声明(位于文档实体的首部)中的独立文档声明(在XML声明中是可选的)来设定的。如果没有独立文档声明,则该属性没有值(no value)。
8. [version] 一个字符串,表明文档遵从的XML版本号。本属性的值是根据XML声明(位于文档实体的首部,可选的)中的版本信息来设定的。如果没有XML声明,则本属性没有值(no value)。
9. [all declarations processed] 严格地说,本属性不属于文档信息集的一部分,它仅表明XML处理器是否已经读过了整个DTD。本属性的值是一个布尔量,它可能会影响信息集中的某些其他属性(在介绍这些属性时将给予说明)的取值:如果本属性的值为false,则它们的值为未知(unknown);如果本属性的值为true,则它们的值一定是未知(unknown)以外的值。
对于出现在XML文档中的每个元素(element),在信息集中都有一个相应的元素信息项(element information item)。在所有的元素信息项中,必有一个是文档信息项的[document element]属性的值。这个元素信息项对应于元素树结构的根。以该元素信息项为起点,递归地访问[children]属性,便可获得所有其余的元素信息项。
元素信息项包含下列属性:
1. [namespace name] 元素类型[译注//这里的元素指的是在XML文档中与本信息项对应的那个元素,下同。]的命名空间名(namespace name)(如果有的话)。如果元素不属于任何命名空间,则本属性没有值(no value)。
2. [local name] 元素类型名(element-type name)的内部名(local part)。本属性不包括命名空间前缀(namespace prefix)和冒号。
3. [prefix] 元素类型名的命名空间前缀(namespace prefix)。如果元素类型名没有前缀,则本属性没有值(no value)。注意:支持命名空间的应用程序应使用命名空间名(namespace name)而不是命名空间前缀(namespace prefix)来标识元素[译注//命名空间名唯一地标识一个命名空间,而命名空间前缀则不一定。因为不同的命名空间前缀可能对应着同一个命名空间名。]。
8. [base URI] 元素的基准URI。
9. [parent] 本属性的值为一个文档信息项或元素信息项,它的[children]属性包含本信息项。
对于元素的每个属性(无论是被显式指定属性值,还是根据DTD得到缺省属性值),包括命名空间声明,都有一个相应的属性信息项(attribute information item)。一般属性对应的属性信息项出现在元素信息项的[attribute]属性中;而命名空间声明对应的属性信息项出现在元素的[namespace attributes]属性中。
既没有缺省值又没有在使用时被显式指定属性值的属性没有相应的属性信息项。
属性信息项包含以下属性(property)[译注//注意区分attribute与property]:
1. [namespace name] 属性(attribute)[译注//即与本信息项对应的属性,下同。]的命名空间名(如果有的话)。对于不属于任何命名空间的属性(attribute),本属性(property)没有值(no value)。
2. [local name] 属性名的内部名(local part)。本属性(property)不含命名空间前缀和冒号。
3. [prefix] 属性名(attribute name)的命名空间前缀。对于不包含命名空间前缀的属性名(attribute name),本属性(property)没有值(no value)。注意:支持命名空间的应用程序应使用命名空间名而不是命名空间前缀来标识属性。
5. [specified] 本属性(property)为一个标记(flag),它表示属性值(attribute value)是在元素的首标签中被显式指定的,还是取自DTD中的缺省值。
6. [attribute type] 属性(attribute)的类型。本属性(property)的合法值包括:ID、IDREF、IDREFS、ENTITY、ENTITIES、NMTOKEN、NMTOKENS、NOTATION、CDATA和ENUMERATION。对于没有声明的元素,该属性没有值(no value)。如果尚未读到声明,并且文档信息项的[all declarations processed]属性为false(即可能还有未读到的声明),则本属性的值为未知(unknown)。应用程序应将没有值(no value)和未知(unknown)作为CDATA值来对待。
8. [owner element] 本属性的值为一个元素信息项,它的[attribute]属性包含本信息项。
文档中的每个处理指令(processing instruction,简称PI)都有一个相应的PI信息项(processing instruction inforamiton item)。注意:XML声明(XML declaration)和文本声明(text declaration)(用于外部已解析实体)不属于处理指令(PI)范畴。
PI信息项包含以下属性:
1. [target] 本属性的值为一个字符串,表示PI的目标(PI Target)。
2. [content] 本属性的值为一个字符串,表示PI的内容(不包含PI目标和PI目标后的空白)。如果PI没有内容,则本属性的值为一个空字符串(empty string)。
3. [base URI] PI的基准URI。注意:在将一个信息集序列化为一个XML文档时,原来位于最高层外部实体中的那些PI的基准URI无法得到保留,因为没有这样的语法。
5. [parent] 本属性的值为一个文档信息项、元素信息项或文档类型声明信息项,它的[children]属性包含本信息项。
XML处理器通过设置一个未展开实体引用信息项(unexpanded entity reference information item)来表明处理器还没有展开某个外部已解析实体(external parsed entity)。对于在元素内容中出现的每个尚未展开的对外部一般实体的引用,有一个相应的未展开实体引用信息项。对于要读取所有外部一般实体的XML处理器(无论是有验证的还是无验证的),它不为有效的文档(valid document)创建本信息项。
未展开实体引用信息项包含以下属性:
1. [name] 被引用实体的名称。
2. [system identifier] 实体的系统标识符(system identifier)。这里的系统标识符和在实体声明中给出的系统标识符是一样的,XML处理器未对它进行URI转义处理。如果没有关于该实体的声明,则本属性没有值(no value)。如果尚未读到声明,并且文档信息项的[all declarations processed]属性为false(即可能还有未读到的声明),则本属性的值为未知(unknown)。
4. [declaration base URI] 在解析系统标识符(system identifier)时应参照的基准URI(也就是包含该实体的声明的资源的基准URI)。如果[system identifier]属性没有值(no value)或属性值为未知(unknown),则本属性也没有值(no value)或属性值为未知(unknown)。
5. [parent] 本属性的值为一个元素信息项,它的[children]属性包含本信息项。
文档中出现的每个数据字符(data character)(无论是字符引用还是CDATA段中的字符)都有一个相应的字符信息项(character information item)。
每个字符在逻辑上都是分开的信息项,但XML应用程序可以根据需要自由地将字符组织成更大的块。
字符信息项包含以下属性:
1. [character code] 字符对应的ISO 10646字符代码(范围从0到#x10FFFF,尽管这个范围内的值并不都是合法的XML字符代码)。
3. [parent] 本属性的值为一个元素信息项,它的[children]属性包含本信息项。
原始文档中的每个(除了DTD中的)XML注释都有一个相应的注释信息项(comemnt information item)。
注释信息项包含以下属性:
1. [content] 本属性的值为一个字符串,它表示注释的内容。
2. [parent] 本属性的值为一个文档信息项或元素信息项,它的[children]属性包含本信息项。
如果XML文档有文档类型声明(document type declaration),则信息集中包含一个文档类型声明信息项(document type declaration information item)。注意:实体和格式(notation)是文档信息项的属性,而不是文档类型声明信息项的属性。
文档类型声明信息项包含以下属性:
1. [system identifier] 外部子集的系统标识符(system identifier)。这里的系统标识符和在DOCTYPE声明中给出的系统标识符是一样的,XML处理器未对它进行URI转义处理。如果没有外部子集,则本属性没有值(no value)。
4. [parent] 本属性的值为文档信息项。
在DTD中声明的每个非解析一般实体(unparsed general entity)[译注//非解析实体只有一种,即外部非解析一般实体(external unparsed general entity)]都有一个非解析实体信息项(Unparsed Entity Information Item)。
非解析实体信息项包含以下属性:
1. [name] 实体的名称。
2. [system identifier] 实体的系统标识符。这里的系统标识符和在实体声明中给出的系统标识符是一样的,XML处理器未对它进行URI转义处理。
4. [declaration base URI] 在解析系统标识符时应参照的基准URI(也就是包含该实体的声明的资源的基准URI)。
5. [notation name] 实体对应的格式名称(notation name)。
在DTD中声明的每个格式(notation)都有一个格式信息项(notation information item)。
格式信息项包含以下属性:
1. [name] 格式的名称。
2. [system identifier] 格式的系统标识符(system identifier)。这里的系统标识符和在格式声明中给出的系统标识符是一样的,XML处理器未对它进行URI转义处理。如果没有给出格式的系统标识符,则本属性没有值(no value)。
4. [declaration base URI] 在解析系统标识符(system identifier)时应参照的基准URI(也就是包含该格式的声明的资源的基准URI)。
每个元素对应的元素信息项都有一个[in-scope namespaces]属性,对于在该元素范围内有效的每个命名空间在这个属性中都有一个相应的命名空间信息项(namespace information item)[译注//注意:并不是在该元素范围内有效的每个命名空间都是只有一个命名空间信息项。比如,如果在该元素范围内有两个不同的命名空间前缀绑定到同一个命名空间上,则将有两个命名空间信息项,它们分别对应于这两个绑定。因此,严格地说,是该元素范围内有效的每个命名空间绑定对应一个命名空间信息项。]。
命名空间信息项包含以下属性:
1. [prefix] 命名空间的前缀。从语法上说,本属性(property)的值为属性名(attribute name)[译注//即声明本命名空间的那个属性的属性名]中位于前缀“xmlns:”后的部分。如果属性名为“xmlns”(即声明缺省命名空间),则本属性没有值(no value)。
2. [namespace name] 命名空间前缀对应的命名空间名(namespace name)。
信息集的用途在于提供一组定义,因此,一致性是对那些使用了这些定义的规范[译注//比如SOAP和OWL等]而言的,而不是对这些规范的实现而言的。
引用了XML信息集的规范必须:
· 指出哪些信息项和属性对于实现该规范是必需的。(这一点间接地对那些实现该规范的处理器施加了一致性需求)
· 指出如何处理那些非必需的信息项和属性(比如,可以将它们原封不动地传递至下一处理阶段)。
· 记录所有要求XML文档提供、而信息集没有定义的信息。
· 记录那些用法与信息集的定义不同的术语(这是应当避免的)。
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).
通报需求包括错误(它不属于本规范的讨论范围)和文档信息。XML 1.0对文档信息通报的所有需求都已被综合到本规范中。括号中的数字表示它们在XML 1.0推荐标准中的所在段落(section)。
1. XML处理器必须向应用程序提供文档中所有非标记(markup)部分的字符(2.10)。
2. 有验证的XML处理器必须向应用程序通报文档中哪些字符数据是出现在元素内容中的空白(2.10)。
3. XML处理器必须在将行结束符(line-ends)传递给应用程序之前把它们规格化为LF(2.11)。
4. XML处理器必须在将属性值传递给应用程序之前按照3.3.3节中的规则对它们进行规格化。
5. XML处理器必须将已声明的格式的名称和外部标识符(系统标识符、公共标识符或两者)传递给应用程序(4.7)。
6. 当一个非解析实体的名称出现在ENTITY或ENTITIES属性值中(无论是被显式指定还是获得缺省值),XML处理器必须向应用程序提供这个实体的以及它的格式(notation)的名称、系统标识符和公共标识符(如果有的话)(4.6,4.7)。
7. XML处理器必须将所有PI传递给应用程序(2.6)。
8. 如果一个XML处理器(无验证的)没有包含(include)外部已解析实体的替换文本(以替换实体引用),则它必须向应用程序通报它能识别但没有读取这个实体(4.4.3)。
9. 有验证的XML处理器必须包含(include)实体的替换文本(以替换实体引用)(5.2)。
10. 如果某个元素类型的一个属性有缺省值,并且在该元素的首标签中没有为这个属性显式地指定属性值,则XML处理器必须为这个属性提供缺省值。
看下面的示例XML文档:
<?xml version="1.0"?>
<msg:message doc:date="19990421"
>Phone home!</msg:message>
这个XML文档的信息集包含以下信息项:
当前版本的XML信息集不包含下列信息(本列表并不试图做到毫无遗漏):
1. 在DTD的ELEMENT声明中定义的元素内容模型(content model)。
2. ATTLIST声明中属性声明的分组和次序。
3. 文档类型的名称。
4. 文档元素以外的空白(white space)。
5. 紧随PI目标名(target name)后的空白。
6. 字符是否是以字符引用(character reference)的形式出现的。
7. 空元素的两种形式(即<foo/>与<foo></foo> [译注//关于foo的典故与含义,请参见RFC 3092])之间的区别。
8. 首标签(start-tag)和尾标签(end-tag)之间的空白(属性值里的有意义的空白除外)。
9. 行终止符CR、CR-LF和LF之间的区别。
10. 首标签里属性的出现次序。
11. DTD中声明的出现次序。
12. DTD中条件段(conditional sections)的边界(boundaries)[译注//即一个DTD片段是否来自条件段(conditional section)]。
13. DTD中参数实体的边界。
14. DTD中的注释(comment)。
15. 声明的位置(内部实体、外部实体还是参数实体)。
16. 所有被忽略的声明(包括那些在IGNORE条件段里的),以及因为先前已有同样的声明而被忽略的实体和属性声明。
17. 括起属性值的引号是单引号还是双引号。
18. 一般已解析实体(general parsed entity)的边界。
19. CDATA段的边界。
20. 在DTD中为属性声明的缺省值。