1.什么是DTD
文档类型定义(DTD,Document Type Definition)是一种特殊文档,它规定、约束符合标准通用标示语言(SGML)或SGML子集可扩展标示语言(XML)规则的定义和陈述。
2.如何使用DTD
2.1XML文件格式要求
在使用DTD之前先了解一下XML格式要求:
1.有且只有一个根节点;
2.由开始标签和结束标签组成;
3.XML标签区分大小写;
4.正确嵌套标签;
2.2使用DTD申明
在了解完XML文件格式要求后,我们可以在XML格式基础上定义DTD约束,那我们该如何在XML中加入DTD申明呢?
先了解一下如何在XML中加入DTD申明,方式有两种,包括内部申明和外部申明
外部申明
<!DOCTYPE 文档根节点 SYSTEM "DTD文件名">
内部申明
<!DOCTYPE 文档根节点[定义内容]>
内部申明中的[ ]里由元素定义语法(DTD对元素的限制)与属性定义语法组成(DTD对属性的限制)
元素定义语法(DTD对元素的限制):
- 基本语法:<! ELEMENT 元素名称 元素类型 >
- 元素分类:
EMPTY ——该元素不能包含子元素和文本,但可以有属性(空元素)
(#PCDATA) ——可以包含任何字符数据,但是不能在其中包含任何子元素
(文本元素)
(e1,e2) ——该元素不能包含子元素和文本,但可以有属性(混合元素)
ANY ——表示该元素可以包含任何在DTD中定义的元素内容
了解完分类后再,再来熟悉一下元素限制:
元素限制 | 效果 |
---|---|
, | 顺序 |
或,多选一 | |
? | 0或1次 |
* | 0次或多次 |
* | 1次或多次 |
属性定义语法(DTD对属性的限制)
- 基本语法:<!ATTLIST 元素名称 属性名称 属性类型 设置说明>
- 属性类型:ID/CDATA/ENUM (男|女)
- 设置说明:#REQUIRED(必须)/#IMPLIED(可选)
3.案例
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 内部申明:<! DOCTYPE root[定义内容]> root:根标签 -->
<!DOCTYPE persons[
<!-- 元素定于语法 (对于子节点的申明)
元素分类:EMPTY 空元素 <br/>
(#PCDATA) 文本元素
(e1,e2) 混合元素
元素限制:,(顺序)、|(或,多选一)、?(0或1次),
*(0次或多次), +(1次或多次)
-->
<!-- contact里面的子元素先不管,这里先只定义person的子元素 -->
<!ELEMENT persons (person+)>
<!ELEMENT person (name+,age+,contact+,br*)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT contact (phone|mail)>
<!ELEMENT br EMPTY>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT mail (#PCDATA)>
<!-- 属性定义语法:<!ATTLIST 元素名称 属性名称 属性类型 设置说明> -->
<!-- 属性类型:ID (唯一) /CDATA (文本类型) /ENUM (男|女) (枚举类型) -->
<!-- 设置说明:#REQUIRED(必须)/#IMPLIED(可选) -->
<!ATTLIST person pid ID #REQUIRED
paddr CDATA #IMPLIED
psex (男|女) #IMPLIED
>
]>
<persons>
<person pid="p01" paddr="123" psex="男">
<name>张三</name>
<age>22</age>
<contact>
<phone>15882821111</phone>
</contact>
<br/>
</person>
<person pid="p02">
<name>李四</name>
<age>23</age>
<contact>
<mail>123@qq.com</mail>
</contact>
</person>
</persons>
4.小编寄语
首次在这个博客上发表文章,身为一个IT学者,深感这条路道阻且长,希望在接下来的时间里,跟大家一起进步,成为IT精英!!!