曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
了字符代码的十进制表示。
实体引用是引用命名实体中的内容。对解析通用实体的引用以与号( &)和分号( ;)作为
定界符。参数实体引用使用百分号(%)和分号( ;)作为定界符。
表A - 2 9
实体引用
[ 6 7 ] R e f e r e n c e : : = EntityRef | CharRef
[ 6 8 ] E n t i t y R e f : : = '&' Name ';' [ W F C:声明实体]
[ V C:声明实体]
[ W F C:解析实体]
[ W F C:无递归]
[ 6 9 ] P E R e f e r e n c e : : = '%' Name ';' [ V C:已声明的实体]
[ W F C:无递归]
[ W F C:在D T D中]
格式正规约束:声明实体
对于没有D T D的文档,或者只有内部D T D子集且其中不含参数实体引用的文档,或者独立文
档声明为“s t a n d a l o n e = ' y e s '”的文档,除了a m p、l t、g t、a p o s和q u o t是格式正规的文档不需要声明
的实体,其他实体引用中的N a m e必须与实体声明中的N a m e匹配。参数实体必须先声明后引用。
同样,如果属性列表声明的缺省值中包含对通用实体的引用,必须在此之前声明该通用实体。
需要注意的是,如果实体是在外部子集或外部参数实体中声明的,不具备有效性验证功能
的处理器没有义务读取和处理这些声明;对于这类文档,仅当s t a n d a l o n e = ' y e s '时,实体必须声明
的规则才是一个格式正规约束。
有效性约束:声明实体
对于有外部子集或外部参数实体且“ s t a n d a l o n e = ' n o '”的文档,实体引用中的N a m e必须与实
体声明中的N a m e匹配。出于互操作性考虑,有效的文档应该依据“ 4.6 预定义实体”一节中指
定的形式声明实体a m p、l t、g t、a p o s和q u o t。参数实体必须先声明后引用。同样,如果属性列表
声明的缺省值中包含对通用实体的引用,必须在此之前声明该通用实体。
格式正规约束:解析实体
实体引用不能包含未解析实体的名称。只有在声明为E N T I T Y或E N T I T I E S类型的属性的值
中才能引用未解析实体。
格式正规约束:无递归
解析实体不能包含直接或间接的对自身的递归引用。
格式正规约束:在D T D中
参数实体引用只能出现在D T D中。
下面是字符引用和实体引用的例子:
附录A XML 1.0规范使用831 下载
下面是参数实体引用的例子:
4.2 实体声明
实体声明的定义如下:
表A - 3 0
实体声明
[ 7 0 ] E n t i t y D e c l : : = GEDecl | PEDecl
[ 7 1 ] G E D e c l : : = '<!ENTITY' S Name S EntityDef S? '>'
[ 7 2 ] P E D e c l : : = '<!ENTITY' S '%' S Name S PEDef S? '>'
[ 7 3 ] E n t i t y D e f : : = E n t i t y Value | (ExternalID NDataDecl?)
[ 7 4 ] P E D e f : : = E n t i t y Value | ExternalID
实体引用中使用N a m e标识实体;在E N T I T Y或E N T I T I E S属性值中,同样使用N a m e标识未
解析实体。如果同一实体被多次声明,则遇到的第一个声明被采纳;根据用户的选择,如果实
体被多次声明,X M L处理器可以发出警告。
4.2.1 内部实体
如果实体定义为E n t i t y Va l u e,则被定义的实体称为内部实体。它没有独立的物理存储对象,
实体的内容是在声明中给出的。值得注意的是,处理某些文字实体值中的实体引用和字符引用
时,需要产生正确的置换文本,参见“ 4.5 内部实体置换文本的结构”。
内部实体是解析实体。
下面是内部实体声明的例子:
4.2.2 外部实体
如果实体不是内部的,它就是外部实体,它的声明如下:
表A - 3 1
外部实体声明
[ 7 5 ] E x t e r n a l I D : : = 'SYSTEM' S SystemLiteral
| 'PUBLIC' S PubidLiteral S SystemLiteral
[ 7 6 ] N D a t a D e c l : : = S 'NDATA' S Name [ V C:声明表示法]
如果出现N D a t a D e c l,说明这是通用未解析实体;否则,它是解析实体。
有效性约束:声明表示法
832使用XML 高级编程
下载
上述声明中的N a m e必须与表示法所声明的名称匹配。
S y s t e m L i t e r a l称为实体的系统标识符。它是一个用于获取实体的U R I。根据正式的定义,U R I中
经常出现的井号( # )和标识符片断并不是U R I的一部分;如果系统标识符中包含标识符片断,X M L处
理器可以将它视作错误。除非在本规范之外另有说明(例如:特定的D T D定义的专用X M L元素类型,
或者由特殊的应用程序规范定义的处理指令),相对U R I是以实体声明所在的资源的位置为基准的。
因此,U R I可能相对于文档实体、包含外部D T D子集的实体,或者某些其他外部参数实体。
X M L处理器应该对U R I中的非A S C I I字符进行处理,将U T F - 8字符表示为一个或多个字节,
然后利用U R I的转义机制替换这些字节(即:将每个字节变为% H H的形式,其中H H是字节值的
十六进制表示)。
除了系统标识符,外部标识符也可以包含公共标识符。试图获取实体内容的X M L处理器可
以利用公共标识符生成可选的U R I。如果处理器不能完成上述操作,它必须使用S y s t e m L i t e r a l中
指定的U R I。在进行匹配之前,公共标识符中的所有空白字符必须规格化为单一的空格字符
(# x 2 0),而且必须删除字符串首尾的空白。
下面是外部实体声明的例子:
4.3 解析实体
4.3.1 文本声明
外部解析实体可以以文本声明开头。
表A - 3 2
文本声明
[ 7 7 ] Te x t D e c l : : = '<?xml' VersionInfo? EncodingDecl S? '?>'
文本声明必须以文字形式提供,它不能引用解析实体。文本声明只能出现在外部解析实体
的开始。
4.3.2 格式正规的解析实体
如果文档实体与d o c u m e n t匹配,它被认为是格式正规的。如果外部通用解析实体与
e x t P a r s e d E n t匹配,它被认为是格式正规的。如果外部参数实体与e x t P E匹配,它被认为是格式
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML高级编程下(88)