《软件开发技术.ppt》由会员分享,可在线阅读,更多相关《软件开发技术.ppt(221页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 1第4章 XML技术基础u4.1 XML简介u4.2 编写XML文档u4.3 文档类型定义(DTD)u4.4 使用样式表显示XML文档u4.5 XML的其他知识u4.6 本章小结2 2Internet能在全球范围内得到如此广泛的应用,无疑是HTML起了巨大的推动作用,可以说没有HTML技术,也就没有Internet的今天。然而由于计算机技术、网络技术和信息技术的快速发展,人们要求加载到Internet上的各种信息越来越多,内容越来越复杂,数据格式也更多样化,使用传统的HTML技术已经无法满足现代网络技术的需要。3 3目前,从Internet的基本应用情况来说,它只是文本和图片的访问媒体,很
2、难实现智能搜索、数据交换和结构化数据的表示等功能。这是由于HTML只描述如何表示Web页的格式,即描述数据的显示格式,而不能对Web页面中出现的数据结构进行表示。具体来说,我们可以把HTML的局限性总结如下:4 4(1)HTML的标记数量有限。HTML大约只有70个固定的标记,它不允许用户定义自己的标记,因此要用HTML表示信息领域繁杂的各种信息,是无法做到的(如复杂的财务和工程报表、数学公式、化学方程、音乐乐谱等)。(2)HTML无法表示信息的具体含义。由于HTML只描述页面的表现形式,具体页面显示的信息代表什么它并不关心。如Apple,表示“Apple”是一种水果、一个公司或其他的什么东西
3、,只从页面信息是无法确定它代表什么。5 5(3)HTML无法描述结构性的数据,更不能实现结构性数据的重用。(4)从基于HTML的文档中,要查找用户想要的信息比较困难。正是由于以上原因,促使人们去研究一种新的、功能强大的、可扩充的用于描述数据对象的标记语言,XML就是在这样的背景下应运而生的。本章将介绍XML的基本概念、编写XML文档的方法以及文档类型定义(DTD)的基本知识,最后介绍如何使用样式表在浏览器上显示XML文档。6 64.1.1 什么是什么是XMLXML是可扩展标记语言(eXtensible Markup Language)的缩写,它由W3C XML工作组于1998年2月10日发布。
4、下面是被人们经常引用的两种定义:4.1 XML简介简介7 7 万维网联盟(W3C)对XML的定义XML描述了一类被称为XML文档的数据对象,并部分描述了处理它们的计算机程序的行为。XML是SGML(Standard Generalized Markup Language ISO 8879)的一个应用实例或一种受限形式。从结构上说,XML文档从属SGML文档标准。8 8 Microsoft公司对XML的定义XML是标准通用标记语言(SGML)的简化子集,专门为Web应用程序而设计。XML提供描述不同类型数据的标准格式(例如约会记录、购买定单、数据库记录等),从而可以一致而正确地解码、管理和显示信
5、息。XML提供表示数据的文件格式、描述数据结构的计划、以及用语义信息扩展和注释HTML的机制。9 9XML是一种元标注语言(即它可以用于定义其他的标记语言),该语言提供一种描述结构数据的格式,有助于更精确地声明内容,方便跨平台的搜索。此外,XML将启用新一代的基于Web的数据查询和处理应用程序,因此,人们认为XML是继HTML和Java技术之后的能在Internet上广泛应用的技术。1010XML的主要优点是:(1)XML技术易于实现信息共享。(2)用户可以自定义数据格式,而且很容易使用工具进行读写。(3)XML技术便于实现数据传输。(4)XML技术可以方便的实现数据重用。(5)XML将数据描
6、述和数据显示分离。(6)XML的超文本链接能力比HTML强,可以定义双向链接和多目标链接等。(7)XML是可扩展的。(8)XML文档包含语义。1111W3C组织(XML标准制定者)对使用XML的优点说明是:XML使得在网络上使用SGML语言更加“简单和直接”,即简化了定义文件类型的过程,简化了编程和处理SGML文件的过程,简化了在Web上的传送和共享。具体来说:(1)XML可以广泛地运用于Web的任何地方。(2)XML可以满足网络应用的需求。(3)使用XML将使编程更加简单。(4)XML便于学习和使用。(5)XML代码清晰、便于阅读理解。12124.1.2 XML和和HTML的设计目的不同的设
7、计目的不同XML和HTML都来自于SGML,它们都含有标记,有着相似的语法,但HTML和XML有本质的区别。HTML是一个定型的标记语言,它用固有的标记来描述、显示网页内容。比如表示用标题1定义的固定格式显示内容。而XML则没有固定的标记,XML不能描述网页具体的外观,它只描述内容的数据形式和结构。HTML网页将数据和显示混在一起,而XML则将数据和显示分开来。1313HTML指定如何在浏览器中显示数据,而XML则定义数据的内容。在HTML中,使用标记告诉浏览器以怎样的格式显示数据。而在XML中,只使用标记来描述数据,因此设计XML的目的不是取代HTML,HTML和XML将在一个很长的时间内并
8、存。1414XML也不是对HTML的升级,它只是对HTML的补充。那么人们为什么不选择对HTML本身进行扩展呢?不同的厂家在开发基于HTML的浏览器时,发明了许多有趣但却互不兼容的标记,这已经使HTML不堪重负,并且由于HTML的特性,使人们只能使用有限的标记,用固定的方式来表现信息。XML却允许个人与组织来创造他们自己的标识语言,应用这些标识语言他们可以在自己的领域内自由地交换信息。HTML在表现信息方面是有缺陷的,但我们必须承认HTML现在仍然在Internet中扮演着重要的角色。1515因为XML是SGML的一个子集,所以XML文件可以使用在SGML环境中,其应用范围更广,不一定要局限于
9、在Web中使用,而HTML只能使用于Web领域。16164.1.3 SGML、XML和和HTML三者之间的关系三者之间的关系在第3章我们说明过,SGML是可以广泛应用于各个领域的信息标识,在Web应用设计中当然可以用SGML,但完整的SGML过于复杂与庞大,在编程中要使用是一件比较困难的事,于是人们对SGML进行了精简,略去了一些SGML中复杂和不常用的部分,经过精简后的XML可以作为下一代Web应用的数据传输和交互工具,可以更加方便地编写和理解应用程序。1717SGML是XML和HTML的母语言,它的覆盖面很广,几乎涉及人们生活的每一个领域,可以描述各种类型的文档。而HTML只是其中的一种文
10、件类型,是一种在网上最常用的文档类型,它定义了一种简单而固定且含标识的文件类型。最后还要说明一点,SGML、XML和HTML都是标记语言,只能进行信息的表示与描述,使信息便于传输与交互,它们自己并不能产生什么操作,操作要由应用程序来实现。所以它们不像其他通用编程语言(如VB、C、C+、Java等)一样用来制定运算、操作和程序流程控制。1818对于已经学习和使用过HTML文档的编程人员来说,XML文档的学习和使用应该不会有什么困难。XML文档与HTML文档一样是一种纯文本文档,所以使用任何一种文本编辑器(本书的实例使用UltraEdit编辑)都可以创建和编辑XML文档。本节将通过一个简单的实例来
11、说明如何编写XML文档及编写XML文档时应该注意什么问题。4.2 编写编写XML文档文档19194.2.1 简单的简单的XML文档实例文档实例什么是XML文档?XML文档就是用XML标识写的XML原代码文件,XML文档的后缀名为.XML。为了让读者对XML文档结构有一个初步的认识,我们首先看一个非常简单的XML文档实例。2020实例4-1:用XML表示学生的基本信息(student-information1.xml)01:02:03:04:Li zhong05:3006:Male07:(010)2886206708:212109:10:zhang ping11:2012:Female13:(0
12、29)4568620614:15:2222第01行是一个XML声明,表示文档遵循的是XML的1.0版本的规范。第02行定义了文档里面的第一个元素(element),称为根元素,即,它表示这些数据是与学生有关的信息。这个元素就类似HTML里的开头标记,注意,这个名称是根据需要自己定义的,当然所使用的标记名称最好能与所标记的数据特性之间有联系,做到看到标记名就能知道它所表示的是什么数据。2323第03行和09行的是定义在根元素内的两个元素,表示根元素里有两个学生的记录信息。第0407行,第1013行分别定义了四个子元素:、和,依次说明了学生的姓名、年龄、性别和电话。实例4-1在浏览器上运行的结果如
13、图4-1所示。当然,你也可以用中文来定义实例4-1中的这些标签,看上去更便于理解,如实例4-2所示。2424图4-1 实例4-1的运行结果2525实例4-2:用XML表示学生的基本信息(student-information2.xml)01 0203 04 Li zhong05 3006 Male07 (010)2886206708 09 262610 zhang ping11 2012 Female13 (029)4568620614 15实例4-2在浏览器上运行的结果如图4-2所示。2727图4-2 实例4-2的运行结果2828读者可能不大理解上面的实例是如何定义的,但是从字面意思大概可以
14、了解实例要表达的内容。出乎读者预料的是上面两个XML文档在浏览器上显示的内容,好像并不是我们所希望的比较美观的格式,这也正好说明了在上一节所说的XML将数据描述与数据显示分离开来,在实例中所看到的正是对数据的描述。2929在上面的实例中可以发现,XML文档所用的标记是设计者根据实际需要自己定义的(所以把XML称做可扩展标记语言,就是指可以自定义标记),并且在IE浏览器上能够很好地识别。但一定要注意,这些标记(如、等)并不是要控制数据在浏览器上以某种格式显示出来,而只是代表这些数据是何种数据类型,如标记之间的内容表示人的姓名。3030如果在书写XML时,有不符合XML要求的内容,浏览器会报告错误
15、信息(这和HTML文档不一样,因为浏览器对HTML文档不进行语法上的检查)。阅读XML文档要使用被称为XML解析器(也称为XML处理器或分析器)的工具软件,XML解析器将输入的XML文档内容进行分析,以检查其是否符合XML的要求,并能将数据传送到应用软件以便进行处理、出版、查询或显示。Netscape公司和Microsoft公司都已经将XML解析器包含(即内嵌)在其浏览器中,所以才能在浏览器上显示对XML文档分析的结果。也有一些公司或XML开发团体提供了XML阅读器和解析器,如XML writer、MSXML、OpenXML、IBM XML4J、Apache Xerces和Oracle XML
16、 Parser等。3131通过以上实例也说明了不能用XML来直接写网页,即便是包含了XML数据,依然要转换成HTML格式才能在浏览器上显示。上面实例中,浏览器上所显示内容只是经过解析器解析后符合XML要求的数据表示。32324.2.2 XML文档的组成文档的组成每个XML文档都有一个逻辑结构和物理结构。从物理角度来看,文档由实体单元组成,一个实体也可以在其他文档的实体中被引用。一个文档以一个根元素或文档实体开始,文档的起始标记和结束标记对数据进行结构化组织,并确定了元素的范围和相互之间的关系。从逻辑上讲,文档由声明(declaration)、元素(element)、注释(comment)、字符
17、引用(character reference)和处理说明(processing instruction)组成,这些组成部分在文档的标记中必须明确规定。3333一个XML文档的逻辑结构包含三个部分:(1)一个XML文档声明。(2)一个关于文档类型的定义(可省略)。(3)用XML标识文档内容。34341.XML文档声明文档声明XML文档声明一般是XML文档的第一行,如实例4-1和实例4-2的01行。其一般格式如下:XML声明由以下几个部分组成:(1)version:为XML的版本号,文档要符合XML1.0规范,目前只有1.0。(2)encoding:为XML文档所用的字符编码。为可选项,默认时为“
18、UTF-8”,如在实例4-2中用了中文字符集“GB2321”。3535(3)standalone:表示文档定义是否在一个文件内。为可选项,默认时取“yes”,如standalone=yes表示它是一个独立的文档,如standalone=no表示该文档要依赖其他文档。(4)“”代表该行指令结束(XML指令部分在该章的后面介绍)。36362.XML文档类型定义文档类型定义文档类型定义(DTD)在文档声明之后,XML标识的内容之前。一般的格式是:DTD是用来定义XML文档中元素、属性以及元素之间的关系。通过DTD文件可以检测XML文档的结构是否正确。如果一个XML文档不需要文档类型定义,则该内容可以
19、省略。37373.XML标识的文档内容标识的文档内容1)组成XML文档的主要语法单位组成XML文档的主要语法单位有元素、标记、属性、根元素等。(1)元素:元素(Element)由一对标识以及其中的内容组成,它是组成XML文档的最小单位。一个元素由一个标记来定义,包括开始和结束标记及其中的内容,如Li ping,与HTML不同的是在HTML中,标记是固定的,而在XML中,标记需要自己创建。如图4-3所示。3838图4-3 XML中元素示意图3939特别地,在XML中可以有空标记,空标记不包含任何内容,为了简化书写,空标记可以不必成对出现,只需要标记结尾处加上“/”符号即可。如下面的两个标记都为空
20、标记:4040(2)标记:标记(Tag)是用来定义元素的。在XML中,标记必须成对出现(空标记除外),将数据包围在中间。如Li ping中,就是标记。(3)属性:XML中的属性(Attribute)与HTML中的属性是一样的,都是对标记进一步的描述和说明,每个标记可以有多个属性。属性值用双引号()或单引号()分隔(如果属性值中有,用分隔;有,用分隔),每个属性都有它自己的名字和数值,属性是标记的一部分。例如,学生可以有性别属性,Anni。但在XML中尽量不要使用属性,最好用元素:4141Anni female另外,要说明的是在HTML中,属性可以用来定义元素的显示格式,比如:计算机 将把“计算
21、机”显示为红色。而在XML中,属性只是对标识的描述,与元素内容的显示无关。例如同样是 计算机,在XML并不会将“计算机”显示为红色。那么,如何在XML中将文字显示为红色呢?这就需要使用CSS或者XSL,将在后面的内容中介绍。4242(4)根元素:每个XML文档必须有且只有一个根元素,根元素是一个包括文档中其他所有元素的元素。根元素的起始标记要放在所有其他元素的起始标记之前,其结束标记要放在所有其他元素的结束标记之后。如实例4-1中的。(5)非根元素:非根元素被包含在其他元素(如根元素)中,一个被包含的元素又可以包含自己的元素,形成嵌套关系。包含其他元素的元素被称为容器(container)。4
22、3432)结构良好的XML文档XML吸取HTML语法上的松散格式带来的经验教训,XML要求要有“良好的格式”(Well-formed XML),其文档格式的要求有:(1)良好格式的文档必须以一个XML声明开始,例如:。(2)良好格式的XML文档必须有一个根元素,其他元素都是这个根元素的子元素。(3)良好格式的XML文档的内容书写时必须遵守XML语法。44443)XML文档语法要求(1)所有的标记都必须要有一个相应的结束标记。(2)所有的XML标记都必须合理嵌套。(3)所有的XML标记都区分大小写。(4)所有标记的属性值必须用双引号“”括起来。45454)XML文档标记的命名要求(1)名字中可以
23、包含英文字母、数字以及其他非英文字符。(2)名字不能以数字或下划线(“_”)开头。(3)名字不能以字母XML(xml或Xml)开头。(4)名字中不能包含空格。4646另外,为了使元素更容易理解和操作,还应注意:名字中不要使用“.”,因为在很多程序语言中“.”是作为对象的操作来使用,例如FONT.color,最好用“_”代替;名字要尽量简短;名字的大小写尽量采用同一标准;名字可以使用非英文字符,比如用中文,但是有些软件可能不支持中文(IE5支持中文元素)。47475)XML文档的注释注释是为了方便阅读和理解,它不会被程序解释和浏览器显示。注释的语法如下:可以看到,XML文档的注释和HTML中的注
24、释在语法上是相同的。养成良好的注释习惯将使你的文档更加便于维护。使用注释时要注意:(1)注释内容中不要出现-。(2)不要把注释放在标记中间,如Name TOM是错误的。(3)注释不能嵌套。(4)可以在除标记以外的任何地方插入注释。48486)字符数据(CDATA)在写XML文档时,有时需要显示字母、数字和其他的符号(如、&或者等),而在XML中这些字符已经有特殊的含义,如果要使用这些字符就需要用到字符数据(CDATA character data),字符数据用于把整段文本解释为纯字符数据而不是标记的情况。CDATA中的所有字符都会被当作元素字符数据的常量部分,而不是XML标记。CDATA的语法
25、是:4949.中可以输入除“”之外的任意字符。如:!CDATAAnni在页面上显示的内容是“ajie”,而不会将其作为标记进行解析。50507)实体(entity)在XML文档中,实体是组成文档的一些要素,这些要素如果要多次使用,就可以将其预先定义为一个实体,然后在一个文档中多次调用,或者在多个文档中调用同一个实体。实体可以包含字符、文字等。使用实体的优点是它可以减少差错,文档中多个相同的部分只需要输入一遍就可以了,它提高了文档的维护效率。如有多个文档都包含一个某人的电子邮箱,就可以将它定义为一个实体,如果需要修改这个电子邮箱,就不需要把所有的文件都修改,而只要修改最初定义的实体语句就可以了。
26、定义实体的语法为5151!DOCTYPE 根元素 实体的引用格式是:&实体名;5252实例4-3:XML文档中实体的使用方法(Entity.xml)01:02:!DOCTYPE COMPANY 03:04:05:06:07:08:&country;09:&add;10:5353实例4-3的第03和04行分别定义了两个实体“country”和“add”,在08行和09行引用了这两个实体。该实例在浏览器上的显示结果如图4-4所示。5454图4-4 实例4-3的运行结果5555在XML文档中,除标记之外就是字符数据。一般的字符用其本身来表示,但这不适用于XML中的保留字符。例如,字符“&”和“”只能
27、作为标记定界符,或在注释、处理指令和CDATA字段中直接使用,其他情况下则需要用字符引用或特定的字符串来表示。这类字符是XML的预定义实体,XML中的五个预定义实体如表4-1所示。5656表4-1 XML的预定义实体57578)名字空间(namespace)当把多个XML合并为一个XML文档时,就会出现这样的情况,在不同的XML文档中,相同标识符可能表示的含义不同,这就会引起数据混乱。比如在一个文档wood table中,表示桌子,而在另一个文档name list中,表示表格。如果需要同时处理这两个文档,就会发生名字冲突。要解决这个问题,就要定义名字空间,给标识名称加一个网址(URL)来区别这
28、些名称相同的标识。5858名字空间需要在XML文档的开头部分声明,声明的语法如下:其中yourname定义名字空间的名称,URL是名字空间的网址。假设上面的“桌子”文档来自http:/,就可以声明为然后就可以在后面的标识中使用定义好的名字空间:wood table5959这样就将这两个区分开来了。要注意的是,设置URL并不是说这个标识真的要到那个网址去读取,它仅仅作为一种区别的标志而已。60609)文本内容(PCDATA)文本内容(Parsed Character data,缩写为PCDATA)是可以被XML解析器识别与解析的文本。XML支持Unicode字符集,因此可以在文本中包含字母、数字
29、、标点、符号等。但注意,XML使用和&做定界标记,如果在文本中包含有这些字符,必须使用实体代替。最后说明一下CDATA与PCDATA的区别,PCDATA是被解析器解析的文本,文本内的标签会被当作标记,实体会被展开。CDATA是不被解析器解析的文本,文本内的标签不会被当作标记,实体不会被展开。6161前面我们介绍过什么是结构良好的XML文档(Well-formed XML)。相应地,一个遵守XML语法规范,并遵守DTD文件规范的XML文档则被称为有效的XML文档(Valid XML)。要注意“结构良好的XML文档”和“有效的XML文档”的差别,它们之间最大的差别在于一个完全遵守XML规范,一个则
30、有自己的“文件类型定义(DTD)”。那么,什么是DTD?又如何定义DTD文档呢?我们将在本节给予详细的介绍。4.3 文档类型定义文档类型定义(DTD)62624.3.1 DTD的概念及其作用的概念及其作用结构良好的XML文档不仅要符合XML的规范还要符合DTD文档的要求。DTD的中文名称是“文件格式定义”(Document Type Definition,缩写为DTD)。它用来描述XML文档的结构,一个完整的DTD文档应包含:(1)元素(ELEMENT)的定义规则。(2)元素之间的关系规则。(3)属性(ATTLIST)的定义规则。(4)元素的排列方式。(5)可使用的实体(ENTITY)或符号(
31、NOTATION)规则。6363把XML文档和它所使用的DTD文档进行比较分析,看XML文档是否符合DTD中所定义规则的过程叫确认(validation)。这样的过程通常是由XML解析器(XML parser)软件来完成的。通过以上分析我们可以这样说,DTD文档与XML文档之间的关系就像面向对象程序设计中的“类与对象”的关系,或者数据库系统中“数据库表结构与数据记录”之间的关系一样。因为一个DTD文档可以被多个XML文档所使用,使这些XML文档都遵守同样的规范与要求。各行业可以根据自己的需要定义不同行业的DTD,使不同组织的人可以通过DTD用来表示和交换数据。6464DTD可以在XML文档中直
32、接给出,也可以保存为一个完全独立的DTD文件,其文件的扩展名为.dtd。这样把在XML文档里定义的DTD称为内部DTD,而把在XML文档外部已经定义好,在XML文档中调用的DTD称为外部DTD。65654.3.2 内部内部DTD与外部与外部DTD1.使用内部使用内部DTD一个内部的DTD声明是在XML文档的头部声明的,即必须写在XML声明和XML根元素之间。其语法格式为其中,“!DOCTYPE”表示开始声明DTD(DOCTYPE是保留字),在声明的后面要写出根元素的名称,DTD规则可以是一条也可以是多条。定义DTD规则的格式为6666其中,“!ELEMENT”表示开始声明一个元素的DTD规则(
33、ELEMENT是保留字),在声明的后面要写出元素的名称,在元素DTD名称后面是对该元素的定义。这个定义表示了在一个元素内的内容应该遵守的规则。下面的实例4-4说明了内部DTD的用法。6767实例4-4:内部DTD的使用方法(in-DTD.xml)01:02:!DOCTYPE students_information 03:05:07:08:09:686810:11:12:13:14:张平15:3816:Male17:18:6969实例的0210行是内部DTD的定义部分,其中以“!ELEMENT”开始的第03行、05行、07行、08行和09行分别表示一个元素规则的定义,在“!ELEMENT”之后
34、是各元素的名称,名称后面是其规则。“#PCDATA”表示其内容部分要被XML解析器解析。实例4-4在IE浏览器上的显示结果如图4-5所示。7070图4-5 实例4-4的运行结果71712.使用外部使用外部DTD内部DTD的缺点是只能被定义它的XML使用,如果其他的XML要使用相同的DTD,只有再在XML文档中重复编写相同的DTD内容。为了使一个DTD定义能被多个XML文档所使用,这就要使用外部DTD。要使用外部DTD,首先要将一个DTD保存在一个单独的文件中。在XML文档中使用外部DTD的语法为7272其中,“SYSTEM/PUBLIC”这两个参数只能选其中的某一个。如果将XML文档与DTD文
35、档存放在同一台机器上,则要使用SYSTEM;而PUBLIC则指文档调用一个公用的DTD文件的网址,即XML文档与DTD文档不在同一台机器上。另外还要注意,有效的DTD文档也必须以一个XML声明开始,例如:7373使用外部DTD与上面例子中使用内部DTD时不同,standalone属性的取值应no(实例4-4中省略standalone属性时,其默认的值为yes),因为它必须和相应的DTD一起使用。“DTD文件的地址”就是DTD文件的网址和名称。所有DTD文件的后缀名为.dtd。我们还用上面的例子,先将DTD部分单独写成一个DTD文档,程序如下:7474实例4-5(1):外部DTD文档(DTD1.
36、dtd)1:2:4:6:7:8:7575实例4-5(2):XML文档中引入外部DTD文档(out-DTD.dtd)01:02:03:04:05:06:张平07:387676 08:Male09:10:实例4-5在IE浏览器上显示的内容与图4-5中的内容是完全一样的,其中实例4-5(2)的02行就是引入外部DTD文档的语句。77773.使用内外混合型使用内外混合型DTD内外混合型DTD是指一个XML文档,引入了外部DTD文档,但又在XML文档中有自己的DTD定义。内外混合型DTD的使用格式是:内外混合型DTD的实例如下:7878实例4-6(1):XML文档中要引入的外部DTD文档(in-out-
37、DTD.dtd)01:02:03:7979实例4-6(2):内外混合型DTD文档的用法(in-out-XML.xml)01:02:!DOCTYPE poem SYSTEM in-out-DTD.dtd03:04:05:06:07:韦应物08:秋夜寄邱十二员外808009:怀君属秋夜,散步咏凉天。空山松子落,幽人应未眠。10:实例4-6(2)中,第02行引入了一外部文档“in-out-DTD.dtd”,03行和04行又定义了内部的DTD。实例4-6的运行结果如图4-6所示。8181图4-6 实例4-6的运行结果8282要注意的是,如果一个元素或实体在内部DTD和外部DTD都有定义时,内部的定义会
38、重新定义外部的定义,也就是说XML的内部DTD具有更高级。83834.3.3 XML元素元素要使用内部或外部DTD,就要定义文档中元素和元素要遵守的规则,当然也要定义元素之间的相互关系。下面介绍定义DTD的语法。元素是XML文档的基本组成部分,在DTD中定义一个元素,然后在XML文档中使用元素。元素的定义语法为“!ELEMENT”表示要进行元素的声明,即说明要定义的是一个元素,声明后面是元素名称,元素名后是对元素的描述。在这里要说明元素所描述的内容是什么样的,元素的内容可以是一般的文字,也可以是其他的元素。8484元素的类型说明如下。(1)EMPTY:该元素不能包含子元素和文本,即没有内容的元
39、素,但可以有属性。这样的元素就是空元素。如有元素的定义:则下面的定义正确(名字、性别和年龄是属性,而不是元素内容):8585而下面的定义错误:曹昌8686(2)ANY:该元素可以包含任何可以被解析的数据和在DTD中定义的元素。将根元素设为ANY类型后,元素出现的次数和顺序将不受限制。如有元素的定义:则下面的定义正确:曹昌8787(3)#PCDATA:可以包含任何字符数据,但是不能在其中包含任何子元素。(4)其他类型(组合):一个元素本身是由其他元素的集合组成。如果一个元素的类型说明部分是另外的一个或多个元素的组合,则称这个元素是一个容器元素,容器元素的定义是其中,A、B和C等是其他的一些元素名
40、。这些被包含在容器元素中的元素,通过在其名称的后面加上有特定意义的符号,就可以控制其被使用的情况,这些符号叫结构符号。XML可以使用的结构符号如下:8888,:将各元素以指定的顺序排列。如(A,B,C,D),表示元素只能按A,B,C,D的顺序出现。*:一个元素可出现0次或0次以上。如A*。+:一个元素可出现1次或1次以上。如A+。?:一个元素可出现0次或1次。如A?。|:只能从列出的元素中使用其中的一个。如(A|B|C),表示只能从A、B或C中选择其中的一个。特别地,当在一个元素的后面什么也不写时,表示该元素只能出现一次。元素在DTD中的定义方法见实例4-7。8989实例4-7(1):XML文
41、档中要引入的外部DTD文档(element.dtd)01:02:03:04:05:06:909007:08:09:在实例4-7(1)的第02行employees_information元素的说明是employee_data+,表示employee_data元素可以在根元素employees_information中出现1次或1次以上。第03行employee_data由多个元素组合而成,其中name+表示姓名可有一个或多个;age、sex和address在employee_data中只能出现一次;email*表示一个人可以没有或有多个email邮箱;tel?表示人没有或有一个电话。应用该DTD
42、文档的XML文档如下:9191实例4-7(2):XML文档(element.xml)01:02:03:04:05:李丕06:1807:男929208:中国,北京,海淀区学院路122号09:10:11:12:13:张宾14:2015:男939316:中国,北京,海淀区学院路200号17:272727218:19:在该例中李丕有两个电子邮箱地址,而张宾却一个也没有;李丕没有电话号码,而张宾有一个电话号码。实例4-7的运行结果如图4-7所示。9494图4-7 实例4-7的运行结果95954.3.4 元素的属性元素的属性与HTML的标记一样,XML中的元素也可以有属性,不同元素的属性,可以有不同的性质
43、。对XML中的元素属性进行说明的语法是:9696其中,“!ATTLIST”表示要开始属性的设置。属性类型可以是CDATA、ID、IDREF/IDREFS、NMTOKEN/NMTOKENS、ENUMERATED、ENTITY/ENTITIES或NOTATION。属性的特点可以是#REQUIRED、#IMPLIED、#FIXED value或取默认的值(Default value)。下面说明这些属性类型。97971.CDATACDATA指属性值可以是任何字符(包括数字和中文)。注意这里的CDATA有别于前面介绍的CDATA。如:则可以进行下面的说明:98982.NMTOKEN/NMTOKENSNM
44、TOKEN是CDATA的一个子集,表示属性值必须是英文字母、数字、句号、破折号、下划线或冒号组成(不能是中文!)。NMTOKENS与NMTOKEN类似,包含多个由空格分隔的字符。NMTOKEN的用法见下面实例4-8。9999实例4-8:属性类型NMTOKENS的应用(nmtokens.xml)01:02:!DOCTYPE poems03:04:05:06:07:08:09:秋夜寄邱十二员外10010010:11:怀君属秋夜,散步咏凉天。12:空山松子落,幽人应未眠。13:14:在实例4-8的05行定义了title元素的属性author其取值是NMTOKENS类型的。在09行author=wei
45、 ying wu中,author的属性由字母和空格组成。运行结果如图4-8所示。101101图4-8 实例4-8的运行结果1021023.IDID属性在XML文档中的取值必须是惟一的。如:则下面的定义是正确的:下面的定义是错误的:1031034.IDREF/IDREFSIDREF属性的值指向文档中其他地方声明的ID类型的值。IDREFS同IDREF一样,但是可以具有由空格分开的多个引用。如有下面“人”的属性说明:则可以有如下的元素属性值:1051055.枚举属性类型枚举属性类型枚举属性类型指事先定义好一些值,并使属性的值必须在所列出值的范围内。如:1061066.ENTITY/ENTITIES
46、ENITITY类型的属性的值必须对应一个在DTD文档内声明的实体,它通常用来处理外部的二进制数据文件,如图形、音效等。ENTITIES类型的属性的值与ENITITIES类似,不同的是可以包含多个由空格分开的实体。具体用法见下面的实例4-9。107107实例4-9:属性类型ENTITY的应用(element-Entity.xml)01:02:!DOCTYPE company03:04:05:06:07:08:09:10810810:χ11:12:实例4-9的第05行说明了address的属性all为ENTITIES类型,第11行是属性的值,由两个实体组合而成。实例4-9的运行结果如图4-
47、9所示。109109图4-9 实例4-9的运行结果1101107.NOTATIONNOTATION表示属性的值必须引用已在DTD中其他地方声明过的某个NOTATION的名称,通常表示一个不可拆解的实体,如图片、一个外部文件等。声明不可拆解实体的处理程序的语法为其中,SYSTEM|PUBLIC的含意已经在前面说明过,表示处理程序是否与XML文件在同一台机器上。Notation主要是用来表明文档中需要来自外部源的数据,而该数据XML本身是不能进行解析的,比如各种格式的二进制文件,需要外部的应用程序进行处理。111111声明NOSTATION属性的语法为如:在DTD中声明了解析mpeg文件的程序为m
48、player.exe。1121128.属性的特点属性的特点属性有四种默认种类的值,具体内容如下。1)#REQUIRED#REQUIRED表示元素的所有实例都必须有该属性的值(NOT NULL)。语法如下:如在DTD中的应用:如在XML中的应用:1131132)#IMPLIED#IMPLIED表示元素的实例中可以不出现该属性的值(NULL)。语法如下:如在DTD中的应用:如在XML中的应用:1141143)#FIXED#FIXED表示元素的实例中该属性的值必须为指定的固定值。语法如下:如在DTD中的应用:如在XML中的应用:1151154)字符串字符串表示为属性提供一个默认的值。语法如下:如在D
49、TD中的应用:如在XML中的应用:116116我们知道,XML文档本身并不包含数据的显示信息。在本章之前的实例中,XML文档在IE浏览器解析后只能显示XML文档的一个树形结构,其主要内容是组成XML的各元素,而无任何显示格式方面的内容。XML文档将数据的内容和数据的表现形式分离,那么如何才能将XML文档中的数据按人们习惯的方式在浏览器上显示出来呢?这就要使用所谓的“样式表”。W3C推荐的样式表有两种标准:4.4 使用样式表显示使用样式表显示XML文档文档117117(1)CSS层叠样式表。(2)XSL可扩展样式表。对于一个XML文档,使用不同的样式表就可以将数据在不同的介质(即媒体)上以不同的
50、形式表现出来,来适合不同群体的人们浏览和使用这些数据。1181184.4.1 CSS层叠样式表层叠样式表在上一章介绍过针对HTML提出的层叠样式表(CSS),同样可以很好地应用于描述XML文档的显示。利用CSS,可以方便地定义XML文档中元素的显示效果。在XML中使用CSS样式表,一般把CSS定义为一个专门的文档,文档的扩展名为.CSS。它是一个纯文本文档,所以可以使用各种文本编辑器进行编辑。将一个CSS样式表文件导入XML文档中的格式如下:119119其中,“?xml-stylesheet”是引入样式表的开始标志,要引入的CSS文档地址由href表示。下面的实例4-10是一个使用CSS样式表