前情提要与本文内容介绍
前面的两篇XML相关博文:
第一篇是介绍格式正规的XML:
第二篇介绍DTD,引入有效的XML的概念(符合语法规范并符合DTD要求),并介绍DTD的三种使用方法:
一个有效的XML文档必然是结构正规的,结构正规的XML文档不一定是有效的,即有效的是格式正规的一个子集。
本文详细介绍DTD,包括其对元素的定义,属性的定义,以及实体的定义。
元素的定义
DTD中的修饰符号:
这部分符号可以联系正则表达式的符号来记忆。
属性的定义
属性类型——CDATA
比如:
定义了一个属性,是属于title元素的,属性名叫name,类型是字符串(包括数字和中文),并且是一个必须要有的属性。
属性类型——NMTOKEN/NMTOKENS
左边图中因为加了空格而出错。
属性类型——ID
类型为ID的属性取值必须是唯一的。
从这个例子还可以看到同一个元素可以一次定义多个属性,多个属性之间用空格分隔即可。
属性类型——IDREF/IDREFS
(“儿子”后面漏掉了一个斜线)
属性类型——Enumerated
实现定义好一些值,属性的值必须在所列出的值的范围内。
属性的特点
#REQUIRED
元素的所有实例都必须有该属性的值(NOT NULL)。
语法:
DTD示例:
XML示例:
#IMPLIED
元素的实例中可以忽略该属性(NULL)。
语法:
DTD示例:
XML示例:
没有这个属性也是对的。
#FIXED value
元素实例中该属性的值必须为指定的固定值。
语法:
DTD示例:
XML示例:
Default value
为属性提供一个默认的值。
语法:
DTD示例:
XML示例:
定义实体
一般
语法:
DTD示例:
XML示例:
&writer;©right;
外部实体:
语法:
DTD示例:
XML示例:
&writer;©right;
与上面的区别就是加上了SYSTEM关键字。
这样就不是使用网址的字符串来代替,而是用网址的文档本身内容。
实体类型
前面所讲的都是普通实体,分为内部实体和外部实体。
所谓参数实体,该实体实际上不是在具体实例化文档中使用,而是在DTD文档内部被使用。
我们可以定义一个实体,然后在DTD内部来引用它。
如下:
总结如下:
普通实体:DTD中定义,XML中使用,使用格式: &名;
参数实体:DTD中定义,定义的时候要用%,DTD中使用,使用格式: %名;
普通实体和参数实体都分为内部实体和外部实体两种,外部实体定义需要加上SYSTEM关键字,其内容是URL所指向的外部文件实际的内容。
如果不加SYSTEM关键字,则为内部实体,表示实体指代内容为字符串。