• 热门标签

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

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

式使用D T D。一旦选择了D T D,创作工具就能够实施D T D中的规则,它根据D T D中说明的结构,
仅允许用户在文档中添加D T D允许的元素或属性。
XML 1.0推荐标准专门描述了如何构建D T D,以及如何将它与根据其中规则编写的文档相关
联。它还定义了解析器应该对D T D执行的处理。在本章中,我们将讨论使用D T D的原因。除此
之外,我们还将介绍XML 1.0 DTD的语法规则,以及如何在文档实例与D T D之间建立关联。利
用以上知识,我们将为有关图书目录的例子创建D T D。
3.1 为何需要正式的结构
当你编写的代码要对以特殊词汇表为依据的文档进行操作时,实际上你是在创建文件资料。
你的源代码中溶入了词汇表规则。代码必须遵循某种结构;当结构改变时,必须修改代码。通
常情况下,这是可以接受的。设计者可以将他的设计意图传达给一小组程序员,应用程序中的
所有代码都将遵照这些假设进行编写。毕竟,编写完全数据驱动的代码是非常困难的。
然而,如果没有显式的文件资料,就无法可靠地捕获文档中的错误。唯一的错误检测机制
就是运行代码。如果你的代码执行通过,或者文档以一种出乎意料的方式偏离了设计者的初衷,
就很难检测出错误。最终,你的应用程序将无法实现预期的目标。
为了解决上述问题,需要依靠清晰、准确的语法规则文档,它应该包含词汇表允许的所有
规则。如果配备了这样的文档,程序员就不必为了确认对词汇表的理解程度与词汇表的设计者
进行面对面的交流。如果文档本身也是用一种正式的(具有严格精确的格式)语法书写的,解
析器就能够阅读这些规则。由此形成了一种可靠错误检测机制。解析器能够指出任何检测到的
词汇表错误,你可以先修改这些错误,然后再着眼于应用程序的逻辑。
3.1.1 文档域
X M L文档可以看作是程序中数据结构的快照。它们用于程序之间的信息交流。这些信息都
属于某个应用领域—你要解决的问题空间。如果你的X M L词汇表所构建的模型非常适合于要
解决的问题,就能够简化应用程序的编写和维护。为了设计出有效的X M L词汇表,你必须深入
分析应用程序要解决的问题。如果你的X M L仅仅符合格式正规约束,可能很难明确地反映出商
业过程。你不能理所当然地认为你的X M L例子能够覆盖每种可能出现的情况。即使真的如你所
愿,它们也不能以有效的方式传递你掌握的知识。
相反, D T D能够通过定义记录词汇表中的所有信息。你在设计词汇表时考虑到的所有问题
都必须写入D T D。从而,其他人可以通过D T D了解你对问题的理解(或者至少可以知道你针对
这个问题所记录下来的内容)。D T D具有以下两个作用:将你掌握的知识提供给程序,同时获得
了文件资料。
3.1.2 验证文档的有效性
如果格式正规的文档是遵循一些隐式规则编写的,解析器无法根据这些规则检查其中的错
误。整个系统的完整性取决于创建和使用X M L的应用程序的完整性。代码中的错误可能很难被
发现。它们还可能引起其他程序的中断,或者导致错误的数据进入系统。然而, XML 1.0推荐标
准规定了验证有效性的解析器应该具有的功能。如果某个X M L文档引用了D T D,验证有效性的
解析器应该读取D T D,并确保文档符合D T D中描述的语法。如果你需要完善的错误检测机制,
只需使用D T D和验证有效性的解析器。文档语法、词汇表以及指定值中的任何错误都逃不过解
析器的眼睛。如果文档顺利通过解析器的有效性验证,你就可以放心大胆地考虑程序逻辑,不
必再纠缠于语法问题。当然,有效性验证并不能避免应用程序逻辑方面的失误,但是它能够过
滤出代码中的无效数据。
对于I n t e r n e t应用程序来说,这一点尤为重要。你不能假设你要处理的应用程序经历了与
你的代码同样严格的质量控制。为另一个企业服务的编程小组可能针对特定的业务或领域实现
了公共的X M L词汇表。他们对词汇表的解释可能与你的想法不同。他们的测试自然也与你的
不尽相同。利用D T D和验证有效性的解析器,就能够立即对文档的完整性进行可靠的检查。
当然,有效性检查的程度取决于D T D。了解了以上概念,下面我们开始介绍如何编写有效的
D T D。
3.2 编写DTD:通用原则
简单来说, X M L文档由元素和相应的属性组成。虽然我们还可以定义其他项,但元素和属
性是文档支持的两个主要概念。此外,元素的内容是通过其他元素或X M L标准中规定的基本类
型进行定义的。D T D必须能够定义文档中的所有元素,元素可以设置的属性,以及元素之间的
关系。
52使用XML 高级编程
下载
3.2.1 将DTD与XML文档相关联
D T D是与文档相关的。通常,文档中包含一条用于与D T D建立关联的指令,当验证有效性
的解析器读到该指令时,它获取D T D,并根据其中定义的规则对文档进行检验。下面我们将讨
论如何在D T D与文档实例之间建立关联。
1. DOCTYPE标记
我们在第2章曾经简要讨论过这个标记。为了将D T D声明与文档实例相关联, XML 1.0提供
了特殊的D O C T Y P E声明。D O C T Y P E声明必须位于X M L声明之后,且在任何文档元素之前。但
是,X M L声明和D O C T Y P E声明之间可以插入注释和处理指令。
D O C T Y P E声明包含关键字D O C T Y P E、文档根元素的名称,以及内容声明结构。在详细阐
述多少有些晦涩的语句之前,我们先通过一个例子看一下D O C T Y P E声明在文档实例中的位置。
以下是某个X M L文档的前三行:
第一行的X M L声明表示该文档符合XML 1.0的语法,第二行说明该文档使用C a t a l o g词汇表—
文档类型“C a t a l o g”。更确切地说,文档的第一个元素或称根元素最好是C a t a l o g,否则解析器会产
生错误。在本例中,根元素恰好是C a t a l o g。
程序段中的省略号隐藏了D O C T Y P E声明的其余部分。真正的声明到底在哪里呢? X M L规范
定义了两种提供声明的方法。你可以在独立的D T D文件中提供外部子集声明,或者在D O C T Y P E
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(22)