DTD总结

DTD 可以检测 XNM 文档的结构是否正确,就好像文章中用来保证结构正确的语法规则一样。

引入 DTD

1、引入私有的 DTD 文件,URI 可以使相对地址或绝对地址

<!DOCTYPE 根元素的名称 SYSTEM "外部 DTD 文件的 URI">

2、引入公共的 DTD 文件

<!DOCTYPE 根元素的名称 PUBLIC "DTD 的名称" "外部 DTD 文件的 URI">

DTD 名称只能包含 ASCII 字母和数字字符、空格、回车符、换行符和一些标点符号:-'()+,./?=;!@#$%*_ 。规则是:

a//DTD 所有者名称 //DTD 文档类型 //ISO639 语言标识符

  若 DTD 是 ISO 标准则 a=ISO,若是非 ISO 的标准组织批准的 DTD 则 a=+,若非标准组织批准的 DTD 则 a=-。

DTD 元素定义

语法格式:

<!ELEMENT 元素名称 使用规则>

举例:

<!ELEMENT 书架 (书名, 作者, 售价)>
<!ELEMENT 书名 (#PCDATA)>

使用规则:

(#PCDATA)
普通文本 parsed character data 的简写
(书名, 作者, 售价)
表示元素当中嵌入一堆子元素
(书名, #PCDATA)
子元素 和普通文本字符串
EMPTY
表示元素中的内容为空
例如:<!ELEMENT HR EMPTY>定义的元素形式为<HR />
ANY
表示可以为上述任何情况

定义元素出现的顺序:
每条元素定义语句的顺序是无关紧要的
具有不同用途的元素不能使用相同的元素名
一个元素的各个组成成份之间可以有各种关系:
<!ELEMENT MYFILE (TITLE AUTHOR EMATL)> 表示 xml 中子元素的出现顺序可以是随机的,只要最终出现即可
<!ELEMENT MYFILE (TITLE,AUTHOR,EMATL)> 表示 xml 中子元素的出现顺序必须按照定义的顺序出现
<!ELEMENT MYFILE (TITLE|AUTHOR|EMATL)> 表示 xml 中子元素只能出现其中一个
在元素的使用规则中可以定义子元素的出现的次数:
(MYFILE+) 表示此元素可以出现一次或者多次
(MYFILE?) 表示此元素可以出现一次或者零次
(MYFILE*) 表示此元素可以出现零次或者多次
(MYFILE) 表示此元素必须且只能出现一次
一对圆括号可用于将括在其中的内容组合成一个可统一操作的分组,分组可以嵌套更小的分组
例如 : <!ELEMENT MYFILE ((TITLE*, AUTOHOR?,EMATL)* | COMMENT)>

属性定义

语法格式:
<!ATTLIST 元素名
属性名 1 属性类型 设置说明
属性名 2 属性类型 设置说明
……
>
此语法只能定义一个元素的属性,该语法定义的属性都属于一个元素

<!ATTLIST MYFILE
NAME CDATA #IMPLIED
AGE CDATA #IMPLIED
INFO CDATA #REQUIRED
JOB CDATA #FIXED "MYFILE"
LIKE CDATA "INTER"
>
设置说明:
#REQUIRED 表示这个属性必须被设置
#IMPLIED 表示可有可无
#FIXED 表示属性取值总是为固定值 需要为其设置固定值例如"MYFILE"
直接使用默认值 也可以设置这个属性也可以不设置,例如 LIKE 若不设置则默认为"INTER"

类型:
CDATA 表示类型为普通文本字符串
ENUMENRATED 表示为枚举类型,属性的类型为固定几个
ID 唯一的用于标识某一元素
IDREF IDREFS

实体定义

实体的根本作用是为一段文本内容创建一个别名,以后在 xml 文档中就可以多次引用这个别名,
xml 解析器程序将把 xml 文档中出现的别名引用转变成其所对应的文本内容。
实体分为引用引用实体和参数实体
引用实体:

在 dtd 文件中定义,在 xml 文件中引用
语法格式:
<!ENTITY 实体名称 "实体内容"> 直接替换实体内容
<!ENTITY 实体名称 SYSTEM "外部 xml 文档的 URL"> 将引用的 xml 文件插入引用的位置
引用方式:
& 实体名称 ;

参数实体:
在 dtd 文件中定义,在 dtd 文件中引用
语法格式:
<!ENTITY % 实体名称 "实体内容" >
引用方式:
% 实体名称 ;
可将参数实体用于定义属性中
<!ENTITY % common.attributes
' id ID #IMPLIED
account CDATA #REQUIRED
>
<!ATTLIST purchaseOrder %common.attributes;>
<!ATTLIST item %common.attributes;>

posted @ 2013-07-29 08:51  薛遗山  阅读(576)  评论(0编辑  收藏  举报