DTD:文档类型定义

1 篇文章 0 订阅

目录

什么是DTD?

什么是XML?

XML的作用

XML的两种文档约束

XML格式要求(合法XML)

DTD申明

元素定义

属性定义

特殊字符转义

DTD对元素/属性的限制案例


什么是DTD?

   文档类型定义(约束)

什么是XML?

  • HTML:超文本标记语言   a/b/c/z
  • XML:可扩展标记语言(可任意定义标签,所以没有约束)

XML的作用

  • 数据交换
  • 做配置

XML的两种文档约束

  • DTD:  DTD来约束XML的文档类型定义(要求XML按照要求定义标签)
  • Schema

XML格式要求(合法XML)

  • 有且只有一个根节点        例如:下面的<persons></persons>
  • 由开始标签和结束标签组成(包含空标签),中间叫做标签体     eg:<a></a>  <br/><hr/>
  • XML标签正确区分大小写(大小写对应)
  • 正确嵌套标签
  • 正确使用结束标签
  • 定义有效的属性
<persons>
	<person pid="p01" paddr="123" psex="男">
		<name>张三</name>
		<age>22</age>
		<contact>
			<phone>select * from t_book where price&gt;200 and price&lt;300</phone>
		</contact>
		<br/>
	</person>
	<person pid="p02">
		<name>李四</name>
		<age>23</age>
		<contact>
			<mail>123@qq.com</mail>
		</contact>
	</person>
</persons>

DTD申明

  • 内部申明:<!DOCTYPE 根节点[]>
<!-- 内部申明  -->
<!DOCTYPE persons[
    ...
]>
  • 外部申明:<!DOCTYPE 根节点SYSTEM "DTD外部文件路径">
<!-- 外部申明  -->
<!DOCTYPE persons SYSTEM "test.dtd">

元素定义

  • 语法:<!ELEMENT 元素名称元素类型>
<!ELEMENT persons (person+)>
  • 类型:
    • 空元素 EMPTY
<!ELEMENT br EMPTY>
    • 文本元素:(#PCDATA)--标签里面包含的是标签体,而非子标签
<!ELEMENT name (#PCDATA)>
    • 混合元素:(e1,e2,e3,...)--标签里面包含很多子标签
<!ELEMENT person (name,age,contact,br?)>
  • 限制:
    • ,  代表:元素出现的顺序
    • |  代表:多选一
<!ELEMENT contact (phone|mail)>
    • ?  代表:元素出现0次或者1次(可有可无)
    • *  代表:元素出现0次或者N次
    • +  代表:元素出现1次或者N次

属性定义

  • 语法:<!ATTLIST 元素名称 属性名称 属性类型 设置说明>
  • 类型:
    • ID:唯一,不能以/或者数字开头
    • CDATA:文本
    • 枚举:多选一,例如:(男|女|妖) 
              不需要设置说明,枚举一般设默认约束,默认约束说明该属性有值 
  • 设置说明:
    • 必须:#REQUIRED
    • 可选:#IMPLIED
<!ATTLIST person
		pid ID #REQUIRED
		paddr CDATA #IMPLIED
		psex (男|女|妖) "男"
>

特殊字符转义

  • >(大于)        &gt;
  • <(小于)        &lt;
  • &        &amp;
  • '(单引号)         &apos;
  • "(双引号)        &quot;

DTD对元素/属性的限制案例

  •  person.xml
<!-- 内部申明  -->
<!DOCTYPE persons[
	<!ELEMENT persons (person+)>
	<!ELEMENT person (name,age,contact,br?)>
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT age (#PCDATA)>
	<!ELEMENT contact (phone|mail)>
	<!ELEMENT phone (#PCDATA)>
	<!ELEMENT mail (#PCDATA)>
	<!ELEMENT br EMPTY>
	<!ATTLIST person
		pid ID #REQUIRED
		paddr CDATA #IMPLIED
		psex (男|女|妖) "男"
	>
]> 
<persons>
	<person pid="p01" paddr="123" psex="男">
		<name>张三</name>
		<age>22</age>
		<contact>
			<phone>select * from t_book where price&gt;200 and price&lt;300</phone>
		</contact>
		<br/>
	</person>
	<person pid="p02">
		<name>李四</name>
		<age>23</age>
		<contact>
			<mail>123@qq.com</mail>
		</contact>
	</person>
</persons>
<!-- 外部申明  -->
<!DOCTYPE persons SYSTEM "test.dtd">
<persons>
	<person pid="p01" paddr="123" psex="男">
		<name>张三</name>
		<age>22</age>
		<contact>
			<phone>select * from t_book where price&gt;200 and price&lt;300</phone>
		</contact>
		<br/>
	</person>
	<person pid="p02">
		<name>李四</name>
		<age>23</age>
		<contact>
			<mail>123@qq.com</mail>
		</contact>
	</person>
</persons>


test.dtd:
<?xml version="1.0" encoding="UTF-8"?>
	<!ELEMENT persons (person+)>
	<!ELEMENT person (name,age,contact,br?)>
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT age (#PCDATA)>
	<!ELEMENT contact (phone|mail)>
	<!ELEMENT phone (#PCDATA)>
	<!ELEMENT mail (#PCDATA)>
	<!ELEMENT br EMPTY>
	<!ATTLIST person
		pid ID #REQUIRED
		paddr CDATA #IMPLIED
		psex (男|女|妖) "男"
	> 

  •  servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE servlet[
	<!ELEMENT servlets (servlet-class,servlet-name+)>
	<!ELEMENT servlet-class (#PCDATA)>
	<!ELEMENT servlet-name (#PCDATA)>
]>

<servlets>
	<servlet-class>com.zking.IndexServlet</servlet-class>
	<servlet-name>index</servlet-name>
</servlets>
  •  config.xml
<?xml version="1.0" encoding="UTF-8"?>
	<!--
		config标签:可以包含0~N个action标签
	-->
<!-- 外部申明  -->
<!DOCTYPE persons SYSTEM "config.dtd">
<config>
	<!--
		action标签:可以饱含0~N个forward标签
		path:以/开头的字符串,并且值必须唯一 非空
		type:字符串,非空
	-->
	<action path="/regAction" type="test.RegAction">
		<!--
			forward标签:没有子标签; 
			name:字符串,同一action标签下的forward标签name值不能相同 ;
			path:以/开头的字符串
			redirect:只能是false|true,允许空,默认值为false
		-->
		<forward name="failed" path="/reg.jsp" redirect="false" />
		<forward name="success" path="/login.jsp" redirect="true" />
	</action>

	<action path="/loginAction" type="test.LoginAction">
		<forward name="failed" path="/login.jsp" redirect="false" />
		<forward name="success" path="/main.jsp" redirect="true" />
	</action>
</config>
<?xml version="1.0" encoding="UTF-8"?>
	<!ELEMENT config (action*)>
	<!ELEMENT action (forward*)>
	<!ATTLIST action
		path CDATA #REQUIRED
		type CDATA #REQUIRED
	> 
	<!ATTLIST forward
		name CDATA #REQUIRED
		path CDATA #REQUIRED
		redirect (true|false) "false"
	>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值