XML技术精品课件_第1页
XML技术精品课件_第2页
XML技术精品课件_第3页
XML技术精品课件_第4页
XML技术精品课件_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

第三讲

XML技术山东大学管理学院教学讲义第二部分

数据结构与模式定义

DTD1创建新标记语言XML的精髓:基于信息描述的、能够体现数据信息之间逻辑关系的、可以确保文件的易读性和易搜索性的“自定义标记”语言。通过文档类型定义(DTD)或Schema来定义新的标记语言(也叫标记集)。DTD或Schema提供了语法规定,XML文档要与DTD或Schema相比较,这一过程称为合法性检验。如果文档符合DTD或Schema中的约束,这个文档就是有效的。与DTD不同,XMLSchema本身也是一份XML文件,它用来定义另一份XML的文件格式、结构、数据类型等。2一、Well-formedv.s.Valid

XML一个Well-FormedXMLdocument:正确包含嵌套在其他元素中的元素有唯一的根元素遵循XML元素命名惯例遵循XML属性引用规则所有特殊字符被正确回避一个合法的(Valid)XMLdocument遵守XML语法规则遵守相应DTD(或Schema)文件规范的XML文档

有效的XML,一定是格式良好的XML。而反之,格式良好的XML不一定是有效的XML。3二、DTD的基本概念DTD描述了一个标记语言的语法和词汇表,也就是说定义了文件的整体结构以及文件的语法。一个XML文件必须遵守文件类型定义DTD(DocumentTypeDefinition)的规定。一个DTD文档包含元素的定义规则、元素间关系的定义规则、元素可使用的属性、可使用的实体或符号规则。DTD规定了一个语法分析器包含解释一个“有效的”XML文件所需要知道的所有规则的细节。DTD文件也是一个ASCII的文本文件,后缀名为.dtd。4二、DTD的基本概念DTD用来描述XML文档的结构,一个DTD文档包含:元素(ELEMENT)的定义规则元素之间的关系规则属性(ATTLIST)的定义规则可使用的实体(ENTITY)或符号(NOTATION)规则DTD文档与XML文档实例的关系。类与对象数据库表结构与数据记录有了DTD,XML文件可以携带一个自身格式的描述。有了DTD,不同应用可使用一个通用DTD来交换数据。应用程序可以使用一个标准DTD校验从外部世界接受来的XML数据是否有效。可以使用DTD校验自己的XML数据。5三、如何生成一个DTD文档(1/4)DTD文档的声明及引用内部DTD文档

<!DOCTYPE根元素[定义内容]>外部DTD文档

<!DOCTYPE根元素SYSTEM"DTD文件路径">内外部DTD文档结合

<!DOCTYPE根元素SYSTEM"DTD文件路径"

