XML程序设计第3章_第1页
XML程序设计第3章_第2页
XML程序设计第3章_第3页
XML程序设计第3章_第4页
XML程序设计第3章_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

《XML程序设计》第3章配合<XML程序设计>例子源代码一起使用Powerpoint制作:耿祥义张跃平有效的XML文件

2009-10-201第3章导读主要内容有效的XML文件怎样检查有效性DTD中的元素DTD中的属性约束列表DTD中的实体DTD中的参数实体内部DTDIGNORE和INCLUDEDTD与名称空间难点DTD中的属性约束列表DTD与名称空间2009-10-202第3章有效的XML文

规范性仅仅是XML语言的基本语法,没有对XML文件怎样组织数据进行具体的限制。在某些系统中,如果不对XML怎样组织数据进行合理的约束,那么对同一问题编写的XML文件,在数据组织结构上就可能有很大的不同。例题3.1p332009-10-203§3.1有效的XML文件

对XML的数据结构进行限制有两种方式:使用文档类型定义(DocumentTypeDefinition,DTD)和XMLSchema模式。一个规范的XML文件如果和某个DTD文件相关联,并遵守该DTD文件规定的约束条件,就称之为有效的XML文件。

2009-10-204§3.1.1初识DTD

DTD文件也是有着特殊结构的文件,简单地说,DTD文件是由元素所构成的文本文件。在DTD文件中,用关键字ELEMENT来定义一个元素,格式如下:

<!ELEMENT标记名称

标记的约束条件>DTD通过其中的元素来限制XML文件中的标记,比如,下列元素:<!ELEMENT商店营业时间(商店*)>

可以约束XML文件中名称为“商店营业时间”的标记只可以有若干个名字为“商店”的子标记,不可以有任何其他名称的子标记。2009-10-205§3.1.2DTD文件的保存

DTD文件需使用文本编辑器编写、保存。

DTD文件的扩展名必须是“.dtd”,保存时所选择的编码必须和其关联的XML文件一致,比如,DTD所要约束的XML文件的编码为UTF-8,那么DTD文件也必须按着UTF-8编码保存。

2009-10-206§3.1.3

XML文件与DTD文件相关联在XML文件中使用“文档类型声明”与一个DTD文件相关联。有两种形式的关联:SYSTEM和PUBLIC。使用SYSTEM文档类型声明的格式:<DOCTYPE根标记的名称SYSTEM"DTD文件的URI">

使用PUBLIC文档类型声明的格式:<!DOCTYPE根标记的名称PUBLIC"正式公用标识符""DTD文件的URI">

例题3.2p372009-10-207§3.2怎样检查有效性当用浏览器打开一个有效的XML文件时,浏览器的XML解析器仅仅检查XML文件是否是规范的、检查XML所关联的DTD文件是否有语法错误,并不检查XML文件是否遵守该DTD规定的约束条件。我们可以使用DOM解析器来检查一个XML文件是否是有效的,有关DOM解析器将在第6章详细讲述。例题3.3p382009-10-208§3.3DTD中的元素

DTD中的元素(ELEMENT)是用来约束XML文件中的标记,在DTD中使用元素声明来定义一个元素,元素的声明格式为:

<!ELEMENT标记名称

标记的约束条件>

例:

<!ELEMENT学生(学号,姓名)>

2009-10-209§3.3.1约束标记只包含文本数据

如果准备约束一个标记没有子标记,也就是说只能有文本数据,那么“标记的约束条件”是用小括号括起的#PCDATA,格式如下:<!ELEMENT标记名称(#PCDATA)>2009-10-2010§3.3.2束标记的子标记

如果想约束XML文件中某个标记可以有怎样的子标记,那么DTD中元素<!ELEMENT标记名称

标记的约束条件>声明的“标记的约束条件”是用小括号括起的子标记列表,格式为

<!ELEMENT标记名称(子标记列表)>注:①“子标记列表”中用逗号分隔列出的若干个标记是有先后顺序的

②“子标记列表”中若干个标记可以尾加模式限定符号来限定该子标记是否允许重复出现、出现的次数。

“子标记列表”的分项也可以是几个标记的“或运算”,而且“或运算”必须用左、右小括号扩起。

例题3.4p422009-10-2011§3.3.3约束标记的混合内容

一个标记的内容可以有两部分构成文本数据和标记,其中的标记称做该标记的子标记.上面我们已经知道怎样使用DTD约束标记的子标记,比如<!ELEMENT开车时间(hour,minute)>约束“开车时间”只能有子标记,不能含有可显示的文本数据。

