您的位置:寻梦网首页编程乐园XML 编程XML技术讲座
XML 编程

XML技术讲座之三

XML DTD的建立与使用(上)

XML的精髓是允许文档的编写者制定基于信息描述、体现数据之间逻辑关系的自定义标记,确保文档具有较强的易读性、清晰的语义和易检索性。因此,一个完全意义上的XML文档不仅仅是"格式良好的",而且还应该是使用了一些自定义标记的"有效的"XML文档,也就是说,它必须遵守文档类型定义DTD中已声明的种种规定。

DTD描述了一个置标语言的语法和词汇表,也就是定义了文档的整体结构以及文档的语法。简而言之,DTD规定了一个语法分析器为了解释一个"有效的"XML文档所需要知道的所有规则的细节。

DTD的使用

一个DTD可以是内部的,包含在XML文档的前导说明部分;也可以是外部的,作为一个外部文档被引用。一个包含内部DTD的XML文档的结构为:

<?xml version = "1.0" encoding="GB2312" standalone = "yes"?>
<!DOCTYPE 根元素名[
元素描述
]>
文档体.......

外部DTD的好处是:它可以方便高效地被多个XML文档所共享。只要写一个DTD文档,就可以被多个XML文档所引用。使用外部DTD的XML文档的结构为:

<?xml version = "1.0" encoding="GB2312" standalone = "no"?>
<!DOCTYPE 根元素名SYSTEM "外部DTD文件的URL">
文档体.......

实际上,SYSTEM不是引用外部DTD的唯一方法,这个关键字主要用于引用一个作者或组织所编写的众多XML文档中通用的DTD。还存在另一种外部DTD:一个由权威机构制订的、提供给特定行业或公众使用的DTD。因此,引用外部DTD的另一个方法是使用关键字PUBLIC,引用公开给公众使用的DTD,在DOCTYPE中说明的形式为:

<!DOCTYPE 根元素 PUBLIC "DTD名称" "外部DTD的URL">

DTD中元素类型的声明

DTD中使用元素类型声明ETD(Element Type Declaration)来声明所有有效的文档元素。ETD应该采用如下的结构:

<!ELEMENT 元素名 元素内容描述>

XML的标准将元素按内容划分为四类:

  • 空元素类型。定义方式为:
    <!ELEMENT 元素名 EMPTY>
    这类元素在XML文档中使用空元素标记,元素中没有内容。

  • ANY元素类型。定义方式为:
    <!ELEMENT 元素名 ANY>
    XML文档里该元素中可以包含任何内容。建议一般只把文档的根元素规定为ANY类型。

  • 父元素类型
    这类元素中可以包含子元素,在DTD中通过正则表达式规定子元素出现的顺序和次数。语法分析器将这些正则式与XML文档内部的数据模式相匹配,判别出一个文档是否是"有效的"。 在下表中,我们列出了正则表达式中可能出现的元字符:
    元字符 含义 举例
    元素A 元素B 元素C 元素列表,无须遵从顺序要求 <!ELEMENT 联系人 (姓名 EMAIL)>
    , 并(AND),要求严格遵从顺序要求 <!ELEMENT 联系人 (姓名,EMAIL)>
    + 出现一次或多次 <!ELEMENT 联系人 (姓名,EMAIL+)>
    * 出现零次或多次 <!ELEMENT 联系人 (姓名,EMAIL*)>
    () 一组要共同匹配的表达式 <!ELEMENT 联系人 (姓名,EMAIL)+>
    | 或(OR) <!ELEMENT 联系人 (姓名,(电话|EMAIL))>
    ? 可选,不出现或出现一次 <!ELEMENT 联系人 (姓名, (电话|EMAIL), 地址?)>


  • 混合元素类型
    这类元素中可以包含文本,同时文本之间可以有选择地插入子元素,但子元素出现的顺序和次数不受限制。它的定义方式是:
    <!ELEMENT 元素名 (#PCDATA | 子元素名1 | 子元素名2 | …)*>

来源:网络世界