[定义内容]>使用公有DTD<!DOCTYPE根元素PUBLIC“DTD名称”“外部DTD的URL”>6三、如何生成一个DTD文档(2/4)<?xmlversion='1.0'encoding='gb2312'?><!DOCTYPEpoem[

<-----------------根元素的名称poem<!ELEMENTpoem(author,title,content)>

<----------子元素的名称及顺序<!ELEMENTauthor(#PCDATA)>

<------------------子元素的数据类型<!ELEMENTtitle(#PCDATA)><!ELEMENTcontent(#PCDATA)>]>

<---------------------------------------结束标签<poem><author>王维</author><title>鹿柴</title><content>空山不见人,但闻人语声。返景入深林,复照青苔上。

</content></poem>注意:例中的定义关键字一定要大写,如DOCTYPE、ELEMENT、#PCDATA,且元素名称与数据类型之间也要有空格。内部DTD示例7三、如何生成一个DTD文档(3/4)<?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示例ex2.dtd8三、如何生成一个DTD文档(4/4)<?xmlversion='1.0'encoding='gb2312'?><!DOCTYPEpoemSYSTEM"ex3.dtd"[

<!ELEMENTpoem(author,title,content)> <!ELEMENTcontent(#PCDATA)>]><poem> <author>王维</author> <title>鹿柴</title> <content>

空山不见人,但闻人语声。返景入深林,复照青苔上。

</content></poem><?xmlversion='1.0'encoding='gb2312'?><!ELEMENTauthor(#PCDATA)><!ELEMENTtitle(#PCDATA)>内部和外部DTD示例ex3.dtd9三、如何生成一个DTD文档(4/4)使用公有DTD还存在一种外部DTD,它由权威机构制订,提供给特定行业或公众使用。使用关键字PUBLIC引用这一类公开使用的DTD。引用格式为:<!DOCTYPE根元素PUBLIC“DTD名称”“外部DTD的URL”>其用法和SYSTEM基本相同,只是多了个DTD名称。10四、元素的定义(1/14)语法

<!ELEMENT

NAME

CONTENTSPEC>关键字元素名称EMPTY-该元素不能包含子元素和文本,但可以有属性(空元素)ANY-该元素可以包含任何在DTD中定义的元素和文本内容#PCDATA-可以包含任何字符数据,但不能在其中包含子元素纯元素类型--只包含子元素,并且这些子元素外没有文本混合类型--包含子元素和文本数据的混合体,具体定义。元素类型11EMPTY示例--空元素<!ELEMENT

人EMPTY><家庭> <人名字="皮诺曹“性别="男"年龄="6"/></家庭><家庭> <人>皮诺曹</人> <人><大人>皮诺曹爸爸</大人></人></家庭>四、元素的定义(2/14)√×12四、元素的定义(3/14)ANY示例(1/2)元素可以出现任何内容

<!ELEMENT

人ANY><家庭> <人>皮诺曹</人> <人><大人>皮诺曹爸爸</大人></人></家庭>将根元素设为ANY类型后,元素出现的次数和顺序不受限制。13四、元素的定义(4/14)ANY示例(2/2)形式良好但不合法(没有<书>元素的定义)<!DOCTYPE书架[<!ELEMENT书架ANY>

]><书架><书>XML实用教程</书></书架>形式良好且合法<!DOCTYPE书架[<!ELEMENT书架ANY>]><书架>XML实用教程</书架>14#PCDATA示例包含可解析的字符数据,即非标记文本,但它不能包含自己的子元素

<!ELEMENT

人(#PCDATA)><家庭> <人性别="男"年龄="6">皮诺曹</人></家庭><家庭> <人><大人>皮诺曹爸爸</大人></人></家庭>√×四、元素的定义(5/14)15四、元素的定义(6/14)

子元素内容只能出现在元素类型声明中规定的子元素定义子元素时与顺序无关示例:书架的定义:<?xmlversion=”1.0”Standalone=”yes”encoding=”GB2312”?><!DOCTYPE书架[<!ELEMENT书架(书)*><!ELEMENT书(书名,作者,价格,出版社)><!ELEMENT书名(#PCDATA)><!ELEMENT作者(姓名,地址)><!ELEMENT姓名(#PCDATA)><!ELEMENT价格(#PCDATA)><!ELEMENT出版社(地址,邮编)><!ELEMENT地址(#PCDATA)><!ELEMENT邮编(#PCDATA)>]>“书架”包括“书”子元素,“书”又包括书名、‘作者“、‘价格”、“出版社”这些子元素。而“作者”又包括了“姓名”、“地址”这些子元素。“出版社”又包括了“地址”、“邮编”这些子元素。16四、元素的定义(7/14)混合类型示例指可以有字符数据和子元素的混合体

<!ELEMENT作者(姓名,电话,EMAIL,#PCDATA)*><作者><姓名>丁力</姓名><电话>(010)64535265</电话><EMAIL>dingli@</EMAIL>作者丁力的联系方式</作者>说明:以上只是示意性的,“姓名”、“电话”、“EMAIL”这些子元素没有定义17四、元素的定义(8/14)符号用途示例示例说明()用来给元素分组,每组可重复出现(古龙|金庸|梁羽生),(王朔|余杰),毛毛分成三组|在列出的对象中选择一个(男|女)表示“男”或者“女”必须出现,两者选一+该对象最少出现一次,可以出现多次(1或多次)(成员+)表示成员必须出现,而且可以出现多个成员*该对象允许出现零次到任意多次(0到多次)(爱好*)爱好可以出现零次到多次?该对象可不出现,也可以出现,但只能出现一次(0到1次)(党员?)“党员”可以出现,也可以不出现,如果出现的话,最多只能出现一次,对象必须按指定的顺序出现(西瓜,苹果,香蕉)表示西瓜、苹果、香蕉必须出现,并且按这个顺序出现修饰符号-子元素的定义和控制18四、元素的定义(9/14)修饰符号-子元素的定义和控制控制子元素出现的顺序

<!ELEMENT作者(姓名,(地址|E-mail)?)><!ELEMENT姓名(#PCDATA)><!ELEMENT地址(#PCDATA)><!ELEMENTE-mail(#PCDATA)><作者><姓名>张三</姓名><地址>浙江杭州</地址></作者><作者><姓名>张三</姓名><地址>浙江杭州</地址><E-mail>zhangsan@163.net</E-mail></作者>√×19四、元素的定义(10/14)修饰符号-子元素的定义和控制“,”分隔表示“与”,要求子元素严格遵从顺序要求出现,而且不能缺少。

<!ELEMENT作者(姓名,地址)><!ELEMENT姓名(#PCDATA)><!ELEMENT地址(#PCDATA)><作者><姓名>张三</姓名><地址>浙江杭州</地址></作者><作者><地址>浙江杭州</地址><姓名>张三</姓名></作者>√×20四、元素的定义(11/14)修饰符号-子元素的定义和控制用“空格”表示无顺序要求,元素可自由出现。<!ELEMENT作者(姓名地址)><!ELEMENT姓名(#PCDATA)><!ELEMENT地址(#PCDATA)><作者><姓名>张三</姓名><地址>浙江杭州</地址></作者><作者><地址>浙江杭州</地址><姓名>张三</姓名></作者>√√21四、元素的定义(12/14)修饰符号-子元素的定义和控制成组元素:子元素可以使用括号并为一组。<!ELEMENT作者(姓名,地址)+><!ELEMENT姓名(#PCDATA)><!ELEMENT地址(#PCDATA)><作者><姓名>张三</姓名><地址>浙江杭州</地址><姓名>李四</姓名><地址>山东济南</地址></作者>√22四、元素的定义(13/14)修饰符号-子元素的定义和控制字符“?”说明一个子元素是可选的,它可以出现,也可以不出现。<!ELEMENT作者(姓名地址?))><!ELEMENT姓名(#PCDATA)><!ELEMENT地址(#PCDATA)><作者><姓名>张三</姓名><地址>浙江杭州</地址></作者><作者><姓名>张三</姓名></作者>√√23四、元素的定义(14/14)修饰符号-子元素的定义和控制“*”表示该元素可以出现任意次,即零次或多次。“+”表示该元素至少要出现一次,即一次或多次。示例:书架的定义:<?xmlversion=”1.0”encoding=”GB2312”?><!DOCTYPE书架[<!ELEMENT书架(书)*><!ELEMENT书(书名,作者+,价格,出版社)>

……………]>24五、属性的定义语法<!ATTLIST

元素名称 属性名称类型属性特点

…...>CDATA

ID

IDREF/IDREFS

NMTOKEN/NMTOKENS

Enumerated

ENTITY/ENTITIES

NOTATION

NOTATION(enumerated)#REQUIRED

#IMPLIED

#FIXEDvalue

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

姓名CDATA#REQUIRED

><木偶姓名="皮诺曹"/>

<木偶姓名="PiNuocao"/>

<木偶姓名="123"/>请注意:这里的CDATA与第一部分CDATA的区别,

#PCDATA与CDATA的区别26五、属性的定义属性类型-NMTOKEN/NMTOKENSNMTOKEN要求属性是合法的XML名字,属性值必须是英文字母、数字、句号、破折号、下划线或冒号(不能是中文!)。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=“Dufu">八阵图</title><content>

功盖三分国,名成八阵图。江流石不转,遗恨失吞吴。

</content></poems>×√27五、属性的定义属性类型-ID表明该属性的取值必须是唯一的。<!ELEMENT公司职员ANY>

<!ATTLIST公司职员

编号ID#REQUIRED

姓名CDATA#REQUIRED

><公司职员编号="Z001"姓名="张三"/><公司职员编号="Z002"姓名="李四"/><公司职员编号="Z001"姓名="张三"/><公司职员编号="Z001"姓名="李四"/>√×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=“儿子”/>

</家庭>空格29五、属性的定义属性类型-Enumerated事先定义好一些值,属性的值必须在所列出的值的范围内,“Enumerated”不出现在定义中。<!ATTLISTperson

婚姻状态(single|married|divorced|widowed)#IMPLIED

性别(男|女)#REQUIRED>30五、属性的定义属性类型-NOTATION(1/3)Notation主要是用来表明文档中需要来自外部源的数据,而该数据XML解析器是不能进行解析的,需要外部的应用程序进行处理。如各种格式的二进制文件(比如图形文件、声音文件等)Notation类型使用前必须有Notation声明Notation声明的语法格式为:

<!NOTATION格式名SYSTEM处理程序的URI>31五、属性的定义属性类型-NOTATION(2/3enumerated)属性的值必须匹配NOTATION名称列表中的某个名称。<!NOTATIONmpegSYSTEM"mplayer.exe">

<!NOTATIONjpegSYSTEM"netscape.exe">

<!ATTLISTmedia

playerNOTATION(mpeg|jpeg)#REQUIRED>属性类型定义NOTATION声明元素名属性名32五、属性的定义属性类型-NOTATION(3/3)下面的例子为“视频”元素指定了两种可选设备,一种是RealPlayer.exe,用来播映.rm文件,另一种则用来播放GIF图像。<?xmlversion=”1.0”encoding=”GB2312”standalone=”yes”?><!DOCTYPE文件[<!ELEMENT文件ANY><!ELEMENT视频EMPTY>

<!ATTLIST视频演示设备NOTATION(rm|gif)#REQUIRED><!NOTATIONrmSYSTEM“RealPlayer.exe”><!NOTATIONgifSYSTEM“Image/gif”>]><文件><视频演示设备=”rm”/></文件>33五、属性的定义属性的特点-#REQUIRED元素的所有实例都必须有该属性的值(NOTNULL)语法:<!ATTLIST元素名属性名属性类型#REQUIRED>DTD示例:<!ATTLISTpersonnumberCDATA#REQUIRED>XML示例:<personnumber="5677"/>34五、属性的定义属性的特点-#IMPLIED元素的实例中可以忽略该属性(NULL)。语法:

<!ATTLIST元素名属性名属性类型#IMPLIED>DTD示例:<!ATTLISTcontactfaxCDATA#IMPLIED>XML示例:<contactfax="555-667788"/>或<contact/>35五、属性的定义属性的特点-#FIXEDvalue元素实例中该属性的值必须为指定的固定值。语法:<!ATTLIST元素名属性名类型#FIXED"value">DTD示例:<!ATTLISTsendercompanyCDATA#FIXED"Microsoft">XML示例:<sendercompany="Microsoft"/>36五、属性的定义属性的特点-Defaultvalue为属性提供一个默认的值,在XML可使用该默认值或指定一新值。语法:<!ATTLIST元素名属性名类型"value">DTD示例:<!ATTLISTpaymenttypeCDATA"check">XML示例:<payment/>表明payment的type属性为"check"37六、属性的定义-实体属性类型-ENTITY/ENTITIESENTITY类型的属性的值必须对应一个在DTD文档内声明的实体。ENTITIES类型的属性的值与ENTITY类似,不同的是可以包含多个由空格分开的实体。实体引用前必须定义实体分类一般实体(通用实体)内部实体外部实体参数实体内部实体外部实体38六、属性的定义-实体内部一般实体由实体名和及实体内容字符串构成,XML解析器可以解析。在内部或外部DTD中声明,在XML的元素或属性值中引用。语法:定义方式为:<!ENTITY实体名“实体值”>引用方式为:&实体名;

DTD示例:<!ENTITYwriter"DonaldDuck."><!ENTITYcopyright"CopyrightW3Schools.">XML示例:<author>&writer;©right;</author>39六、属性的定义-实体外部一般实体外部一般实体的内容位于系统其他地方(由URI指定)。在内部或外部DTD中声明,在XML的元素或属性值中引用。语法:

<!ENTITY实体名SYSTEM"URI/URL">DTD示例:

<!ENTITYwriterSYSTEM

"/entities/entities.dtd">

<!ENTITYcopyrightSYSTEM

"/entities/entities.dtd">XML示例:

<author>&writer;©right;</author>40六、属性的定义-实体内部参数实体该实体不是在具体XML实例化文档中使用,而是在DTD文档内部被使用。定义如下的参数实体:

<!ENTITY%地址“街道,城市,邮编,国家”>

<!ENTITY%sample“<!ELEMENTex(#PCDAT)>”>在DTD内部通过“%实体名;”来引用它们:

<!ELEMENT联系(人名,电话,%地址;)>

%sample;<!ELEMENT联系(人名,电话街道,城市,邮编,国家)>

<!ELEMENTex(#PCDAT)>41六、属性的定义-实体外部参数实体类似于外部一般实体与内部一般实体的区别。实体的内容不在实体定义处,而是在系统其他地方,内容应符合DTD规范定义实例:

<!ENTITY%地址SYSTEM"http://somewebsite/somecategory/something.dtd">在DTD内部引用格式:

%地址;“%地址;”相当于一个普通的元素(ELEMENT)。42六、属性的定义-实体各类实体比较类型一般(通用)实体参数实体使用场合用在XML文档中用在DTD中元素和属性的声明中声明

方式内部<!ENTITY实体名"文本内容"><!ENTITY%实体名"文本内容">外部<!ENTITY实体名SYSTEM"外部文件URL地址"><!ENTITY%实体名SYSTEM"外部文件URL地址">引用方式&实体名;%实体名;43六、属性的定义-实体属性类型ENTITY/ENTITIES应用举例<?xmlversion="1.0"encoding="gb2312"?><!DOCTYPElibrary[ <!ELEMENTlibrary(number,img)> <!ELEMENTnumber(#PCDATA)> <!ELEMENTimgEMPTY> <!ATTLISTimgsrcENTITIES#REQUIRED> <!ENTITYpicSYSTEM"pic1.gif">]><library> <number>A001</number> <imgsrc="&pic;"/></library>44七、分析完整的DTD文档,写XML实例<!DOCTYPENEWSPAPER[

<!ELEMENTNEWSPAPER(ARTICLE+)><!ELEMENTARTICLE(HEADLINE,BYLINE,LEAD,BODY,NOTES)><!ELEMENTHEADLINE(#PCDATA)><!ELEMENTBYLINE(#PCDATA)><!ELEMENTLEAD(#PCDATA)><!ELEMENTBODY(#PCDATA)><!ELEMENTNOTES(#PCDATA)>

<!ATTLISTARTICLEAUTHORCDATA#REQUIRED><!ATTLISTARTICLEEDITORCDATA#IMPLIED><!ATTLISTARTICLEDATECDATA#IMPLIED><!ATTLISTARTICLEEDITIONCDATA#IMPLIED><!ENTITYNEWSPAPER"VervetLogicTimes"><!ENTITYPUBLISHER"VervetLogicPress"><!ENTITYCOPYRIGHT"Copyright1998VervetLogicPress">]>45八、分析XML实例,写DTD文档<?xmlversion="1.0"encoding="GB2312"?><学生名册> <学生学号="1"> <姓名>张三</姓名> <性别>男</性别> <年龄>20</年龄> </学生> <学生学号="2"> <姓名>李四</姓名> <性别>女</性别> <年龄>19</年龄> </学生> <

温馨提示

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

评论

0/150

提交评论