computer 版 (精华区)
发信人: lyl (一条四处游荡的鱼), 信区: network
标 题: [范文][XML]W3C建议XML 1.0中文版说明(八) (转载)
发信站: 听涛站 (Fri Apr 28 21:12:58 2000), 转信
发信人: DDG (导弹驱逐舰~雾的季节), 信区: XML
标 题: [范文][XML]W3C建议XML 1.0中文版说明(八) (转载)
发信站: BBS 水木清华站 (Thu Apr 6 13:29:48 2000)
【 以下文字转载自 New_board 讨论区 】
【 原文由 starw 所发表 】
4.4 XML处理器对实体和引用的处理
下表汇总了字符引用,实体引用,和对未析实体的调用可以出现的上下文,以及每
种情况下XML处理器要求的动作。最左边一列的标签记指明了识别时的上下文:
内容中的引用
可以在元素的起始标记之后,结束标记之前的任何地方以引用形式出现,对应于非
终结符content。
属性值中的引用
可以在起始标记内的属性值中,或属性声明内的缺省值中以引用形式出现;对应于非
终结符AttValue。
作为属性值
可以以Name而不是以引用的形式出现,作为声明为ENTITY类型的属性的值,或可以
作为声明为ENTITIES类型的属性值中的以空白分隔的记号之一。
实体值中的引用
可以在参数中或内部实体的实体声明内的字面实体值中以引用形式出现;对应于非终
结符EntityValue。
DTD中的引用
可以在DTD的内部或外部子集中以引用形式出现,但须在EntityValue和AttValue之
外。
参数 内部通用 外部
已析析通用 未析
内容中的引用 不被识别 被包含 进行验证时被包含
属性值中的引用 不被识别 作为常量被包含 被禁止
作为属性值 不被识别 被禁止 被禁
止 通知 不被识别
实体值中的引用 作为常量被包含 不处理 不处理
DTD中的引用 作为PE被包含 被禁止 被禁止
4.4.1 不被识别(Not Recognized)
在DTD之外,百分号字符%没有特殊含义;因此在DTD中的参数实体引用在content中不
被当成标记识别。类似地,除非未析实体的名字出现在已适当声明的属性的值中,
否则它们不被识别。
4.4.2 被包含(Included)
当一个实体的置换文本代替引用,被当成引用文档的一部分一样被查找和处理时,称
此实体被包含。其置换文本可以包含字符数据和标记(不包括参数实体),其中标记
必须以通常的方式识别,但用于转义标记定界符(实体amp,lt,gt,apos和quot)的
实体的置换文本总是被当成数据。(字符串"AT&T;"展开为"AT&T;"尚存的"and"
号&不被识别为实体引用的定界符。)当被表示的字符代替引用被处理时,称此字符
引用被包含。
4.4.3 进行验证时被包含(Included If Validating)
当XML处理器识别出一个对已析实体的引用,为了验证该文档,处理器必须包含此实
体的置换文本。如果实体是外部的,而处理器不试图验证该XML文档,那么处理器可
以,但不是必须,包含此实体的置换文本。如果一个不验证的解析器不包含此置换
文本,它必须通知应用它识别出但没有读取此实体。
这条规范基于这样一个共识:由SGML和XML的实体机制提供的起初设计用于支持模块
化创作的自动包含不一定适合于其他应用,尤其是文档浏览。例如,当浏览器遇到
一个外部已析实体引用时,可能选择用可视方式表示其存在但只在被请求时才查找
它进行显示。
4.4.4 被禁止(Forbidden)
以下情况被禁止,并构成一个严重错误:
n 出现对未析实体的引用。
n 在DTD中出现任何字符或通用实体引用,除非它们出现在EntityValue或AttValue
中。
n 属性值中出现对外部实体的引用。
4.4.5 被包含在常量中(Included in Literal)
当实体引用出现在属性值中或参数实体引用出现在字面实体值中时,它们的置换文
本代替引用被当成引用文档的一部分一样被查找和处理,但是置换文本中的单双引
号总是被当成正常的数据字符而不会结束此常量。例如,下面的例子是格式良好的:
<!ENTITY % YN '"Yes"' >
<!ENTITY WhatHeSaid "He said &YN;" >
而这个例子不是:
<!ENTITY EndAttr "27'" >
<element attribute='a-&EndAttr;>
4.4.6 通知(Notify)
当未析实体名字作为记号在声明为ENTITY或ENTITIES类型的属性的值中出现时,进
行验证的处理器必须将此实体和它的相关符号的系统和公共(如果有的话)标识符通
知给应用。
4.4.7 不处理(Bypassed)
当实体声明内一个通用兵实体引用出现在EntityValue中时,它不被处理,保持不变。
4.4.8 作为PE被包含(Included as PE)
和外部已析实体一样,参数实体只需在进行验证时被包含。当参数实体引用在DTD中
被识别并被包含时,它的置换文本被前后各加上一个空格字符;其目的在于强制参数
实体的置换文本在DTD中包含完整的的语法记号。
4.5 内部实体置换文本的构建(Construction of Internal Entity)
在讨论内部实体的处理时,区分两种形式的实体值是有帮助的。字面实体值(liter
al entity value)是实际出现在实体声明中用引号括起的字符串。对应于非终结符
EntityValue。置换文本(replacement text)是置换了字符引用和参数实体引用后的
实体内容。
在内部实体声明(EntityValue)中给出的字面实体值可以包括字符引用,参数实体引
用和通用实体引用。这些引用必须被整个包含于字面实体值中。如前述方式被包含
的实际置换文本必须包含所有被引用的参数实体的置换文本,同时在字面实体值中
必须包含所有代替字符引用的字符。但通用实体的引用必须保持不变,不被展开。
例如,如果有以下的声明:
<!ENTITY % pub "Éditions Gallimard" >
<!ENTITY rights "All rights reserved" >
<!ENTITY book "La Peste: Albert Camus, © 1947 %pub;. &rights;" >
那么实体"book"的置换文本为:
La Peste: Albert Camus, ?nbsp;1947 ditions Gallimard. &rights;
一旦引用"&book;"出现在文档的内容或属性值中时,通用实体引用"&rights;"应该
被展开。
这些简单的规则将可能会有复杂的相互作用;参见"D. 实体和字符引用的展开"中对
一个难的例子的详细讨论。
4.6 预定义实体(Predefined Entities)
实体和字符引用都可以用于转义左尖括号,"and"号(&)和其他定界符。通用实体集
合(amp,lt,gt,apos,quot)专门用于此目的。也可以使用数值字符引用; 一旦被
识别,它们立即被展开,同时它们必须被当成字符数据,因此数值字符引用"<
"和"&"可以用于转义出现在字符数据中的<和&。
不管这些实体是否被声明,所有的XML处理器必须能识别它们。出于互操作性考虑,
如其他实体一样,有效的XML文档应该在使用这些实体前先声明它们。如果声明的话,
这些实体必须被声明为内部实体,其置换文本是被转义的单个字符或指向这个字符
的字符引用。如下所示。
<!ENTITY lt "&#60;">
<!ENTITY gt ">">
<!ENTITY amp "&#38;">
<!ENTITY apos "'">
<!ENTITY quot """>
注意在"lt"和"amp"的声明中,<和&被两次转义,这是为了满足实体置换的格式要求。
4.7 符号声明(Notation Declarations)
符号用名字标识了未析实体的格式,具有符号属性的元素的格式以及处理指令所针
对的应用的格式。
符号声明赋予符号一个名字用于实体,属性表声明和属性说明中,同时也给出了一个
符号的外部标识符使得XML处理器或它的客户应用可以定位能以给定符号处理数据的
助理应用。
符号声明
[82] NotationDecl ::= '<!NOTATION' S Name S (ExternalID | PublicID) S?
'>'
[83] PublicID ::= 'PUBLIC' S PubidLiteral
XML处理器必须向应用提供任何在属性值中,属性定义中或实体声明中定义或引用的
符号的名字和外部标识符。它们还可以将外部标识符解析成系统标识符,文档名,
或是应用调用相应处理器处理给定符号格式的数据的所需的其他信息。(但如果XML
处理器或应用所运行的系统中没有处理XML文档声明和引用的符号的相应应用的情况,
不是一个错误。)
4.8 文档实体(Document Entity)
文档实体(document entity)是实体树的根和XML处理器的处理起点。本规范没有规
定XML如何定位文档实体;与其他实体不同,文档实体没有名字,而且可以完全不带
任何标识地出现在处理器的输入流中。
--
山居且喜远纷华,俯仰乾坤野性赊。
千载勋名身外影,百岁荣辱镜中花。
金 琢 倒秋将暮,蕙径萧瑟日且斜。
闻道五湖烟境好,何 蝮业鐾∩场?
--
与其相濡以沫,不若相望于江湖。
http://10.23.31.91/
http://10.23.31.91:9999
※ 来源:.听涛站 cces.net.[FROM: 匿名天使的家]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.844毫秒