3.4.1 XML DTD
1.DTD简介
XML允许用户自己定义基于信息描述、可以体现数据之间逻辑关系的标记,确保文档具有较强的易读性、清晰的语义和易检索性。因此,一个完全意义上的XML文档不仅仅是严格遵守XML语法要求的“格式良好的”文件,而且还应该是使用了自定义标记的XML文档。也就是说,它必须遵守文档类型定义DTD中已声明的种种规定,这样解析器才能读懂这一XML文件,也只有这样的XML文件才是真正有效的。
Schema是一种XML文件的验证机制,它主要定义XML文件中出现的元素、属性以及整个文件的整体结构。XML1.0中默认的Schema是DTD,而时下流行的Schema是XML Schema。
DTD是XML文件的验证机制,它描述了一个置标语言的语法和词汇表,也就是定义了文档的整体结构以及文档的语法。简而言之,DTD规定了一个语法分析器以解释一个“有效的”XML文档所需要知道的所有规则的细节。
在数据交换中XML的验证模式起到了重要的作用,它让XML文件能够成为数据交换的标准,一旦定义好标准的DTD或是XML Schema,各个用户就可以依照它们书写自己的XML文件,并且进行验证,这样就轻易地实现了标准的一致,使数据交换有了统一的数据格式。
2.XM L文件应用DTD
DTD可以直接包含在XML文件中,它可以是XML文件的组成元素,DTD的位置一般在XML文件的开头。
例3-4
01:<? xml Version=“1.0”encoding=“GB2312”>
02:<!――XML内部DTD――>
03:<! DOCTYPE file[
04:<! ELEMENT file(subject,body)>
05:<! ATTLIST file
06: number CDATA#REQUIRED
07:>
08:<! ELEMENT subject(#PCDATA)>
09:<! ELEMENT body(#PCDATA)>
10:]>
11:<file number=“1”>
12:<subject>欢迎进入XML世界</subject>
13:<body>这是第一个XML文件,欢迎进入XML世界</body>
14:</file>
上例中第3行到第10行为DTD,第3行指出了file为根元素,第4行表示file元素有subject和body两个子元素,第5行到第7行定义了file的number属性,第8、9行定义了元素subject和body。
DTD也可以是应用在XML文件外部独立存储的一个文件,由XML文件去调用DTD文件。
例3-5
XML文件:
01:<? xml Version=“1.0”encoding=“GB2312”>
02:<!――XML外部DTD――>
03:<! DOCTYPE file SYSTEM“XDTD.dtd”>
04:<file number=“1”>
05:<subject>欢迎进入XML世界</subject>
06:<body>这是第一个XML文件,欢迎进入XML世界</body>
07:</file>
DTD文件(XDTD.dtd):
01:<? xml Version=“1.0”encoding=“GB2312”>
02:<! ELEMENT file(subject,body)>
03:<! ATTLIST file
04: number CDATA#REQUIRED
05:>
06:<! ELEMENT subject(#PCDATA)>
07:<! ELEMENT body(#PCDATA)>
XML文件的第3行指定使用外部的DTD文件,其他部分为XML文件元素。
DTD文件除了第1行为XML文件声明外,其余部分为DTD语法,DTD的具体语法将在下面讲解。
3.DTD元素
DTD元素的语法为:<! ELEMENT element_name(element_or_data)>。其中,element_name是XML元素的标记名称,element_ or_ data是元素的内容,它可以是元素或数据,如果是多个,则用逗号隔开。
DTD不仅定义了元素的标记,而且定义了XML文件的结构。各元素间的关系(即出现次数)都可以用DTD定义。元素只出现一次可以直接列出,如果元素重复出现,我们还可以定义元素的出现次数,如表3-1所示。
表3-1
例如:<! ELEMENT element_ name(element?)>表示element_ name元素的子元素element出现一次或不出现。
XML文件中的空元素在DTD中的定义方式为:<! ELEMENT element_ name(EMPTY)>。元素的数据内容也可以在DTD中的定义,如表3-2所示。
表3-2
例如:<! ELEMENT element_name(#PCDATA)>表示element_name元素的内容可能含有子元素。
元素可以混合定义,如下所示:
<! ELEMENT element_ name(#PCDATA element1 element2)>
上述element_ name元素可以是文字数据,其中拥有element1子元素和element2元素。
4.DTD属性
DTD元素属性的语法为:<! ATTLIST element_ name attribute_ name attribute_ type default_ value>。element_ name是属性所属的XML元素名称,attribute_ name是元素属性的名称,attribute_ type指定元素的属性类型,如表3-3所示。
表3-3
例如:<! ATTLIST book code ID>表示元素book具有属性code,并且code应该作为book元素的主索引,在整个XML文件里只出现一次。
default_ value是属性的默认值,它指出属性是否出现,如表3-4所示。
表3-4
例如:<! ATTLIST book sales CDATA# IMPLIED>表示元素book的属性,sales为可选项。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。