DTD如何实现约束XML文件

1.什么是DTD

       文档类型定义(DTD,Document Type Definition)是一种特殊文档,它规定、约束符合标准通用标示语言(SGML)或SGML子集可扩展标示语言(XML)规则的定义和陈述。

2.如何使用DTD

2.1XML文件格式要求

     在使用DTD之前先了解一下XML格式要求:
              1.有且只有一个根节点
              2.由开始标签和结束标签组成;
              3.XML标签区分大小写
              4.正确嵌套标签;

2.2使用DTD申明

      在了解完XML文件格式要求后,我们可以在XML格式基础上定义DTD约束,那我们该如何在XML中加入DTD申明呢?
      先了解一下如何在XML中加入DTD申明,方式有两种,包括内部申明外部申明
            外部申明

<!DOCTYPE 文档根节点 SYSTEM "DTD文件名">

            内部申明

<!DOCTYPE 文档根节点[定义内容]>

      内部申明中的[ ]里由元素定义语法(DTD对元素的限制)与属性定义语法组成(DTD对属性的限制)

元素定义语法(DTD对元素的限制):

  • 基本语法:<! ELEMENT 元素名称 元素类型 >
  • 元素分类:
    EMPTY ——该元素不能包含子元素和文本,但可以有属性(空元素)
    (#PCDATA) ——可以包含任何字符数据,但是不能在其中包含任何子元素
                                                                                                    (文本元素)
    (e1,e2) ——该元素不能包含子元素和文本,但可以有属性(混合元素)
    ANY ——表示该元素可以包含任何在DTD中定义的元素内容

了解完分类后再,再来熟悉一下元素限制:

元素限制效果
,顺序
在这里插入图片描述或,多选一
?0或1次
*0次或多次
*1次或多次

属性定义语法(DTD对属性的限制)

  • 基本语法:<!ATTLIST 元素名称 属性名称 属性类型 设置说明>
  • 属性类型:ID/CDATA/ENUM (男|女)
  • 设置说明:#REQUIRED(必须)/#IMPLIED(可选)

3.案例

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 内部申明:<! DOCTYPE root[定义内容]>     root:根标签  -->
<!DOCTYPE persons[
	<!-- 元素定于语法   (对于子节点的申明) 
	             元素分类:EMPTY     空元素      <br/>
                 (#PCDATA)  文本元素   
                 (e1,e2)    混合元素
                        元素限制:,(顺序)、|(或,多选一)、?(0或1次),
                                           *(0次或多次), +(1次或多次)
	  -->
	  
	<!-- contact里面的子元素先不管,这里先只定义person的子元素 -->
	<!ELEMENT persons (person+)>
	<!ELEMENT person (name+,age+,contact+,br*)>
	
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT age (#PCDATA)>
    <!ELEMENT contact (phone|mail)>
    <!ELEMENT br EMPTY>
    <!ELEMENT phone (#PCDATA)>
    <!ELEMENT mail (#PCDATA)>
    
    <!-- 属性定义语法:<!ATTLIST 元素名称 属性名称 属性类型 设置说明> -->
    <!-- 属性类型:ID (唯一) /CDATA (文本类型) /ENUM (男|女) (枚举类型)  -->
    <!-- 设置说明:#REQUIRED(必须)/#IMPLIED(可选) -->
    <!ATTLIST person pid ID #REQUIRED
                     paddr CDATA #IMPLIED
                     psex (男|女) #IMPLIED
    >
]>



<persons>
	<person pid="p01" paddr="123" psex="">
		<name>张三</name>
		<age>22</age>
		<contact>
			<phone>15882821111</phone>
		</contact>
		<br/>
	</person>
	<person pid="p02">
		<name>李四</name>
		<age>23</age>
		<contact>
			<mail>123@qq.com</mail>
		</contact>
	</person>
</persons>

4.小编寄语

      首次在这个博客上发表文章,身为一个IT学者,深感这条路道阻且长,希望在接下来的时间里,跟大家一起进步,成为IT精英!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值