dtd规范

本文深入探讨了可扩展标记语言(XML)及其与文档类型定义(DTD)的关系,详细解释了DTD如何规范XML文档的结构和内容,包括元素、属性、实体等的定义与使用。
  • 可扩展标记语言(Extensible Markup Language)

  • 默認字符集:UTF-8

  • DTD(Document Type Definition,文档类型定义)是一套标记的语法规则,它定义了元素、子元素、属性及其取值,规定了用户在DTD关联的XML文档中可以使用什么标记、各个标记出现的顺序以及标记的层次关系,并定义了实体。

含义

#REQUIRED

用来告诉XML解析程序,该元素的所有实例都必须有该属性的值,就像数据表中某一个字段为NOT NULL一样

#IMPLIED

表示如果该元素的实例中没有指定该元素的值的话,就忽略该属性,就像在数据表中某一个字段的值可以为NULL一样

#FIXED value

表示包含该属性的元素实例必须在指定列出的值中

比如一个属性名称为学员:学员 CDATA #FIXED "张三“ 表示属性值只能取“张三”

Defaultvalue

为属性提供一个默认的值。

比如一个属性名称为学员:学员CDATA "张三"

如果在该属性的实例中没有包含这个属性的话,解析器就认为该属性的值就是“张三”,如果在该属性的实例中包含了这个属性并赋值了的话,就采用这个赋值

类型

具体的含义说明

CDATA

这个类型表明该属性只能包含字符数据

ID

该属性的取值必须是唯一的,在一个文档内两个ID属性的值不能一样

IDREF、IDREFS

这个属性的值实际上就像C++中的指针一样,它是一个指向文档中其他地方声明的ID值,所以,如果在具体的文档中该属性的取值和它所指向的ID值不匹配的话,就会返回错误。IDREFS和IDREF类似,但是可以具有由空格分隔的多个引用

ENTITY、ENTITIES

ENTITY属性的值必须对应一个在DTD文档内声明的但还没有分析过的实体。ENTITIES属性和ENTITY类似,不同的是它可以包含多个实体,每一个实体之间可以用空格进行分隔。需要注意的是实体包括普通实体、外部实体、参数实体和外部参数实体。可以把实体理解为程序设计语言中的变量

NMTOKE、NMTOKENS

NMTOKEN是CDATA的一个子集,它所使用的字符必须是字母、数字、句点、破折号、下划线或冒号。NMTOKENS和NMTOKEN类似,不同之处在于它可以包含多个值,每个值之间用空格进行分隔

NOTATION

NOTATION的值必须引用已在DTD文档其他地方声明过的某注解的名称

NOTATION(enumerated)

该属性的值必须匹配NOTATION名称列表中的某个名称。比如,我们已经存在两个NOTATION,一个为beauty,一个为beast;我们可以定义一个属性类型为NOTATION(beauty|beast)

Enumerated

该属性几乎和C++中的枚举变量一样,我们事先定义好一些值,该属性的值必须匹配所列出的这些值。比如现在有值为美丽、温柔、纯洁、智慧,该属性的类型就可以表现为(美丽|温柔|纯洁|智慧),实际内容文档必须从这些值中取一个,值之间用“|”进行分隔

  • 一个DTD文件可以与多个XML文档联系起来。这样,这些XML文档就具有相同的DTD模板,其元素、元素属性、元素排列顺序、元素内容都必须符合DTD定义的格式。该DTD文档可以根据用户的实际需求创建,以适应特定的应用业务领域。

  • 将DTD与XML文档关联的方式有三种:

    • 使用内部DTD

<?xml version="1.0" encoding="GB2312" ?>

<!DOCTYPE 家庭 [

 <!ELEMENT 家庭 (人+,家电*)>

 <!ELEMENT人 EMPTY>

 <!ELEMENT 家电 EMPTY>

 <!ATTLIST 人

  名字 CDATA #REQUIRED

  性别 (男|女) #REQUIRED

  年龄 CDATA #REQUIRED

  爱好 CDATA #IMPLIED

 >

 <!ATTLIST 家电

   名称 CDATA #REQUIRED

   数量 CDATA #REQUIRED

   说明 CDATA #IMPLIED

 >

]>

<家庭>

     <人 名字="郭大路" 性别="男" 年龄="25"/>

     <人 名字="李寻欢" 性别="男" 年龄="38" 爱好="作个教育家和伟人"/>

     <家电 名称="彩电" 数量="3"/>

</家庭>

 

 

    • 使用外部DTD

    • 使用公共DTD

  • XML文档类型声明出现在XML文档的序言部分,以字符串“<!DOCTYPE”开始,然后是根元素的名字,最后会依据不同的DTD使用方式而有所不同。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值