如果允许标记的内容即可以有可显示的文本数据,也可以有子标记,那么在DTD文件中,元素的“标记的约束条件”是关键字“#PCDATA”和若干个子标记的“或运算”,而且该“或运算”必须用小括号括起并尾加一个“*”号,格式如下:<!ELEMENT标记名称(#PCDATA|子标记1|子标记2…|子标记m)*>例题3.5p442009-10-2012§3.3.4EMPTY和ANY

如果准备约束一个标记是空标记,或者是只含有空字符的非空标记,元素的“标记的约束条件”可以是关键字“EMPTY”;如果不准备对一个标记有任何约束,元素的“标记的约束条件”可以是关键字“ANY”。例如:<!ELEMENTspeakEMPTY><!ELEMENThelloANY>2009-10-2013§3.4DTD的完整性(1)不允许无穷嵌套如果一个DTD元素约束某个标记可以出现某个子标记,那么对该子标记进行约束的DTD元素就不能约束该标记的子标记是它的父标记。(2)标记必须有元素对其进行约束

XML文件中的每个标记都必须在DTD中有相应元素进行约束。

2009-10-2014§3.5.1ATTLIST属性约束列表§3.5

DTD中的属性约束列表

DTD中的属性列表(ATTLIST)可用来约束XML文件中标记的属性,在DTD中属性列表的声明格式为:

<!ATTLIST标记名称属性名称属性类型默认值情况属性名称属性类型默认值情况…….

>例题3.6p47

在ATTLIST声明中,涉及到“属性名称”“属性类型”和“默认值情况”,其意义分别阐述如下:(1)属性名称

属性名称的命名规则和标记的命名规则相同,可以由字母、数字、下划线(“_”)、点(“.”)或连字符(“-”)组成,但必须以字母或下划线开头。(2)属性类型

我们已经知道属性值一定是一个字符串,那么属性类型就决定了属性可以用怎样的字符串作为属性的值。(3)默认值情况

ATTLIST声明是为了约束XML文件中标记的属性,ATTLIST声明中关于属性的“默认值情况”是对XML文件中标记的属性进行约束的细节条件.2009-10-2015§3.5.2属性的默认值

<!ATTLIST>声明中包括“属性名称”、“属性类型”和“默认值情况”,其中的“默认值情况”含有约束的细节条件。1.“默认值情况”是字符串

如果某个属性的“默认值情况”是一个字符串,XML中对应标记必须有该属性,但标记可以不明显地添加该属性。

例:<!ATTLIST桌子colorCDATA“red”>例题3.7p492.“默认值情况”是#IMPLIED

在ATTLIST定义的属性约束列表中可以设置属性的“默认值情况”是#IMPLIED。例:<!ATTLIST桌子color#IMPLIED>

此时该属性就没有默认值,而且相应的标记里可以不附加该属性。3.“默认值情况”是#REQUIRED在ATTLIST定义的属性约束列表中可以设置属性的“默认值情况”是#REQUIRED。例:<!ATTLIST桌子length#REQUIRED桌子width#REQUIRED桌子height#REQUIRED>

此时该属性没有默认值,相应的标记必须要添加该属性并给出属性的值。4.“默认值情况”是#FIXED

在ATTLIST定义的属性约束列表中可以设置属性的“默认值情况”是#FIXED。例:<!ATTLIST报警电话号码CDATA#FIXED"110">

此时该属性默认值就是关键字#FIXED后面指定的那个字符串。例题3.8p51例题3.9p522009-10-2016§3.5.3属性类型_1

属性类型决定了属性可以用怎样的字符串作为属性的值。属性的常用类型有:

CDATA、Enumerated、NMTOKEN、NMTOKENS、ID、IDREF、IDREFS1.CDATA类型

对于CDATA(CharacterData)类型的属性,该属性的值可以是任何一个字符串,但是,字符串中不能含有含有左尖括号、右尖括号、与符号、单引号和双引号,如果想使用这些字符,可以使用实体引用。例题3.10p532.Enumerated类型

如果属性的类型是Enumerated类型,那么该属性只可以是枚举值。Enumerated不是关键字,是指类型定义的格式,其格式是将属性可以取的值用符号“|”分隔,Enumerated类型的定义格式如下:<!ATTLIST标记名称属性名称(属性值1|属性值2|…|属性值n)默认值情况>例题3.11p542009-10-2017§3.5.3属性类型_23.NMTOKEN类型

