1、DTD介绍
DTD(Document Type Definition),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。
2、DTD重点要求
开发中,我们很少自己编写DTD约束文档,通常情况我们都是通过框架提供的DTD约束文档,编写对应的XML文档。常见框架使用DTD约束有:struts2、hibernate等。
通过提供的DTD"web-app_2_3.dtd"编写XML
<?xml version="1.0" encoding="UTF-8"?>
<!--
模拟servlet2.3规范,如果开发人员需要在xml使用当前DTD约束,必须包括DOCTYPE。
格式如下:
<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
-->
<!ELEMENT web-app (servlet*,servlet-mapping* , welcome-file-list?) >
<!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))>
<!ELEMENT servlet-mapping (servlet-name,url-pattern+) >
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT servlet-class (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT jsp-file (#PCDATA)>
<!ELEMENT welcome-file-list (welcome-file+)>
<!ELEMENT welcome-file (#PCDATA)>
<!ATTLIST web-app version CDATA #IMPLIED>
3、案例实现
步骤1:创建web.xml文档,并将“web-app_2_3.dtd”拷贝到相同目录下
步骤2:从DTD文档开始处,拷贝需要的“文档声明”<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">到xml文档中。
步骤3:完成xml内容编写
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
<web-app version="2.3">
<servlet>
<servlet-name></servlet-name>
<servlet-class></servlet-class>
</servlet>
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file></welcome-file>
<welcome-file></welcome-file>
<welcome-file></welcome-file>
</welcome-file-list>
</web-app>
4、DTD语法
4.1、文档说明
4.1.1、内部DTD,在XML文档内部嵌入DTD,只对当前XML有效。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE web-app [
...//具体的语法
]>
<web-app >
</web-app>
4.1.2、外部DTD-本地DTD,DTD文档在本地系统上,公司内部自己项目使用。
<?xml version="1.0" encoding="UTF-8" atandalone="no" ?>
<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
<web-app >
</web-app>
4.1.3、外部DTD-公共DTD,DTD文档在网络上,一般都有框架提供
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app >
</web-app>
4.2、元素声明
定义元素语法:<!ELEMENT 元素名 元素描述>
元素名:自定义
元素描述包括:符号和数据类型
常见符号: ? * + () | ,
常见类型:#PCDATA 表示文本内容时文本,不能是子标签
4.3、属性声明
属性的语法:(attribute)
<!ATTLIST 元素名
属性名 属性类型 约束
属性名 属性类型 约束
...
>
元素名:属性必须是给元素添加,所有必须先确定元素名
属性名:自定义
属性类型: ID、CDATA、枚举...
ID : ID类型的属性用来标识元素的唯一性
CDATA : 文本类型
枚举 : (e1 | e2 | ...)多选一
约束:
#REQUIERED :说明属性是必须的:required
#IMPLIED :说明属性是可选的:implied