第3章 XML文档类型定义 DTD_第1页
第3章 XML文档类型定义 DTD_第2页
第3章 XML文档类型定义 DTD_第3页
第3章 XML文档类型定义 DTD_第4页
第3章 XML文档类型定义 DTD_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章XML文档类型定义

----DTD

1目标理解文档类型定义DTD声明元素声明属性声明实体声明2XML确认

----确保XML文档中数据的一致性

符合语法的XML文档称为结构良好的XML文档。通过DTD验证的XML文档称为有效的XML文档。33.1 DTD概述文档类型定义--DocumentTypeDefinitionDTD用来描述XML文档的结构,DTD定义了XML文档中可用的合法元素。用DTD指定:可以在文档中存在的元素元素可以具有的属性在元素内部元素的层次结构元素在整个文档中出现的顺序43.2DTD声明DTD可以是一个完全独立的文件,也可以在XML文件中直接设定。DTD分为外部DTD(在XML文件中调用另外已经编辑好的DTD)和内部DTD(在XML文件中直接设定DTD)两种。

53.2.1内部DTD

内部DTD是在XML文件的文件序言区域中定义的。内部DTD的XML文档的结构为:

<?xmlversion="1.0"?>

<!DOCTYPE根元素名[

元素描述

]>

文档数据区.......63.2.1内部DTD(续)<?xmlversion='1.0'encoding='gb2312'?><!DOCTYPEpoem[<----------------根元素的名称<!ELEMENTpoem(author,title,content)><-----------子元素的名称及顺序<!ELEMENTauthor(#PCDATA)><------------------子元素的数据类型<!ELEMENTtitle(#PCDATA)><!ELEMENTcontent(#PCDATA)>]><------------------------结束标签<poem><author>王维</author><title>鹿柴</title><content>空山不见人,但闻人语声.返景入深林,复照青苔上.</content></poem>注意:例中的定义关键字一定要大写,如DOCTYPE、ELEMENT、#PCDATA,且元素名称与数据类型之间也要有空格。内部DTD示例73.2.2外部DTD外部DTD是一个独立于XML文件的文件,实际上也是一个文本文件,只是使用.dtd为文件扩展名。外部DTD的好处是:它可以方便高效地被多个XML文档所共享。外部DTD的创建方式、语法和内部DTD是一样的。83.2.2外部DTD(续2-1)使用外部DTD的XML文档的结构为:<?xmlversion="1.0"?><!DOCTYPE根元素名SYSTEM/PUBLIC"外部DTD文件名及其位置">文档数据区.......93.2.2外部DTD(续2-2)<?xmlversion='1.0'encoding='gb2312'?><!DOCTYPEpoemSYSTEM"ex2.dtd"><poem> <author>王维</author> <title>鹿柴</title> <content>空山不见人,但闻人语声.返景入深林,复照青苔上.</content></poem><?xmlversion="1.0"encoding="gb2312"?><!ELEMENTpoem(author,title,content)><!ELEMENTauthor(#PCDATA)><!ELEMENTtitle(#PCDATA)><!ELEMENTcontent(#PCDATA)>外部DTD使用示例103.3 DTD语法一个DTD文档包含元素(ELEMENT)的定义规则元素之间的关系规则属性(ATTLIST)的定义规则可使用的实体(ENTITY)或符号(NOTATION)规则113.3.1元素声明—确定元素及其类型元素有三种不同的类型数据型(即字符内容)<Text>Hello</Text>元素型(即包含的内容是元素)<Letter><sub>QUIT</sub><Body>Helloeverybody!</Body></Letter>混合型(包含的内容既有元素又有内容)<para>Helloeverybody<bold>quit</bold></para>123.3.1元素声明——元素的定义(1/5)语法<!ELEMENT

NAME

CONTENT>关键字元素名称EMPTY-该元素不能包含子元素和文本,但可以有属性-(空元素)ANY-该元素可以包含任何在DTD中定义的元素内容#PCDATA-可以包含任何字符数据,但是不能在其中包含任何子元素PCDATA代表字符数据,为防止与关键字混淆,加#前缀纯元素类型--只包含子元素,并且这些子元素外没有文本混合类型--包含子元素和文本数据的混合体元素类型133.3.1元素声明——元素的定义(2/5)EMPTY示例--空元素<!ELEMENT人EMPTY>XML示例:<家庭> <人名字="皮诺曹"性别="男"年龄="6"/></家庭><家庭> <人>皮诺曹</人> <人><大人>皮诺曹爸爸</大人></人></家庭>√×143.3.1元素声明——元素的定义(3/5)ANY示例<!ELEMENT人ANY>XML示例:<家庭> <人>皮诺曹</人> <人><大人>皮诺曹爸爸</大人></人></家庭>将根元素设为ANY类型后,元素出现的次数和顺序不受限制。15√×3.3.1元素声明——元素的定义(4/5)#PCDATA示例<!ELEMENT人(#PCDATA)><家庭> <人性别="男"年龄="6">皮诺曹</人></家庭><家庭> <人><大人>皮诺曹爸爸</大人></人></家庭>XML示例:163.3.1元素声明——元素的定义(5/5)组合类型示例<!ELEMENT家庭(人+,家电*)>XML示例:<家庭> <人名字="郭大路"性别="男"年龄="25"/> <人名字="李寻欢"性别="男"年龄="38"爱好="作个教育家和伟人"/> <家电名称="彩电"数量="3"/></家庭>17注意1:在元素设置中,如果元素包含多个子元素,如:〈!ELEMENT书籍(名称,作者,价格)〉这种含多个子元素的声明,那么“名称”、“作者”、“价格”这些标记在XML文件中必须以上面排列的顺序出现,每个标记必须而且只能够出现一次。18练习—判断对错若DTD为:<!ELEMENT学生(姓名,性别,英语,数学)>其对应的XML:<学生> <姓名>李方方</姓名> <性别>男</性别><英语>99</英语><数学>88</数学><数学>88</数学></学生>×19注意2:如果在设定元素时,按照〈!ELEMENT书籍ANY〉,这样在元素下就可以包含任意被设定过的元素,出现的次数和顺序也不受限制,并且在该元素下,除了可以包含子元素以外,还能够包含一般的文字。20注意3:在XML文件中,一个标记可能多次出现(或者不出现),除了在它们的父元素中用ANY关键字之外,还可以在元素的旁边加上特定的符号来控制标记出现的次数。

21修饰符号------无符号:只能出现一次

符号用途示例示例说明()用来给元素分组(古龙|金庸|梁羽生),(王朔|余杰),毛毛分成三组|在列出的对象中选择一个(男人|女人)表示男人或者女人必须出现,两者至少选一+该对象最少出现一次,可以出现多次(1或多次)(成员+)表示成员必须出现,而且可以出现多个成员*该对象允许出现零次到任意多次(0到多次)(爱好*)爱好可以出现零次到多次?该对象可以出现,但只能出现一次(0到1次)(菜鸟?)菜鸟可以出现,也可以不出现,如果出现的话,最多只能出现一次,对象必须按指定的顺序出现(西瓜,苹果,香蕉)表示西瓜、苹果、香蕉必须出现,并且按这个顺序出现22练习—解释语句<!ELEMENT图书(书名,作者+,书号?,出版日期*)><!ELEMENT元素名(子元素名1|子元素名2|子元素名3|…)><!ELEMENT作者联系方式(姓名,地址+,(电话|手机|email))><!ELEMENT作者(姓名,(电话|手机|email)*)><!ELEMENT元素名(#PCDATA|子元素名1|子元素名2|子元素名3|…)*>233.3.2属性声明

在DTD中定义属性时,我们使用下面的格式来给一个元素定义一组合适的属性,同时指定这些属性的类型和缺省值:<!ATTLIST元素名(属性名值类型[属性类型][“缺省值“])>其中:元素名是属性所属的元素的名字。属性名是属性的命名。值类型是给属性分配的值。缺省值是属性的初值。24属性的定义语法<!ATTLIST

元素名称

属性名称类型属性特点 …...>CDATA

ID

IDREF/IDREFS

NMTOKEN/NMTOKENS

Enumerated#REQUIRED

#IMPLIED

#FIXEDvalue

Defaultvalue25属性类型-CDATA属性值可以是任何字符(包括数字和中文)<!ATTLIST木偶

姓名CDATA#REQUIRED

>

XML示例:<木偶姓名="皮诺曹"/>

<木偶姓名="PiLuocao"/>

<木偶姓名="123"/>26属性类型-NMTOKEN/NMTOKENSNMTOKEN是CDATA的一个子集,表示属性值必须是英文字母、数字、句号、破折号、下划线或冒号(不能是中文!)。NMTOKENS与NMTOKEN类似,包含多个由空格分隔的字符。<?xmlversion="1.0"encoding="gb2312"?><!DOCTYPEpoems[<!ELEMENTpoems(title,content)><!ELEMENTtitle(#PCDATA)><!ATTLISTtitleauthorNMTOKEN#REQUIRED><!ELEMENTcontent(#PCDATA)>]><poems><titleauthor="杜甫">八阵图</title><content>功盖三分国,名成八阵图,江流石不转,遗恨失吞吴.</content></poems><?xmlversion="1.0"encoding="gb2312"?><!DOCTYPEpoems[<!ELEMENTpoems(title,content)><!ELEMENTtitle(#PCDATA)><!ATTLISTtitleauthorNMTOKEN#REQUIRED><!ELEMENTcontent(#PCDATA)>]><poems><titleauthor="dupu">八阵图</title><content>功盖三分国,名成八阵图,江流石不转,遗恨失吞吴.</content></poems>×√XML示例:27属性类型-ID表明该属性的取值必须是唯一的。该ID必须以一个字母开头<!ELEMENT公司职员ANY>

<!ATTLIST公司职员

编号ID#REQUIRED

姓名CDATA#REQUIRED

><公司职员编号="Z001"姓名="张三"/><公司职员编号="Z002"姓名="李四"/><公司职员编号="Z001"姓名="张三"/><公司职员编号="Z001"姓名="李四"/>√×ID属性值必须是合格的XML名字XML示例:28属性类型-IDREF/IDREFSIDREF属性的值指向文档中其它地方声明的ID类型的值。IDREFS同IDREF,但是可以具有由空格分开的多个引用。<!ELEMENT家庭(人+)>

<!ELEMENT人EMPTY>

<!ATTLIST人

relIDID#REQUIRED

parentIDIDREFS#IMPLIED

nameCDATA#REQUIRED

><家庭>

<人relID="P_1"name="爸爸"/>

<人relID="P_2"name="妈妈"/>

<人relID="P_3"parentID="P_1P_2"name="儿子">

</家庭>空格XML示例29属性类型-Enumerated事先定义好一些值,属性的值必须在所列出的值的范围内。<!ATTLISTperson 婚姻状态(single|married|divorced|widowed)#IMPLIED><!ATTLISTpersion性别(男|女)#REQUIRED>30属性的特点-#REQUIRED元素的所有实例都必须有该属性的值(NOTNULL)语法:<!ATTLIST元素名属性名属性类型#REQUIRED>DTD示例:<!ATTLISTpersonnumberCDATA#REQUIRED>

XML示例:<personnumber="5677"/>31属性的特点-#IMPLIED元素的实例中可以忽略该属性(NULL)。语法:

<!ATTLIST元素名属性名

属性类型#IMPLIED>DTD示例:<!ATTLISTcontactfaxCDATA#IMPLIED>XML示例:<contactfax="555-667788"/>32属性的特点-#FIXEDvalue元素实例中该属性的值必须为指定的固定值。在元素中不能够设定该属性,因为这个属性被设为具有固定值的属性(#FIX关键字)语法:<!ATTLIST元素名属性名类型#FIXED"value">DTD示例:<!ATTLISTsendercompanyCDATA#FIXED"Microsoft">XML示例:<sendercompany="Microsoft"/>33属性的特点-Defaultvalue为属性提供一个默认的值语法:<!ATTLIST元素名属性名类型"value">DTD示例:<!ATTLISTpaymenttypeCDATA"check">

XML示例:<paymenttype="check"/>34定义实体-内部实体作用:避免重复输入-(宏、变量)XML中五个预定义实体自定义实体语法:<!DOCTYPE根元素[<!ENTITY实体名"实体内容">]>引用已定义的实体:&实体名;实体符号<<>>&&""''35实体示例?xmlversion="1.0"encoding="gb2312"?><!--文件名:例3-13.xml--><!DOCTYPE图书信息表[<!ELEMENT图书信息表(图书+)><!ELEMENT图书(书名,类别,作者,出版

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论