• 热门标签

当前位置: 主页 > 航空资料 > 计算机 >

时间:2010-08-09 13:24来源:蓝天飞行翻译 作者:admin
曝光台 注意防骗 网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者

结构完整但不合法;这是三种类型中最不普遍的情况。
可是,没有必要要求所有的文档都是合法的。有时XML 文档仅需结构完整就足够了。DTD 在结构完整文档中也占有一席之地
(虽然不是必需的,但是对合法的文档来说确实是必需的),并且不进行合法性检查的XML 处理器可以在DTD 中获取有用的
信息,而不必完全符合DTD 的要求。在本节中将研究该项内容。
若结构完整但无效的XML 文档中包含DTD,则该DTD 需具有上一章所研究的相同的通用形式。那就是说,开头为文档类型声
明,且可包含ELEMENT、ATTLIST 和ENITITY 声明。与有效文档的区别在于处理器仅处理其ENTITY 声明。
9.7.1 内部实体
在结构完整的无效文档中使用DTD 的主要益处在于还可以使用内部通用实体引用,除了五个预定义引用>、<、"、
'和&之外。可按通常的方法简单地声明所需的实体,然后在文档中使用它们。
例如,回顾前面的例子,假如需要实体引用&ERH;用于替换字符串“Elliotte Rusty Harlod”(好吧,那就假设我需要实体
引用&ERH;用于替换字符串“Elliotte Rusty Harlod”),但不想为文档编写一个完整的DTD。可按清单9-15 所示,在DTD
中简单地声明ERH 实体引用。该文档仅仅是结构完整,但却是不合法的文档;若不追求合法性,该文档完全可以接受。
清单9-15:DTD 中的ERH 实体引用产生了结构完整但不合法的文档
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE DOCUMENT [
<!ENTITY ERH "Elliotte Rusty Harold?">
]>
<DOCUMENT >
<TITLE>&ERH;</TI LE>
<SIGNATURE>
<COPYRIGHT >1999 &ERH;</COPYRIGHT>
<EMAIL>elharo@metalab.unc.edu</EMAIL>
<LAST_MODIFIED>March 10, 1999</LAST_MODIFIED>
</SIGNATURE>
</DOCUMENT>
XML 实用大全
第 285 页
清单9-15 中的文档类型声明是少见的。除了在定义ERH 实体引用的之外,只是简单地说明了基本元素为DOCUMENT。可是文
档的结构完整性并不要求文档满足这一小小的约束。例如清单9-16,显示的是另一个使用了PAGE 基本元素的文档,但文档
类型声明中却说明该基本元素应该是DOCUMENT。该文档结构依然完整,但是与清单9-15 的文档一样都是不合法的。
清单9-16:结构完整,但不合法的文档
<?xml version="1.0"standalone="yes"?>
<!DOCTYPE DOCUMENT [
<!ENTITY ERH "Elliotte Rusty Harold?">
]>
<PAGE>
<TITLE>&ERH;</TI LE>
<SIGNATURE>
<COPYRIGHT >1999 &ERH;</COPYRIGHT >
<EMAIL>elharo@metalab.unc.edu</EMAIL>
<LAST_MODIFIED>March 10, 1999</LAST_MODIFIED>
</SIGNATURE>
</PAGE>
这个DTD 同样也可包含其他的<!ELEMENT>、<!ATTLIST>和<!NOTATION>声明,所有这些声明均被不进行合法性检查的处理器
忽略,仅处理<!ENTITY>声明。清单9-17 中的DTD 与其本身的内容相矛盾。例如,根据DTD 定义, ADDRESS 元素本应为空,
但实际上该元素包含几个未声明的子元素。另外,要求每个ADDRESS 元素都具有OCCUPANT、STREET、CITY 和ZIP 属性值,
但是却无处可寻。基本元素本应为DOCUMENT,而不是ADDRESS。DOCUMENT 元素本应包含的TITLE 和SIGNATURE 均未在DTD
中进行声明。本文档结构依然完整,却无半点合法性。
清单9-17:结构完整却无效的文档
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE DOCUMENT [
<!ENTITY ERH "Elliotte Rusty Harold?">
<!ELEMENT ADDRESS EMPTY>
<!ELEMENT DOCUMENT ( TITLE, ADDRESS+, SIGNATURE)>
XML 实用大全
第 286 页
<!ATLIST ADDRESS OCCUPANT CDATA #REQUIRED>
<!ATLIST ADDRESS DEPAR ME CDATA #IMPLIED>
<!ATLIST ADDRESS COMPANY CDATA #IMPLIED>
<!ATLIST ADDRESS S REET CDATA #REQUIRED>
<!ATLIST ADDRESS CITY CDATA #REQUIRED>
<!ATLIST ADDRESS ZIP CDATA #REQUIRED>
]>
<ADDRESS>
<OCCUPANT>Elliotte Rusty Harold</OCCUPANT >
<DEPARTMENT >Computer Science</DEPARTMENT >
<COMPANY>Polytechnic University</COMPAN Y>
<STREE >5 Metrotech Center</STREE >
<CITY>Brooklyn</CITY>
<STATE>NY</STATE>
<ZIP>11201</ZIP>
</ADDRESS>
9.7.2 外部实体
不进行合法性检查的处理器可处理外部实体引用,但这不是必须的。详细的说,例如Mozilla 使用的开放资源XML 语法分析
器并不处理外部实体引用。包含IE 5.0 在内的其余大部分处理器却要处理外部实体引用。可是不进行合法性检查的处理器
可能仅处理可析实体,不处理包含非XML 数据(像图像或声音)的外部实体引用。
外部实体对存储样式文本特别有用。例如,HTML 预定义非ASCII ISO Latin-1 字母的实体引用,这些引用比数字化字符实
体引用稍便于记忆。例如,å 预定义为&ring;,þ 预定义为&thorn;,ý 预定义为&Yacute;等等。清单9-18 为定义这些引用
的正式ISO DTD(对注释进行一些轻微的修改,文中巧妙地应用空格,使得文档看起来形式优美整洁)。
清单9-18:非ASCII ISO Latin-1 字符的DTD
<!-(C) International Organization for Standardization 1986
Permission to copy in any form is granted for use with
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML实用大全(82)