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应该采用如下的结构:
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 |
…)*>
来源:网络世界
|