XML学习总结二——DTD

时间:2022-05-05 16:01:29

主要用处是约束XML。

1.DTD分为内部DTD外部DTD两类;

内部DTD:将DTD定义在XML文档的内部

<!DOCTYPE  根元素名  [
    元素描述
]>

外部DTD

<!DOCTYPE 根元素名  SYSTEM  “DTD文件名">

外部DTD的优势:
定义一份DTD文档,就可以方便地被多个XML文档共享
当语义约束需要改变时,无需为每份XML文档改变DTD定义,只需改变它们共享的外部DTD即可

2.声明元素:DTD必须定义XML文档中允许出现的所有元素
<!ELEMENT 元素名称  元素类别>

或者

<!ELEMENT 元素名称  (元素内容)>

元素类别/元素内容:
ANY:定义任意类型元素,这种元素可以是字符串,也可以包含子元素,也可以是空元素
EMPTY:定义空元素,不能包含子元素,也不可以包含字符串值
#PCDATA:定义元素的内容只能是字符串,不能包含其他子元素,也不可以是空元素
包含子元素:定义元素的子元素之间的顺序和出现的频率等
混合类型:定义元素的取值是几个确定的类型的混合

3.定义子元素

<!ELEMENT 元素名称  (子元素名)>

子元素的出现频率
通过在元素声明后加上特殊标记,可以定义元素出现的频率:
+:表明子元素可以出现1次或多次
*:表明子元素可以出现0次或多次
?:表明子元素 可以出现0次或1次
无标记:表明子元素只能且必须出现一次

4.定义元素属性

<!ATTLIST 所属的元素名  属性名称  属性类型  属性默认值>

语法

描述

“属性值”

设置属性默认值

#REQUIRED

属性值是必需的

#IMPLIED

属性不是必需的

#FIXED value

属性值是固定的

5.实体
DTD中允许用户自定义实体,所谓实体定义类似于C语言的宏变量,即为一段字符串数据提供一个别名,实体被声明后,就可在其它地方被引用
DTD中定义的实体,可以在XML文档中引用,也可以在DTD中引用
实体类别

XML学习总结二——DTD

实体的作用:
提高代码复用,方便维护
XML中使用一些特殊符号时,会使XML解析器混淆,因此需要为这些符号定义为实体,例如大于或小于符号等,系统已定义好这些实体
对于长度较长并且需要反复使用到的字符串,为了减少字符输入量,可以将其定义为实体

定义内部实体:只能在XML中引用

<!ENTITY  实体名称   “实体值”>

XML中使用实体

&实体名;

定义外部实体:不在DTD中定义,在外部文件中指定

<!ENTITY  实体名称  SYSTEM   “实体所在文件的URI/URL">

引用

&实体名;

定义参数实体:只能在DTD中引用

<!ENTITY  %  实体名称   “实体值”>

DTD中引用参数实体

%实体名;

6.定义命名空间
通过使用xmlns或xmlns:prefix属性来定义命名空间
命名空间定义在元素的开始标签之中

定义:xmlns[:prefix] = "namespaceURI“
使用:<prefix:元素名/属性名>