曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
的起始标记和结束标记,文本中的三个引用也会被识别并展开,产生包含以下内容的元素“ p”
(全部是数据,没有定界符或标记):
附录A XML 1.0规范使用843 下载
下面这个更加复杂的例子将完整地解释实体引用和字符引用的规则和效果。在下面的例子
中,行号只是为了便于表述。
X M L处理器将对上述代码执行以下处理:
• 在第4行,对字符3 7的引用被立即展开,参数实体“ x x”保存在符号表中,它的值是
“% z z ;”。由于不重新扫描置换文本,因此对参数实体“ z z”的引用不被发现。(假如发现
对参数实体“z z”的引用的话会产生错误,因为“ z z”尚未声明。)
• 在第5行,字符引用“ & # 6 0 ;”被立即展开, X M L处理器还将保存参数实体“ z z”,它的置
换文本为“ <!ENTITY tricky "error-prone" >”,一个格式正规的实体声明。
• 在第6行,发现对“x x”的引用,“x x”的置换文本(即:“% z z ;”)被解析。此时,对“z z”
的引用被发现,它的置换文本(“<!ENTITY tricky "error-prone" >”)被解析。现在,通用
实体“t r i c k y”被声明,它的置换文本是“ e r r o r- p r o n e”。
• 在第8行,发现对通用实体“ t r i c k y”的引用, X M L处理器将展开它,因此“ t e s t”元素的
完整内容是一个自描述(且不合语法)的字符串This sample shows a error-prone method。
附录E 确定的内容模型(未标准化)
出于兼容性考虑,元素类型声明中的内容模型应该是确定的。
S G M L要求内容模型是确定的(它称为“明确的”);利用S G M L系统生成的X M L处理器会
将不确定的内容模型标记为错误。
例如,内容模型((b, c) | (b, d))是不确定的,因为对于给定的b,如果解析器不查看b之后的
元素,就无法确定应该将它与模型中的哪个b匹配。在这种情况下,两次b的引用可以合并为一
次引用,即:将模型改为(b, (c | d))。现在,很明显元素b只能与内容模型中的一个名称匹配。解
析器不必查看它后面的元素; c或d都是可接受的。
如果采用更加正式的表述方法:可以使用标准的算法根据内容模型构造有限状态自动机,
例如:A h o、S e t h i和U l l m a n的[ A h o / U l l m a n ]一文3 . 9节描述的算法3 . 5。在许多这类算法中,规则
表达式中的每个位置(例如,规则表达式的语法树中的每个叶节点)都构造一个跟随集合
(follow set);如果任何位置的跟随集合中有多个后续的位置标有相同的元素类型名称,则认为
内容模型出错,并且会被报告。
有些算法能够将大部分(但并非全部)不确定的内容模型自动规约为等价的确定模型;参
见Brüggemann-Klein 1991 [Brüg g e m a n n - K l e i n ]。
附录F 字符编码的自动检测(未标准化)
844使用XML 高级编程
下载
X M L编码声明作为实体的内部标签,说明实体采用的字符编码。然而,在X M L处理器能够
读取内部标签之前,显然需要知道所使用的字符编码—这也正是内部标签要说明的。通常情
况下,这简直是可望不可及。但是在X M L中,这并非完全不可能,因为X M L通过两种方式限制
了通常的情况:假设每一种实现仅支持有效的字符编码集,并且X M L编码声明的位置和内容是
受限的,它使自动检测每个实体所用的字符编码成为可能。另外,在许多情况下,除了X M L数
据流本身,还有许多其他可用的信息源。根据X M L实体提交给处理器时是否提供附加(外部)
信息,可以分为两种情况。我们首先来考虑第一种情况:无附加信息。
由于不采用U T F - 8或U T F - 6格式的所有X M L实体必须以X M L编码声明开头,它的前几个字
符必然是‘< ? x m l’,只要提供两至四个字节的输入,任何合乎规范的X M L处理器都能够检测出
适用于下列哪种情况。在读取该字节序列时,可以使用提前掌握的编码知识,例如:在U C S—4
中,‘<’表示为“ # x 0 0 0 0 0 0 3 C”,‘?’表示为“ # x 0 0 0 0 0 0 3 F”,U T F - 1 6数据流需要的字节顺序标
记表示为“ # x F E F F”。
• 00 00 00 3C:U C S - 4,b i g - e n d i a n编码的计算机(1 2 3 4顺序)
• 3C 00 00 00:U C S - 4,l i t t l e - e n d i a n编码的计算机(4 3 2 1顺序)
• 00 00 3C 00:U C S - 4,异常的字节顺序( 2 1 4 3)
• 00 3C 00 00:U C S - 4,异常的字节顺序( 3 4 1 2)
• FE FF:U T F - 1 6,b i g - e n d i a n
• FF FE:U T F - 1 6,l i t t l e - e n d i a n
• 00 3C 00 3F:U T F - 1 6,b i g - e n d i a n,无字节顺序标记(因此从严格意义上讲是错误的)
• 3C 00 3F 00:U T F - 1 6,l i t t l e - e n d i a n,无字节顺序标记(因此从严格意义上讲是错误的)
• 3C 3F 78 6D:U T F - 8,ISO 646,A S C I I,ISO 8859的某些部分,S h i f t - J I S,E U C,或者其
它7位、8位或混合长度的编码,它们能够保证A S C I I字符具有正常的位置、长度和值;
X M L处理器必须读取真正的编码声明以检测到底采用了哪种编码,但是由于这些编码中的
A S C I I字符采用同样的位模式,因此编码声明本身是可读的
• 4C 6F A7 94:E B C D I C(对于某些变种,X M L处理器必须读取完整的编码声明以确定到底
使用了哪页编码)
• 其他:无编码声明的U T F - 8,或者数据流已损坏,不完整或被包含在某种外层数据中。
这种程度的自动检测机制足以读取X M L编码声明,以及解析字符编码标识符,以便区分出
特定编码族中的某个编码(例如,从8 8 5 9中识别出U T F - 8,识别出8 8 5 9编码的各个部分,或者
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML高级编程下(92)