学习下XML的约束模块DTD

一、什么是DTD

DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
DTD的实例:

<!DOCTYPE NEWSPAPER [

<!ELEMENT NEWSPAPER (ARTICLE+)>
<!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)>
<!ELEMENT HEADLINE (#PCDATA)>
<!ELEMENT BYLINE (#PCDATA)>
<!ELEMENT LEAD (#PCDATA)>
<!ELEMENT BODY (#PCDATA)>
<!ELEMENT NOTES (#PCDATA)> 

<!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED>
<!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>
<!ATTLIST ARTICLE DATE CDATA #IMPLIED>
<!ATTLIST ARTICLE EDITION CDATA #IMPLIED>

]>

以上为声明在XML文件中的一个DTD示例
简单来说,dtd可以约束你在XML文件中写的标签和属性等相关信息。

二、DTD的三种引入方式

(1)引入外部的dtd文件

<!DOCTYPE  根元素的名称  SYSTEM  “dtd文件路径”>

(2)使用内部dtd,即将dtd内容直接写在XML文件中

<!DOCTYPE  根元素的名称  [DTD文件中的内容]>

(3)使用网络上的dtd文件

<!DOCTYPE  根元素的名称 PUBLIC  “DTD名称”  “DTD文档的url”>

在这里插入图片描述
上图是一个使用网络dtd文件的示例。

三、使用dtd来定义元素

(1)语法

<!ELEMENT  元素名称  元素约束>

(2)简单元素和复杂元素
简单元素:就是没有子元素的元素

<!ELEMENT  name  (#PCDATA)>

(#PCDATA)就代表一种约束,约束简单元素name标签内部只能放字符串,相似的还有EMPTY和ANY表示简单元素里面不放东西,为一个空标签或者里面可以放任意类型(可以为空,也可以放字符串)
复杂元素:有子元素的元素

<!ELEMENT  元素名称  (子元素)>

例如:

<!ELEMENT person  (name,age,school)>

则代表person元素只有三个子元素name,age,school

<person>
	<name>zhangsan</name>
	<age>20</name>
	<school>ZJU</school>
</person>

但是以上定义的子元素只能出现一次,但要是想出现多次,就需要用到一些特殊符号(这和正则匹配的规则有相似之处)

+  :表示一次或者多次
*  :表示0次或者多次
? :表示0次或者一次

例如

<!ELEMENT person  (name+,age*,school?)>

则代表person内子标签name至少得出现一次,age可以出现0次或者多次,school可以出现0次或者一次

四、使用dtd来定义属性

(1)语法

<!ATTLIST  元素名称
	属性名称  属性类型  属性约束
>

(2)属性类型
有三种:

  • CDATA:表示属性的取值为普通的字符串

  • ENUMERATED:表示枚举,只能从枚举类型中任选其一

  • ID:表示属性的取值不能重复,属性的值只能由字母、下划线开头,不能出现空白字符
    (3)属性约束
    有三种:

  • #REQUIRED:表示该属性必须出现

  • #IMPLIED:表示该属性可有可无

  • #FIXED:表示该属性为一个固定值,语法:#FIXED “固定值”

  • 直接值:表示填写了该属性时为填写的属性值,没有填写为该默认值
    定义属性示例:
    在这里插入图片描述

五、定义引用实体

(1)语法:

<!ENTITY 实体名称 “实体内容”>

定义了实体之后,就可以在XML中使用

&实体名称;

XML中会自动用实体内容替代,这样可以简化代码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值