为了增强XML文档结构化要求,必须利用XML的辅助技术——数据类型定义(DTD),这也是本文的重点,同是还要举Listing A中XML文档的那个例子。
DTDs是定义XML文档格式最古老也是最简单的方法。象大多数XML一样,DTDs是由World Wide Web机构(W3C)定义的,关于这点可以参考W3C's current XML specification。
DTDs能实现指定可行标签、元素、属性、每一元素的应用次数以及元素在指定XML文件中的排序等功能。DTDs可以提供数据类型强化的限定类型,从另一种意义上来说,也就是你可以自行确定一个元素是否含有其他元素、其它数据或者为空。
在XML文件的头部含有!DOCTYPE标签来与DTDs相关联,这个标签中含有DTDs的文件名(如果有SYSTEM这个词的话,见表A)或者URL或者DTDs文件(如果有PUBLIC这个词的话)。XML文件也可以声明为独立的,简单来讲就是DTDs包含在文件中作为!DOCTYPE头标签。
XML文件必须满足两个正确的标准,第一个就是格式要正确,也就是说要满足基本XML语法规则,文档必须能够被读取才说明格式是正确的,否则就存在格式错误问题,也就不能被读取。
有很多行业标准DTDs,它们是专为不同信息设计的。由于这些DTDs被预先确定,而且XML解析器会使所有过程生效,因此运行XML应用程序就会很简单。如果想要与其它应用程序或其他企业交换信息的话,采用标准DTD是非常值得的,而且采用标准数据格式也会使应用程序集成起来更容易。XML.org是由企业搜集的可供查询的DTDs目录,而且我相信从那里会找到很多有用的信息。
XML的数据类型定义包括DTD声明、参照数据类型、定义可用元素及其在文件中的顺序。DTD声明的一般过程是:
<!ELEMENT elementname (elementtype modifiers)>
DTD元素修改器定义了可用内容及元素的应用次数,见表A。
表A
|
看一看Listing B,这是一个数据类型定义,它描述了Listing A中书目录的结构,来看看这一数据类型定义并逐项检查一下。
首先看看根目录的元素定义,它必须包含一个或更多的书元素,(在书元素名的后面用+标注):
<!ELEMENT catalog (book+)>在后见的几行可以看见书元素本身的定义,它必须要含有下面的一些内容:
接着,DTD定义了这些书元素:作者、标题、类型、价格、出版日期以及表述。所有这些元素都被定义为可解析的字符数据(PCDATA),基本意思就是这些元素都带数据,但却不含其它元素。
尽管Listing B中的DTD都生效了,但是,在这里我还是要多说一句,我们并没有定义这些元素在文件中的顺序,我到最后才提这个问题是为了把它单独讨论。实际上,我要定义这些元素在XML文件中的顺序并在元素应用后立即为其赋值。
<!ATTLIST associatedelement
attributename1 attributetype1 modifiers
attributename2 attributetype2 modifiers
>
Associatedelement是要赋值或已赋值的元素,它排在所有其它已赋值的元素之后,Attributename是Attributetype的值,Attributetype是值的类型,所有类型包括:
这些类型的用处只有当对文件进行查询或转换时才会突出出来,不要担心,在后面的网站开发问题上我问将对此进行讨论。
这些值也可以做下面的变化,给解析器提供更多信息,通常是缺省值,可以有:
DTDs有一个缺点:对于一个特定元素(不管这个元素是否包含其它元素或者为空,或者包含数据)不能满足类型规则,因此,如果想要多次检查文件的结构,那么这一应用就要受到限制,在类似这样的情况下,就需要重新回到XML,可以看看下一篇文章。