• 热门标签

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

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

声明体中包含内部子集,或者同时采用上述两种方式。在上例中(内部D T D与外部D T D相混合
的情况),内部D T D可以添加新的声明,或者覆盖外部D T D中的声明。(根据X M L规范的定义,
解析器首先读取内部子集,其中的声明具有较高的优先权。)
在我们讨论如何提供声明之前,还有一个问题要考虑。正如我们在第2章所看到的,X M L声
明可以有s t a n d a l o n e属性。该属性可以取以下两个值: y e s或n o。如果属性值为y e s,说明文档实
例没有会影响到传递给应用程序的文档信息的外部声明。如果属性值为n o,说明文档有外部声
明,且声明中包含的值是正确定义文档内容所必需的—例如,特殊的缺省值。
下面的代码是前一例子的变种,它表示我们需要的所有声明都包含在文档中:
在实际应用中,可选的s t a n d a l o n e属性很少出现。属性值y e s并不能保证文档没有任何类型
的外部依赖,而仅仅意味着即使在处理过程中不考虑外部声明,在作为接收方的应用程
序关注的范围内,文档不会产生错误(即使文档可能是格式正规的X M L)。因此,它的主
要用途是作为解析器和其他应用程序的标志,表示是否需要获取外部内容。
现在,让我们清除前两个程序段中的省略号。D O C T Y P E声明由以下部分组成:关键字、文
档的根元素名称(在本例中是C a t a l o g)、可选的外部标识符,以及可选的标记声明块。外部标识
符用于外部D T D(外部子集)的命名和定位,标记声明块是由标记声明(内部子集)构成的。
首先让我们来讨论标记声明块。
第3章文档类型定义使用53 下载
2. 内部D T D子集
如果必要的话,我们可以将所需的全部声明都包含在内部子集中,正如你在上一章所看到
的例子。D O C T Y P E标记中的标记声明块由以下几部分构成:左方括号、声明列表和右方括号。
下面是一个简单的例子:
内部D T D非常有用。你永远也不会为找不到D T D而头疼。然而,即便是最简单的X M L词汇
表,内部D T D也会令文档的长度剧增。另外,无论文档是由人编写的,还是由程序生成的,每
个文档实例中都必须包含相同的内部D T D。即使文档的用户不打算验证文档的有效性,这些声
明也必须随文档一起传输。我们不推荐频繁地使用内部D T D,但是对于简单的词汇表—特别
是测试标记原型时,它们还是值得考虑的。
在某些情况下,设计人员可能希望同时使用内部D T D和外部D T D。内部D T D用于添加声明。
当内部D T D与外部D T D声明的项目重复时,内部声明将取代外部声明。这一特征使得设计者能
够根据特殊文档的需求调整声明,但是使用该特征时应该谨慎。如果我们过度频繁地覆盖外部
D T D,就不太合适了—这充分证明了初始设计的失败。
3. 外部D T D
从某种角度讲,外部D T D更加灵活。上一章曾经介绍过如何引用D T D;现在我们将进行更
加详细的阐述。在本例中, D O C T Y P E声明不仅包含常规的关键字和根元素名称,而且包含指示
外部D T D源的关键字和D T D的位置。X M L规范定义了几种声明源的方法。声明中可以使用关键
字S Y S T E M或P U B L I C。如果使用S Y S T E M关键字,解析器将仅根据给出的U R L寻找D T D—
D T D通过U R L显式地直接定位。在我们的例子中,位于“ S Y S T E M”关键字之后的是用于命名
D T D文件的U R L。
用于定位D T D的U R L不应该包含段标识符(字符#加名称)。XML 1.0建议指出,如果U R L
中包含该标识符,解析器将产生错误指示。
下面是两个例子:
和:
在第一个例子中,对于包含的D O C T Y P E声明的文档,验证其有效性所需的所有声明都位于
文件P u b C a t a l o g . d t d中。在第二个例子中, D T D文件位于虚构的世界图书馆组织的We b服务器上。
在以上两例中,P u b C a t a l o g . d t d文件应该包含C a t a l o g元素的声明。
然而,如果D T D源关键字为P U B L I C,情况就略微复杂一些。P U B L I C关键字用于声明众所
周知的词汇表。例如,假设出版界已经对图书种类D T D达成了大量共识。需要根据该词汇表解
析文档的应用程序可能会通过某种策略来定位D T D。如果这个D T D非常普及,应用程序或许有
本地拷贝。直接使用本地拷贝可能比从We b服务器上远程下载更可取。D T D可能存放在数据库
中,或者可以通过其他与应用程序相关的技术获得。如果使用P U B L I C关键字和U R I,应用程序
就有机会利用自己的算法定位D T D。
54使用XML 高级编程
下载
统一资源标识符(URI)可以是URL,也可以是一个单独的名字。
例如:
如果U R I“u n i v e r s a l / P u b l i s h i n g / B o o k”对于处理这类文档的应用程序来说是已知的,应用程
序可以通过某种有效的方式自行寻找D T D。或许我们恰好有适合该领域的解析器。它可能有
D T D的本地拷贝,或者它可以访问由本地数据库服务器维护的D T D。最关键的是,寻找D T D的
方法主要是由负责处理D O C T Y P E声明的应用程序确定的。
当然,“众所周知”通常是相对的。因此, XML 1.0允许P U B L I C声明同时有公共U R I和系统
标识符。如果使用文档的应用程序或解析器不能从P U B L I C关键字提供的U R I定位D T D,它必须
使用系统标识符。
在本例中,文档的设计者允许作为接收方的应用程序根据公共的U R I自行寻找D T D。如果该
过程失败,对我们的出版领域不熟悉的通用解析器一般属于这种情况,应用程序可以从地址为
w w w. u n i v e r s a l l i b r a r y. o rg的We b服务器请求指定的文件。
3.2.2 基本标记声明
D T D通过四种标记声明定义X M L文档中允许出现的内容。表3 - 1显示了与这些声明相关的关
键字及其含义。前两个声明与X M L文档中的信息有关—元素和属性。
表3 - 1
D T D关键字含义
E L E M E N T X M L元素类型声明
AT T L I S T 特定元素类型可设置的属性及这些属性的允许值声明
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(23)