XML格式验证——DTD

        我们要写出格式良好的XML文档,就需要对XML文档进行格式验证。目前验证XML文档的格式验证有两种方式:DTD和Schema。

       DTD(Document Type Definition) 是一套关于标记符的语法规则。它是XML1.0版规格的一部分,是XML文件的验证机制,属于XML文件组成的一部分。DTD 是一种保证XML文档格式正确的有效方法,可通过比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能成为数据交换标准,因为不同的公司只需定义好标准DTD,各公司都能依DTD建立XML文件,并且进行验证,如此就可以轻易的建立标准和交换数据,这样满足了网络共享和数据交互。DTD文件是一个ASCII文本文件,后缀名为.dtd。

       这里我们通过一个实例,对DTD的使用方法进行了解。

<?xml version="1.0" encoding="UTF-8"?>
<!--
	DTD中的元素(ELEMENT):?表示0次或1次,*表示0次或多次,+表示一次或多次,默认为1次
						|:表示枚举的元素至少出现一种
	DTD中元素的属性(ATTLIST):
	属性类型:CDATA 			值为字符数据 (character data)
			(en1|en2|..) 	此值是枚举列表中的一个值	
			ID 				值为唯一的 id	
			IDREF 			值为另外一个元素的 id
			IDREFS 			值为其他 id 的列表
			NMTOKEN 		值为合法的 XML 名称
			NMTOKENS 		值为合法的 XML 名称的列表
			ENTITY 			值是一个实体
			ENTITIES 		值是一个实体列表
			NOTATION 		此值是符号的名称
			xml: 			值是一个预定义的 XML 值
	属性参数:
			#REQUIRED 		属性值是必需的
			#IMPLIED 		属性不是必需的
			#FIXED value 	属性值是固定的
-->
<!DOCTYPE students [
	<!ELEMENT students (student+)>
	<!ELEMENT student (name, sex?, (age|birthday)?,course+)>
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT age (#PCDATA)>
	<!ELEMENT birthday (#PCDATA)>
	<!ELEMENT sex (#PCDATA)>
	<!ELEMENT hobby (#PCDATA)>
	<!ELEMENT course (#PCDATA)>
	
	<!ATTLIST student id ID #REQUIRED>
	<!ATTLIST student sex CDATA #IMPLIED>
	<!ATTLIST student valid CDATA #FIXED "1">
	<!ATTLIST course cid (YW|SX|YY|WL|HX) "YW">
]>
<students>
	<student id="s1" valid="1">
		<name>张三</name>		
		<sex>男</sex>
		<course cid="HX">化学</course>	
	</student>
	<student id="s2" sex="男">
		<name>李四</name>
		<birthday>1993-02-29</birthday>
		<course cid="YY">英语</course>		
	</student>
	<student id="s3">
		<name>小红</name>
		<sex>女</sex>
		<age>19</age>
		<course cid="YW">语文</course>
	</student>
</students>


       通常情况下,我们需要将XML内容和验证分开。

       1.新建stu.dtd,将XML文档验证的代码移入该文件:

<?xml version="1.0" encoding="UTF-8"?>
<!--
	DTD中的元素(ELEMENT):?表示0次或1次,*表示0次或多次,+表示一次或多次,默认为1次
						|:表示枚举的元素至少出现一种
	DTD中元素的属性(ATTLIST):
	属性类型:CDATA 			值为字符数据 (character data)
			(en1|en2|..) 	此值是枚举列表中的一个值	
			ID 				值为唯一的 id	
			IDREF 			值为另外一个元素的 id
			IDREFS 			值为其他 id 的列表
			NMTOKEN 		值为合法的 XML 名称
			NMTOKENS 		值为合法的 XML 名称的列表
			ENTITY 			值是一个实体
			ENTITIES 		值是一个实体列表
			NOTATION 		此值是符号的名称
			xml: 			值是一个预定义的 XML 值
	属性参数:
			#REQUIRED 		属性值是必需的
			#IMPLIED 		属性不是必需的
			#FIXED value 	属性值是固定的
-->
<!ELEMENT students (student+)>
<!ELEMENT student (name, sex?, (age|birthday)?,course+)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT birthday (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT hobby (#PCDATA)>
<!ELEMENT course (#PCDATA)>

<!ATTLIST student id ID #REQUIRED>
<!ATTLIST student sex CDATA #IMPLIED>
<!ATTLIST student valid CDATA #FIXED "1">
<!ATTLIST course cid (YW|SX|YY|WL|HX) "YW">

       2.在同一个目录下新建stu.xml,将XML文档内容代码移入该文件,并引入DTD验证文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "stu.dtd">
<students>
	<student id="s1" valid="1">
		<name>张三</name>		
		<sex>男</sex>
		<course cid="HX">化学</course>	
	</student>
	<student id="s2" sex="男">
		<name>李四</name>
		<birthday>1993-02-29</birthday>
		<course cid="YY">英语</course>		
	</student>
	<student id="s3">
		<name>小红</name>
		<sex>女</sex>
		<age>19</age>
		<course cid="YW">语文</course>
	</student>
</students>


至此,我们的实例就编写完成!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值