1.DTD概述
文档类型定义(Document Type Definition)是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。它是标准通用标记语言(SGML)和可扩展标记语言(XML)1.0版规格的一部分,文档可根据某种DTD语法规则验证格式是否符合此规则。文档类型定义也可用做保证标准通用标记语言、可扩展标记语言文档格式的合法性,可通过比较文档和文档类型定义文件来检查文档是否符合规范,元素和标签使用是否正确。文件实例提供应用程序一个数据交换的格式。其中,内部放到xml中,文档声明下,根元素上,以 “<!DOCTYPE 根元素名称[” 开头,以 “]” 结束
简而言之,DTD就是用来约束XML文档的,使其在一定的规范下使用,除了DTD技术外,还有Schema技术,也是用于约束XML文档的。
2.DTD的分类
DTD分为内部DTD和外部DTD,其中外部DTD又可以分为SYSTEM(本地的)的PUBLIC(网上的)
内部DTD
- 放到xml中,文档声明下,根元素上,以“<!DOCTYPE 根元素名称[开头,以]”结束
- 内部DTD只对当前×ml文件有效。
外部DTD
SYSTEM DTD
放到当前计算机中
语法:<!DOCTYPE 根元素 SYSTEM “dtd文件路径”>
PUBLIC DTD
放到网络上
语法:<!DOCTYPE 根元素 PUBLIC “dtd名称” “dtd路径”>
3.DTD语法之定义元素
定义元素语法:<!ELEMENT NAME CONTENT>
解释:
ELEMENT:关键字(必须大写)。
NAME:元素名称。
CONTENT:元素类型(元素描述),有四种,都必须大写。
1.EMPTY-该元素不能包含子元素和文本,但可以有属性(空元素)
2.ANY-该元素可以包含任何在DTD中定义的元素内容
3.#PCDATA-可以包含任何字符数据,但是不能在其中包含任何子元素
4.其它类型(组合),可以是子元素,子元素与修饰符组合,基本元素与子元素与修饰符组合。
案例:
<!ELEMENT 班级 (学生+,作者)>
<!ELEMENT 学生 (名字,年龄,介绍)>
<!ELEMENT 作者 (a,b,c)> -->子元素内容,必修按顺序出现
<!ELEMENT 名字 (#PCDATA)> -->文本内容
<!ELEMENT 年龄 (ANY)> -->对内容不做限制
<!ELEMENT 介绍 (EMPTY)> -->空元素
子元素出现次数
可以使用*
、+
、?
来指定子元素出现的次数:
*
:可以出现0~N次+
:可以出现1~N 次?
:可以出现0~1次
4.DTD语法之定义属性
(1)定义属性的语法
<!ATTLIST 元素名 属性名 属性类型 设置说明>
<!ATTLIST student number CDATA #REQUIRED>
(2)属性设置说明
- 给student元素定义属性number,类型为文本
- #REQUIRED说明属性是必须的
- #IMPLIED说明属性是可选的
- 在不给出属性时,使用默认值——可选的
(3)属性的类型
- CDATA:文本类型;
- Enumerated:枚举类型;
- ID:ID类型,ID类型的属性用来标识元素的唯一性,即元素的ID属性值不能与其他元素的ID属性值相同;
- IDREF:ID引用类型,用来指定另一个元素,与另一个元素建立关联关系,IDREF类型的属性值必须是另一个元素的ID。
5.实体
实体分类
一般实体:定义在DTD中,实体引用在xml
参数实体:定义实体在DTD中,实体引用还在DTD(内部DTD不太好使)中。
(1)定义实体:定义变量
语法:
<!ENTITY 实体名 “实体值”>
<!ENTITY itcast "北京"
(2)引用实体:使用变量
<student number="ID_9012" name="wnagwu" friend="ID_4567" school="&itcast;"/>
(3)定义参数实体
<!ENTITY % 实体名 “实体值”> <!ENTITY % friend "student friend IDREF #IMPLIED">(4)引用参数实体
<!ATTLIST %friend;>
转换成
<!ATTLIST student friend IDREF #IMPLIED>
6.Schema约束
与DTD作用相同,区别:
- DTD约束文件扩展名dtd
- Schema约束文件扩展名xsd
- DTD不是xml
- Schema本身就是xml
- Schema要比DTD强大很多倍,它有更加详细的类型
1.填写xml文档的根元素
2.引入xsi前缀.
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3.引入xsd文件命名空间.
xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
4.为每一个xsd约束声明一个前缀,作为标识
xmlns="http://www.itcast.cn/xml"