说起DTD首先介绍一下xml文件的作用:
1.数据交互
2.做配置
一个标准的xml文件的格式一定要满足一下几点:
1.有且只有一个根元素
2.xml文件一定要区分大小写
3.正确使用结束标签
4.正确嵌套标签
5.使用合法的标签名(?,@这些符号是不合法的)
6.定义有效属性
了解以上后再来说说元素的定义吧!
1.xml文件元素的定义
首先,要定义xml文件元素必须加入DTD声明(<!DOCTYPE 根节点名称[ ]>),
然后在[]中定义元素,例如:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app [
<!ELEMENT web-app (servlet+,servlet-mapping+)>
<!ELEMENT servlet (servlet-name+,servlet-class+)>
<!ELEMENT servlet-mapping (servlet-name,url-pattern+)>
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT servlet-class (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>
]>
<web-app>
<servlet>
<servlet-name>jrebelServlet</servlet-name>
<servlet-class>com.zking.xml.JrebelServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>jrebelServlet2</servlet-name>
<servlet-class>com.zking.xml.JrebelServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>jrebelServlet</servlet-name>
<url-pattern>/jrebelServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>jrebelServlet2</servlet-name>
<url-pattern>/jrebelServlet2</url-pattern>
<url-pattern>/jrebelServlet3</url-pattern>
</servlet-mapping>
</web-app>
2.xml文件元素的分类
1. EMPTY 空元素 例如:</br>
2.#PCDATA 文本元素 例如:<div>哈哈哈</div>
3.(e1,e2)混合元素 也就是元素里面包含其他元素 一个或多个
3.元素的限制
1.与(,)或(|)
2.次数
2.1 (?)表示0或1次
2.2( * )表示0-N次
2.3 (+)表示1-N次
注意:元素分类时要用大写要用括号括起来(empty除外)
如果某个元素是混合元素,在括号内写元素时一定要按顺序,否则编译报错,如果某元素内有同一个元素出现两次,建议把它们移到一起,否则容易报错
写完约束后不能在xml文件内加入标签和内容,否则编译错误
4.xml文件元素属性的定义
语法:<!ATTLIST 元素名 属性>
属性类型
1.ID 表示唯一
2.(男|女)‘男’ 二选一,有默认值
3.CDATA 文本类型
4.IDREF 依赖 引用已经出现过的类型
属性描述
1.#REQUIRED 必填
2.#IMPLIED 非必填
3.‘默认值’ 只有type为上面属性类型第二点的时候才能用
具体操作看以下代码:
<?xml version="1.0" encoding="UTF-8"?>
<!--
config标签:可以包含0~N个action标签
-->
<!DOCTYPE config [
<!ELEMENT config (action*)>
<!ELEMENT action (forward*)>
<!ELEMENT forward EMPTY>
<!ATTLIST action
path CDATA #REQUIRED
type CDATA #REQUIRED
>
<!ATTLIST forward
name ID #REQUIRED
path CDATA #REQUIRED
redirect (false|true) 'false'
>
]>
<config>
<!--
action标签:可以饱含0~N个forward标签 path:以/开头的字符串,并且值必须唯一 非空 ,子控制器对应的路径
type:字符串,非空,子控制器的完整类名
-->
<action path="/registerAction" type="test.action.RegisterAction">
<forward name="success" path="/index.jsp" redirect="true" />
<forward name="failed" path="/register.jsp" redirect="false" />
</action>
<action path="/loginAction" type="test.action.LoginAction">
<forward name="a" path="/index.jsp" redirect="false" />
<forward name="b" path="/welcome.jsp" redirect="true" />
</action>
</config>
注意:ID类型的内容不能包含 ‘/’ 符号