如果属性的类型是NMTOKEN类型的属性,属性值可以由字母、数字、下划线(“_”)、点(“.”)或连字符(“-”)组成,属性值中不能含有空格字符(属性值也可以用数字、点或连字符开头)。例题3-12p544.NMTOKENS类型

对于NMTOKEN类型的属性,其属性值中不能含有空格。如果需要某个属性的属性值含有空格,而且被空格分隔开的子字符串符合NMTOKEN类型属性的属性值之规定,那么就可以将属性的类型取为NMTOKENS类型.例题3.13p555.ID类型如果希望某个属性的属性值具有专用性,即不允许其它类型相同的属性再取这个属性值,那么就可以将属性的类型取为ID类型。注意①ID类型的属性值可以由字母、数字、下划线(“_”)、点(“.”)或连字符(“-”)组成,但必须以字母或下划线开头。

注意②需要特别注意的是ID类型属性的“默认值情况”只能是“#REQUIRED”和“IMPLIED”例题3.14p562009-10-2018§3.5.3属性类型_3

6.IDREF类型

如果准备通过标记的属性值来判断标记之间的联系,就可以在标记中使用IDREF(IdentifierReference)类型的属性。IDREF类型属性的属性值只能取某个标记中ID类型属性的属性值。例题3.15p577.IDREFS类型

我们希望约束某个属性的属性值是若干个其它ID属性的属性值的组合,IDREFDS类型属性的属性值能满足这一愿望。对于IDREFS类型的属性,它的值可以是用空格分隔的若干个其它ID属性的属性值。例题3.16p582009-10-2019§3.6

DTD中的实体

实体分为普通实体和参数实体,普通实体简称为实体。实体在DTD文件中定义,和该DTD关联的XML文件通过实体引用来使用DTD文件中定义的实体,解析器在解析标记的数据时,用实体的内容替换实体引用。参数实体在DTD文件中定义,只能由DTD文件本身通过实体引用使用参数实体,参数实体和关联的XML无关。

2009-10-20201内部实体在DTD中,使用ENTITY定义内部实体,格式如下:<!ENTITY实体的引用“实体的内容”>

例如:

<!ENTITYhello"Howareyou,&你好">

例题3.17p602009-10-20212外部实体

外部实体是指实体的内容是DTD文件以外的其它文件。外部实体的格式分为两种:SYSTEM格式和PUBLIC格式。SYSTEM格式:

<!ENTITY实体的引用SYSTEM"实体的URI">PUBLIC格式:

<!ENTITY实体的引用PUBLICFPI"实体的URI">例如:

<!ENTITYjavaSYSTEM“A.java”>

实体声明中的URI必须是一个有效的资源,如果URI是一个文件的名字,该文件必须和当前DTD文件在同一目录中;如果URI是一个URL,该URL必须是可以访问的。

例题3.18p612009-10-2022§3.7可解析实体与不可解析实体

实体分成可解析实体和不可解析实体。所谓可解析实体就是能被解析器解析的数据。例如,下列实体都是可以被解析器解析的文本:“你好,欢迎你”所谓不可解析实体就是解析器无法解析的数据,通常指二进制数据。2009-10-2023§3.8DTD中的参数实体

实体在DTD文件中定义,和该DTD关联的XML文件通过实体引用来使用该实体。参数实体在DTD文件中定义,只能由DTD文件本身通过实体引用使用参数实体,参数实体和所关联的XML无关。使用参数实体的目的是方便DTD文件的编写、有利于DTD文件的维护。例题3.19p632009-10-2024§3.9内部DTD

可以把DTD文件的内容直接写在XML文件的内部,相对外部DTD文件,这样的内容称做XML文件的内部DTD

在XML文件中,内部DTD用“<!DOCTYPE根标记名称[”开始,以“]>”结束.例题3.20p64

注:同时使用外部DTD和内部DTD的格式:<!DOCTYPE根标记名字SYSTEM"外部DTD的URI"[

内部DTD内容]>或

<!DOCTYPE根标记名字PUBLIC"正式公用标识符""外部DTD的URI"[

内部DTD内容]>

例题3.21p652009-10-2025§3.10IGNORE和INCLUDE

IGNORE的作用是忽略DTD中的某些约束条件,而INCLUDE指令是包含某些约束条件。

IGNORE指令的格式:<![IGNORE[DTD中的某些约束条件]]>INCLUDE指令的格式:<![INCLUDE[DTD中的某些约束条件]]>

温馨提示

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

评论

0/150

提交评论