第3章 XML数据的底层结构

上传人:公**** 文档编号:568251981 上传时间:2024-07-23 格式:PPT 页数:52 大小:326.02KB
返回 下载 相关 举报
第3章 XML数据的底层结构_第1页
第1页 / 共52页
第3章 XML数据的底层结构_第2页
第2页 / 共52页
第3章 XML数据的底层结构_第3页
第3页 / 共52页
第3章 XML数据的底层结构_第4页
第4页 / 共52页
第3章 XML数据的底层结构_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《第3章 XML数据的底层结构》由会员分享,可在线阅读,更多相关《第3章 XML数据的底层结构(52页珍藏版)》请在金锄头文库上搜索。

1、第第3章章 XML数据的底层结构数据的底层结构3.1 有效的XML文件 3.2 如何检查XML文件的有效性 3.3 XML文件与DTD的匹配 3.4 XML文档类型定义文件DTD 符合XML语法规则的XML文件称为规范的XML文件,也称为良构的XML文件。规范的XML文件再符合额外的一些约束,就称为有效的XML文件。 3.1 有效的有效的XML文件(文件(1) 这些额外的约束就是DTD(Document Type Definition,文档类型定义)和XML Schema。 例如,下面的文件就是一个有效的XML文件 :3.1 有效的有效的XML文件(文件(2) !DOCTYPE persion

2、s xiaowang male 25 文件中的每一个标记都在DTD中做了定义,而且满足相应的约束条件。 返回 浏览器只是检查XML文件的规范性,并不能验证XML文件是否遵守其对应的约束文件中的约束条件。所以检查文件的有效性还需要通过解析器来进行。本例通过DOM解析器来检验XML文件的有效性。文件MyHandler.java称为事件处理器,用于检验XML文件的有效性并处理XML文件的错误信息,具体代码如下: 3.2 如何检查如何检查XML文件的文件的有效性有效性 (1) import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.S

3、AXParseException; import org.xml.sax.SAXException; public class MyHandler extends DefaultHandler String em=null; public void error(SAXParseException e)throws SAXException em=e.getMessage(); /一般性错误,一般为有效性错误 System.out.println(一般错误+em); public void fataError(SAXParseException e)throws SAXException em=

4、e.getMessage(); /严重错误,一般为规范性错误 System.out.println(致命错误+em); 3.2 如何检查如何检查XML文件的文件的有效性有效性 (2)/获得解析工厂DocumentBuilderFactoryDocumentBuilderFactory factory = DocumentBuilderFactoryDocumentBuilderFactory.newInstance();/设置解析器支持有效性检查factory.setValidating(truetrue); /创建DOM解析器DocumentBuilderDocumentBuilder bu

5、ilder = factory.newDocumentBuilder();/实例化事件处理器MyHandlerMyHandler handler = newnew MyHandlerMyHandler();/绑定处理器builder.setErrorHandler(handler); /解析并检验文件XML文件DocumentDocument document = builder.parse(newnew File(file); /如果返回的错误信息为空,说明是一个有效的XML文件,否则是无效的ifif(handler.em=nullnull)SystemSystem.outout.print

6、lnprintln(文件+file+是有效的XML文件。);elseelseSystemSystem.outout.printlnprintln(文件+file+是无效的XML文件。); 文件XMLValidate.java 负责 创建DOM解析器,分析XML文件,主要代码如下: 3.2 如何检查如何检查XML文件的文件的有效性有效性 (3)利用这个检验程序检验前面的XML文件,得到的结果如下图所示: 如果去掉“”中的子标记“”,再进行有效性检验,得到的结果如下图所示: 3.2 如何检查如何检查XML文件的文件的有效性有效性 (4) 如果利用了XML开发工具,会很方便的进行规范性及有效性的检验

7、。例如使用XML Writwer 。 返回 DTDDTD文件的保存文件的保存 DTD文件需使用文本编辑器文件需使用文本编辑器编写编写、保存保存。DTD文文件件的的扩扩展展名名必必须须是是“.dtd”,保保存存时时所所选选择择的的编编码码必必须须和和其其关关联联的的XML文文件件一一致致,比比如如,DTD所所要要约约束束的的XML文文件件的的编编码码为为UTF-8,那那么么DTD文文件件也也必必须须按按着着UTF-8编码保存。编码保存。 XML文件与DTD的匹配是指约束一个XML文件的DTD的来源,在XML文件中,通过文档类型声明来指定DTD的来源,按来源不同可分为内部DTD和外部DTD。 3.

8、3 XML文件与文件与DTD的匹配的匹配 (1)q内部DTD 包含在XML文件内部的DTD称为内部DTD,在XML中内部声明DTD的格式为: !DOCTYPE persions xiaowang male 25 内部DTD示例3.3 XML文件与文件与DTD的匹配的匹配 (2)q外部DTD 在XML文件外部定义的DTD称为外部DTD,在XML文件中声明外部DTD的格式为: “SYSTEM”表示使用的DTD文件是一个个人的非标准化的外部DTD,即没有被大部分人或某一领域所认可。 “PUBLIC”表示所使用的外部DTD文件是一个公用的标准化的DTD文件。 “正式公用标识符”用来表明DTD文件的特征

9、,其格式为: -ISO认证/单位名称/DTD说明/所用的语言 “DTD的URI”表示DTD文件所在的位置,必须是一个有效的资源。 3.3 XML文件与文件与DTD的匹配的匹配 (3) 联合使用内部DTD和外部DTD 如果想既不影响外部DTD的标准性,又添加自己的内容,就可以联合使用内部DTD和外部DTD 。其格式为: 或 解析器在解析时,会把这两个部分合并称为一个DTD,所以,对于同一个标记,不能在两个部分中同时定义,即使它们的约束条件相同。 返回3.4 XML文档类型定义文件文档类型定义文件DTD 3.4.1 DTD的元素 3.4.2 DTD的完整性 3.4.4 DTD与名称空间 3.4.3

10、 DTD的属性定义 3.4.5 DTD的实体 3.4.6 DTD中的参数实体 3.4.7 DTD中的注释 返回DTD的元素(的元素(1 1) DTD中的元素(ELEMENT)是用来约束标记的,用元素声明来定义一个标记,元素声明以“”结束,格式为: 例如 : 这段代码定义了一个标记,名称为name,它标记的内容只能含有文本数据。注意:元素声明中“”与“!”之间以及“!”与“ELEMENT”之间不能有空 格。 DTD的元素(的元素(2 2) 如果想要定义一个标记含有哪些子标记以及子标记应该以怎样的顺序出现或出现的次数,这些内容都要在“标记的约束”中定义。标记的约束可以以下3种情况: (1)EMPT

11、Y。(2)ANY。(3)描述该标记可包含的子标记及其出现次数等信息。 DTD的元素(的元素(3 3) 以上的3种情况可具体分为下列4种类型: (1)EMPTY 关键字EMPTY用于定义空标记,空标记不含有任何标记内容。例 如,对于下面的一个空标记:在DTD中声明该标记的语法是:DTD的元素(的元素(4 4) (2)ANY 使用关键字ANY就意味着该标记可以包含该DTD中定义的其他任何标记,多用于定义根标记。例如: 这段代码定义了一个名称为persions的标记,它的子标记可以是在该DTD文件中定义的其他任何标记。说明:在DTD中应慎用ANY,因为,过多地使用ANY会破坏文档结 构清晰这一原则。

12、DTD的元素(的元素(5 5) (3)#PCDATA 如果约束条件是#PCDATA,说明该标记所标记的内容可以是除标记以外的任何字符。例如: 这段代码定义了名称为name的标记,同时规定了标记所标记的内容只能是文本数据,不能含有子标记。 DTD的元素(的元素(6 6) (4)定义子标记 标记的内容可以包含子标记,定义一个标记的子标记的语法格式为: 例如: 这段代码定义了一个名称为persion的标记,该标记含有3个子标记、和。定义子标记时子标记的出现顺序决定了XML文件中子标记出现的顺序,这个次序不能违背,否则,XML文件也不是一个有效的XML文件。 注意:子标记序列中不能有#PCDATA。

13、DTD的元素(的元素(7 7) DTD中就引入了几个特殊符号来说明子标记的出现情况情况。分别是“?”、“*”和“+”,用这些符号来指定标记出现的错误,具体含义分别是: (1)“?”:说明该标记可以出现0次或1次。 (2)“*”:说明该标记可以出现1次或多次,或者不出现。 (3)“+”:说明该标记至少要出现一次。 如果没有符号标记,表示该标记必须出现且只能出现一次。DTD中还有一个字符“|”,用于可选的子标记。 返回DTD的完整性(的完整性(1 1) 一个完整的DTD,应满足下面两个条件:(1)不能出现标记的嵌套 (2)必须确定每一个标记的约束条件 DTD的完整性(的完整性(2 2) (1)不能

14、出现标记的嵌套 标记的嵌套是指一个标记的子标记中又含有该标记的父标记,这种情况在DTD中是不允许出现的。例如: 这个DTD中的定义是错误的。 DTD的完整性(的完整性(3 3) (2)必须确定每一个标记的约束条件 对于XML文件中出现的每一个标记,在DTD中都应该有它所标记内容的约束。例如: !ELEMENT persions (persios) 其中,只对“name”进行了约束,因此它是一个错误的DTD。不满足上面任何一点的DTD都不是一个完整的DTD。 返回DTD的属性定义(的属性定义(1 1) 标记都可以含有属性,是标记的附加信息。与标记的定义类似,属性的定义也必须在DTD中声明。DTD

15、中的属性列表(ATTLIST)是用来约束标记的属性的,属性的声明以“”结束,中间是标记名称及其可以含有的属性列表,其语法格式为: DTD的属性定义(的属性定义(2 2) 例如: 也可以多次为一个标记定义属性。例如: 注意:XML文件中为每个标记添加的属性,都应该在DTD中声明。 即使是同名的属性也要各自声明。 DTD的属性定义(的属性定义(3 3) v 属性的名称 : 属性名称可以自由定义,命名方法和标记的命名方法相同,名称可以由字母、数字、下划线(“_”)、点(“.”)或连字符(“-”)组成,不能含有空格;名称必须以字母或下划线开头。属性名区分大小写。 v 属性类型 : 属性的类型可以有7种

16、情况,CDATA类型、枚举类型、ID属性类型 、 IDREF/IDREFS类 型 、 NMTOKEN/NMTOKENS类 型 、ENTITY/ENTITYS类型和NOTATION类型。 DTD的属性定义(的属性定义(4 4) 各种类型的说明见下表: 属性类型含义描述CDATA文本数据枚举类型把属性的可能取值一一列举,如:(male|female)ID属性类型用于标识文档中的标记,ID属性的值必须是一个合法的XML名称且在文档中是唯一的IDREF/IDREFS类型IDREF类型用于引用同一文档中另一个标记的ID值,IDREF属性值必须是文档中某个标记的ID属性值。IDREFS是IDREF的复数形

17、式,其值是若干个ID属性值,之间用空格分开NMTOKEN/NMTOKENS类型NMTOKEN类型属性值必须是有效的XML名称,不能含有空格。NMTOKENS是NMTOKEN的复数形式,可包含若干个有效XML名称,可包含空格ENTITY/ENTITYS类型用于引用文档中的不可解析的外部实体,其值必须是有效的XML名称NOTATION类型用于将属性的值和DTD中的声明关联CDATA类型例子 张飞 李逵 Enumerated 类型例子 10010 中山路 20011 长江路 NMTOKEN类型例子 张三 李陶 ID类型例子如果希望某个属性的属性值具有专用性,即不如果希望某个属性的属性值具有专用性,即

18、不允许其它类型相同的属性再取这个属性值,那允许其它类型相同的属性再取这个属性值,那么就可以将属性的类型取为么就可以将属性的类型取为ID类型。类型。注意注意ID类型的属性值可以由字母、数字、下类型的属性值可以由字母、数字、下划线(划线(“_”)、点()、点(“.”)或连字符()或连字符(“-”)组成,但必须以字母或下划线开头。)组成,但必须以字母或下划线开头。 注意注意需要特别注意的是需要特别注意的是ID类型属性的类型属性的“默认默认值情况值情况”只能是只能是“#REQUIRED”和和“IMPLIED” 101 无轨电车 201 有轨电车 801 快车 631 普通 IDREF类型例子如果准备通

19、过标记的属性值来判断标记如果准备通过标记的属性值来判断标记之间的联系之间的联系,就可以在标记中使用就可以在标记中使用IDREF(Identifier Reference)类型的属类型的属性。性。IDREF类型属性的属性值只能取某类型属性的属性值只能取某个标记中个标记中ID类型属性的属性值。类型属性的属性值。 张三 李四 赵五 孙六 DTD的属性定义(的属性定义(5 5) v 属性默认值情况 属 性 的 默 认 值 情 况 可 以 是 : 字 符 串 、 “#IMPLIED”、“#REQUIRED”或“#FIXED”和一个字符串。 返回1“默认值情况默认值情况”是字符串是字符串 如果某个属性的如

20、果某个属性的“默认值情况默认值情况”是一个字符串,是一个字符串, XML中对应标记必须有该属中对应标记必须有该属性,但标记可以不明显地添加该属性。性,但标记可以不明显地添加该属性。 2“默认值情况默认值情况”是是#IMPLIED 在在ATTLIST定义的属性约束列表中可以设置属性的定义的属性约束列表中可以设置属性的“默认值情况默认值情况”是是#IMPLIED 此时该属性就没有默认值,而且相应的标记里可以不附加该属性。此时该属性就没有默认值,而且相应的标记里可以不附加该属性。!DOCTYPE cars没有显示地设置属性。显示地设置了属性。3 3“默认值情况默认值情况”是是# #REQUIREDR

21、EQUIRED 在在ATTLISTATTLIST定定义义的的属属性性约约束束列列表表中中可可以以设设置置属属性性的的“默默认认值值情情况况”是是# #REQUIRED REQUIRED 。例:例:!ATTLIST 此时该属性没有默认值,相应的标记必须要添加该属性并给出属此时该属性没有默认值,相应的标记必须要添加该属性并给出属性的值。性的值。4 4“默认值情况默认值情况”是是# #FIXEDFIXED 在在ATTLISTATTLIST定定义义的的属属性性约约束束列列表表中中可可以以设设置置属属性性的的“默默认认值值情情况况”是是# #FIXED FIXED 。例:例:!ATTLIST CDATA

22、 #FIXED 110 此时该属性默认值就是关键字此时该属性默认值就是关键字# # FIXEDFIXED后面指定的那个字符串。后面指定的那个字符串。 DTD与名称空间与名称空间 名称空间是用来区分相同名称的标记,名称空间在标记的开始标记中声明,作用域是该标记所标记的内容,除非该标记的子标记又声明了名称空间。名称空间分为有前缀的名称空间和无前缀的名称空间。名称空间也可以在DTD中声明,W3C允许在DTD中用“ATTLIST”声明来约束标记的名称空间。格式为: 例如: 注意:如果XML文件中的某个标记必须使用名称空间,那么,在DTD中 定义该标记时,该标记也必须使用名称空间的前缀。 返回!DOCT

23、YPE message abclilinmale55DTD的实体(的实体(1 1) DTD中的实体分为普通实体和参数实体,普通实体简称为实体。普通实体指可以被XML文件在标记内容中通过实体引用使用的实体。按实体内容的位置分为内部实体和外部实体。按可解析与不可解析分为可解析实体和不可解析实体。解析器在解析XML文件数据时,会将实体应用部分替换为预定义实体的内容。 q内部实体与外部实体 内部实体是指实体内容包含在该DTD文件中的实体。外部实体指的是实体内容是该DTD文件以外的其他文件的实体。 DTD的实体(的实体(2 2) q内部实体与外部实体 内部实体的声明: DTD中定义内部实体的格式如下:

24、例如: 外部实体的声明 : DTD中定义内部实体的格式如下: 例如: DTD的实体(的实体(3 3) q内部实体与外部实体 实体的引用:在XML文件中实体引用的格式为: &实体名称; 例如: 圆周率的值是:Π 解析器在解析时,就会将“Π”替换为“3.14159” 。注意:实体引用时,“&”、“实体名称”和“;”之间都不能有空格。 DTD的实体(的实体(4 4) q内部实体与外部实体 实体的引用的例子:DTD中定义实体如下:文件05.txt的内容:我是外部实体,来自05.txt。 DTD的实体(的实体(5 5) q内部实体与外部实体 实体的引用的例子:XML文件代码如下: &inen

25、; &outen; 程序运行结果如图所示: DTD的实体(的实体(6 6) q可解析实体与不可解析实体 可解析的实体是指实体的内容是能被解析器解析的数据。例如: “3.14159” 、 “How are you?” 、 “a+b>c” 解析器会把它们解析为:“3.14159”、“How are you?”、“a+bc”。所以,它们都称为可解析的实体。 不可解析的实体是指实体内容包含解析器不能解析的数据的实体。不可解析的数据通常指二进制数据、图片文件等。 返回DTD中的参数实体中的参数实体 (1) 参数实体是指在DTD文件中定义,只能由DTD文件本身通过实体引用来使用的实体,和关联的XML

26、无关。通过参数实体的使用,可以大大减少编写重复代码所带来的工作量。 参数实体分为内部参数实体和外部参数实体。DTD中内部参数实体定义格式为: DTD中外部参数实体定义格式为: DTD中的参数实体中的参数实体 (2)例如: 注意:“%”两边都要有空格,内部参数实体的“参数实体内容”为文本 数据,其中如果包含特殊字符(“”、“&”、“”和“”), 要通过预定义实体引用来使用。外部参数实体的“实体的URI” 必须是有效资源。参数实体必须先定义后使用。 参数实体引用的格式为: %参数实体名; 解析器在处理文件的时候,会参数实体的引用部分会被替换为参数实体的内容。 DTD中的参数实体中的参数实体 (3)

27、 外部参数实体与使用内部参数实体类似,不同的是引用的是外部文件,外部文件可以是可解析的任意文件,但内容要满足DTD的格式。例如,一个外部文件xinxi.ent的内容如下: 将上面的文件作为DTD的外部实体,DTD文件内容如下: %xinxi; 解析器就会把“%xinxi;”替换为文件xinxi.ent的内容。返回DTD中的注释中的注释 注释可以有助于理解程序,方便阅读。DTD的注释同XML的注释一样,格式为: 例如: 返回!DOCTYPE persions xiaowang male 25 练习下面名称空间的使用正确吗 小型汽车,可以坐4个人。比小型汽车大,可以坐更多的人。下面的文件正确吗?为什么? mes.dtdmes.xmllixiao25123456wangxiao

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号