一、文档声明
1. 内部DTD(在XML文档内部嵌入DTD,只对当前XML有效)
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!DOCTYPE 根元素名称 [...//具体语法]>
<根元素名称>
....
</根元素名称>
2. 外部DTD-本地DTD(DTD文档在本地系统上,公司内部自己项目使用)
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE 根元素名称 SYSTEM "DTD文件路径">
<根元素名称>
....
</根元素名称>
3. 外部DTD-公共DTD(DTD文档在网络上,一般都有框架提供)
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE 根元素名称 PUBLIC "DTD名称" "DTD文件的URL">
<根元素名称>
...
</根元素名称>
二、元素声明
定义元素语法:<!ELEMENT 元素名 元素描述>
元素名:自定义
元素描述包括:
符号和数据类型
常见符号: ? * + () | ,
常见数据类型: #PCDATA 表示内容是文本,不能是子标签
符号 | 符号类型 | 描述 | 示例 |
? | 问号 | b表示该对象可以出现,但只能出现一次 | (篮球?) |
* | 星号 | b表示该对象可以出现,可以出现任意次,也可以是零次 | (运动*) |
+ | 加号 | b表示该对象可以出现,最少出现一次,也可以出现多次 | (成员+) |
() | 括号 | b表示用来给元素分组 | (足球|羽毛球|乒乓球), (铅球|篮球),网球 |
| | 竖条 | b表示在列出的对象中选择一个 | (乒乓球|篮球) |
, | 逗号 | b表示对象必须按指定的顺序出现 | (乒乓球,篮球,羽毛球) |
三、属性声明
语法 : <!ATTLIST 元素名称 属性名称 属性类型 属性的约束>
属性类型:CDATA:字符串 如:<!ATTLIST birthday ATT CDATA #REQUIRED>
枚举 : 表示只能在一定的范围内出现值,但是只能每次出现其中的一个 如<!ATTLIST age ATT2 (AA|BB|CC) #REQUIRED>
ID : 值只能是字母或者下划线开头 <!ATTLIST name ATT3 ID #REQUIRED>
属性的约束:
#REQUIRED:属性必须存在
#IMPLIED:属性可有可无
#FIXED:表示一个固定值 <!ATTLIST sex ATT4 CDATA #FIXED "ABC">
直接值:不写属性,使用直接值,写了属性,使用设置那个值 <!ATTLIST school ATT5 CDATA "WWW">
四、实例
1.实例1
<stus>
<stu>
<name>mark</name>
<age>18</age>
</stu>
</stus>
<!-- xml文档里面直接嵌入DTD的约束法则 -->
<!DOCTYPE stus [
<!ELEMENT stus (stu)>
<!ELEMENT stu (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
2.实例2
<?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>