软件开发技术.ppt_第1页
软件开发技术.ppt_第2页
软件开发技术.ppt_第3页
软件开发技术.ppt_第4页
软件开发技术.ppt_第5页
已阅读5页,还剩216页未读 继续免费阅读

下载本文档

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

文档简介

第4章XML技术基础 4 1XML简介4 2编写XML文档4 3文档类型定义 DTD 4 4使用样式表显示XML文档4 5XML的其他知识4 6本章小结 Internet能在全球范围内得到如此广泛的应用 无疑是HTML起了巨大的推动作用 可以说没有HTML技术 也就没有Internet的今天 然而由于计算机技术 网络技术和信息技术的快速发展 人们要求加载到Internet上的各种信息越来越多 内容越来越复杂 数据格式也更多样化 使用传统的HTML技术已经无法满足现代网络技术的需要 目前 从Internet的基本应用情况来说 它只是文本和图片的访问媒体 很难实现智能搜索 数据交换和结构化数据的表示等功能 这是由于HTML只描述如何表示Web页的格式 即描述数据的显示格式 而不能对Web页面中出现的数据结构进行表示 具体来说 我们可以把HTML的局限性总结如下 1 HTML的标记数量有限 HTML大约只有70个固定的标记 它不允许用户定义自己的标记 因此要用HTML表示信息领域繁杂的各种信息 是无法做到的 如复杂的财务和工程报表 数学公式 化学方程 音乐乐谱等 2 HTML无法表示信息的具体含义 由于HTML只描述页面的表现形式 具体页面显示的信息代表什么它并不关心 如Apple 表示 Apple 是一种水果 一个公司或其他的什么东西 只从页面信息是无法确定它代表什么 3 HTML无法描述结构性的数据 更不能实现结构性数据的重用 4 从基于HTML的文档中 要查找用户想要的信息比较困难 正是由于以上原因 促使人们去研究一种新的 功能强大的 可扩充的用于描述数据对象的标记语言 XML就是在这样的背景下应运而生的 本章将介绍XML的基本概念 编写XML文档的方法以及文档类型定义 DTD 的基本知识 最后介绍如何使用样式表在浏览器上显示XML文档 4 1 1什么是XMLXML是可扩展标记语言 eXtensibleMarkupLanguage 的缩写 它由W3CXML工作组于1998年2月10日发布 下面是被人们经常引用的两种定义 4 1XML简介 万维网联盟 W3C 对XML的定义XML描述了一类被称为XML文档的数据对象 并部分描述了处理它们的计算机程序的行为 XML是SGML StandardGeneralizedMarkupLanguage ISO8879 的一个应用实例或一种受限形式 从结构上说 XML文档从属SGML文档标准 Microsoft公司对XML的定义XML是标准通用标记语言 SGML 的简化子集 专门为Web应用程序而设计 XML提供描述不同类型数据的标准格式 例如约会记录 购买定单 数据库记录等 从而可以一致而正确地解码 管理和显示信息 XML提供表示数据的文件格式 描述数据结构的计划 以及用语义信息扩展和注释HTML的机制 XML是一种元标注语言 即它可以用于定义其他的标记语言 该语言提供一种描述结构数据的格式 有助于更精确地声明内容 方便跨平台的搜索 此外 XML将启用新一代的基于Web的数据查询和处理应用程序 因此 人们认为XML是继HTML和Java技术之后的能在Internet上广泛应用的技术 XML的主要优点是 1 XML技术易于实现信息共享 2 用户可以自定义数据格式 而且很容易使用工具进行读写 3 XML技术便于实现数据传输 4 XML技术可以方便的实现数据重用 5 XML将数据描述和数据显示分离 6 XML的超文本链接能力比HTML强 可以定义双向链接和多目标链接等 7 XML是可扩展的 8 XML文档包含语义 W3C组织 XML标准制定者 对使用XML的优点说明是 XML使得在网络上使用SGML语言更加 简单和直接 即简化了定义文件类型的过程 简化了编程和处理SGML文件的过程 简化了在Web上的传送和共享 具体来说 1 XML可以广泛地运用于Web的任何地方 2 XML可以满足网络应用的需求 3 使用XML将使编程更加简单 4 XML便于学习和使用 5 XML代码清晰 便于阅读理解 4 1 2XML和HTML的设计目的不同XML和HTML都来自于SGML 它们都含有标记 有着相似的语法 但HTML和XML有本质的区别 HTML是一个定型的标记语言 它用固有的标记来描述 显示网页内容 比如表示用标题1定义的固定格式显示内容 而XML则没有固定的标记 XML不能描述网页具体的外观 它只描述内容的数据形式和结构 HTML网页将数据和显示混在一起 而XML则将数据和显示分开来 HTML指定如何在浏览器中显示数据 而XML则定义数据的内容 在HTML中 使用标记告诉浏览器以怎样的格式显示数据 而在XML中 只使用标记来描述数据 因此设计XML的目的不是取代HTML HTML和XML将在一个很长的时间内并存 XML也不是对HTML的升级 它只是对HTML的补充 那么人们为什么不选择对HTML本身进行扩展呢 不同的厂家在开发基于HTML的浏览器时 发明了许多有趣但却互不兼容的标记 这已经使HTML不堪重负 并且由于HTML的特性 使人们只能使用有限的标记 用固定的方式来表现信息 XML却允许个人与组织来创造他们自己的标识语言 应用这些标识语言他们可以在自己的领域内自由地交换信息 HTML在表现信息方面是有缺陷的 但我们必须承认HTML现在仍然在Internet中扮演着重要的角色 因为XML是SGML的一个子集 所以XML文件可以使用在SGML环境中 其应用范围更广 不一定要局限于在Web中使用 而HTML只能使用于Web领域 4 1 3SGML XML和HTML三者之间的关系在第3章我们说明过 SGML是可以广泛应用于各个领域的信息标识 在Web应用设计中当然可以用SGML 但完整的SGML过于复杂与庞大 在编程中要使用是一件比较困难的事 于是人们对SGML进行了精简 略去了一些SGML中复杂和不常用的部分 经过精简后的XML可以作为下一代Web应用的数据传输和交互工具 可以更加方便地编写和理解应用程序 SGML是XML和HTML的母语言 它的覆盖面很广 几乎涉及人们生活的每一个领域 可以描述各种类型的文档 而HTML只是其中的一种文件类型 是一种在网上最常用的文档类型 它定义了一种简单而固定且含标识的文件类型 最后还要说明一点 SGML XML和HTML都是标记语言 只能进行信息的表示与描述 使信息便于传输与交互 它们自己并不能产生什么操作 操作要由应用程序来实现 所以它们不像其他通用编程语言 如VB C C Java等 一样用来制定运算 操作和程序流程控制 对于已经学习和使用过HTML文档的编程人员来说 XML文档的学习和使用应该不会有什么困难 XML文档与HTML文档一样是一种纯文本文档 所以使用任何一种文本编辑器 本书的实例使用UltraEdit编辑 都可以创建和编辑XML文档 本节将通过一个简单的实例来说明如何编写XML文档及编写XML文档时应该注意什么问题 4 2编写XML文档 4 2 1简单的XML文档实例什么是XML文档 XML文档就是用XML标识写的XML原代码文件 XML文档的后缀名为 XML 为了让读者对XML文档结构有一个初步的认识 我们首先看一个非常简单的XML文档实例 实例4 1 用XML表示学生的基本信息 student information1 xml 01 02 03 04 Lizhong05 3006 Male07 010 2886206708 09 10 zhangping11 2012 Female13 029 4568620614 15 第01行是一个XML声明 表示文档遵循的是XML的1 0版本的规范 第02行定义了文档里面的第一个元素 element 称为根元素 即 它表示这些数据是与学生有关的信息 这个元素就类似HTML里的开头标记 注意 这个名称是根据需要自己定义的 当然所使用的标记名称最好能与所标记的数据特性之间有联系 做到看到标记名就能知道它所表示的是什么数据 第03行和09行的是定义在根元素内的两个元素 表示根元素里有两个学生的记录信息 第04 07行 第10 13行分别定义了四个子元素 和 依次说明了学生的姓名 年龄 性别和电话 实例4 1在浏览器上运行的结果如图4 1所示 当然 你也可以用中文来定义实例4 1中的这些标签 看上去更便于理解 如实例4 2所示 图4 1实例4 1的运行结果 实例4 2 用XML表示学生的基本信息 student information2 xml 01020304Lizhong053006Male07 010 288620670809 10zhangping112012Female13 029 456862061415实例4 2在浏览器上运行的结果如图4 2所示 图4 2实例4 2的运行结果 读者可能不大理解上面的实例是如何定义的 但是从字面意思大概可以了解实例要表达的内容 出乎读者预料的是上面两个XML文档在浏览器上显示的内容 好像并不是我们所希望的比较美观的格式 这也正好说明了在上一节所说的XML将数据描述与数据显示分离开来 在实例中所看到的正是对数据的描述 在上面的实例中可以发现 XML文档所用的标记是设计者根据实际需要自己定义的 所以把XML称做可扩展标记语言 就是指可以自定义标记 并且在IE浏览器上能够很好地识别 但一定要注意 这些标记 如 等 并不是要控制数据在浏览器上以某种格式显示出来 而只是代表这些数据是何种数据类型 如 标记之间的内容表示人的姓名 如果在书写XML时 有不符合XML要求的内容 浏览器会报告错误信息 这和HTML文档不一样 因为浏览器对HTML文档不进行语法上的检查 阅读XML文档要使用被称为XML解析器 也称为XML处理器或分析器 的工具软件 XML解析器将输入的XML文档内容进行分析 以检查其是否符合XML的要求 并能将数据传送到应用软件以便进行处理 出版 查询或显示 Netscape公司和Microsoft公司都已经将XML解析器包含 即内嵌 在其浏览器中 所以才能在浏览器上显示对XML文档分析的结果 也有一些公司或XML开发团体提供了XML阅读器和解析器 如XMLwriter MSXML OpenXML IBMXML4J ApacheXerces和OracleXMLParser等 通过以上实例也说明了不能用XML来直接写网页 即便是包含了XML数据 依然要转换成HTML格式才能在浏览器上显示 上面实例中 浏览器上所显示内容只是经过解析器解析后符合XML要求的数据表示 4 2 2XML文档的组成每个XML文档都有一个逻辑结构和物理结构 从物理角度来看 文档由实体单元组成 一个实体也可以在其他文档的实体中被引用 一个文档以一个根元素或文档实体开始 文档的起始标记和结束标记对数据进行结构化组织 并确定了元素的范围和相互之间的关系 从逻辑上讲 文档由声明 declaration 元素 element 注释 comment 字符引用 characterreference 和处理说明 processinginstruction 组成 这些组成部分在文档的标记中必须明确规定 一个XML文档的逻辑结构包含三个部分 1 一个XML文档声明 2 一个关于文档类型的定义 可省略 3 用XML标识文档内容 1 XML文档声明XML文档声明一般是XML文档的第一行 如实例4 1和实例4 2的01行 其一般格式如下 XML声明由以下几个部分组成 1 version 为XML的版本号 文档要符合XML1 0规范 目前只有1 0 2 encoding 为XML文档所用的字符编码 为可选项 默认时为 UTF 8 如在实例4 2中用了中文字符集 GB2321 3 standalone 表示文档定义是否在一个文件内 为可选项 默认时取 yes 如standalone yes 表示它是一个独立的文档 如standalone no 表示该文档要依赖其他文档 4 代表该行指令结束 XML指令部分在该章的后面介绍 2 XML文档类型定义文档类型定义 DTD 在文档声明之后 XML标识的内容之前 一般的格式是 DTD是用来定义XML文档中元素 属性以及元素之间的关系 通过DTD文件可以检测XML文档的结构是否正确 如果一个XML文档不需要文档类型定义 则该内容可以省略 3 XML标识的文档内容1 组成XML文档的主要语法单位组成XML文档的主要语法单位有元素 标记 属性 根元素等 1 元素 元素 Element 由一对标识以及其中的内容组成 它是组成XML文档的最小单位 一个元素由一个标记来定义 包括开始和结束标记及其中的内容 如Liping 与HTML不同的是在HTML中 标记是固定的 而在XML中 标记需要自己创建 如图4 3所示 图4 3XML中元素示意图 特别地 在XML中可以有空标记 空标记不包含任何内容 为了简化书写 空标记可以不必成对出现 只需要标记结尾处加上 符号即可 如下面的两个标记都为空标记 2 标记 标记 Tag 是用来定义元素的 在XML中 标记必须成对出现 空标记除外 将数据包围在中间 如Liping中 就是标记 3 属性 XML中的属性 Attribute 与HTML中的属性是一样的 都是对标记进一步的描述和说明 每个标记可以有多个属性 属性值用双引号 或单引号 分隔 如果属性值中有 用 分隔 有 用 分隔 每个属性都有它自己的名字和数值 属性是标记的一部分 例如 学生可以有性别属性 Anni 但在XML中尽量不要使用属性 最好用元素 Annifemale另外 要说明的是在HTML中 属性可以用来定义元素的显示格式 比如 计算机将把 计算机 显示为红色 而在XML中 属性只是对标识的描述 与元素内容的显示无关 例如同样是计算机 在XML并不会将 计算机 显示为红色 那么 如何在XML中将文字显示为红色呢 这就需要使用CSS或者XSL 将在后面的内容中介绍 4 根元素 每个XML文档必须有且只有一个根元素 根元素是一个包括文档中其他所有元素的元素 根元素的起始标记要放在所有其他元素的起始标记之前 其结束标记要放在所有其他元素的结束标记之后 如实例4 1中的 5 非根元素 非根元素被包含在其他元素 如根元素 中 一个被包含的元素又可以包含自己的元素 形成嵌套关系 包含其他元素的元素被称为容器 container 2 结构良好的XML文档XML吸取HTML语法上的松散格式带来的经验教训 XML要求要有 良好的格式 Well formedXML 其文档格式的要求有 1 良好格式的文档必须以一个XML声明开始 例如 2 良好格式的XML文档必须有一个根元素 其他元素都是这个根元素的子元素 3 良好格式的XML文档的内容书写时必须遵守XML语法 3 XML文档语法要求 1 所有的标记都必须要有一个相应的结束标记 2 所有的XML标记都必须合理嵌套 3 所有的XML标记都区分大小写 4 所有标记的属性值必须用双引号 括起来 4 XML文档标记的命名要求 1 名字中可以包含英文字母 数字以及其他非英文字符 2 名字不能以数字或下划线 开头 3 名字不能以字母XML xml或Xml 开头 4 名字中不能包含空格 另外 为了使元素更容易理解和操作 还应注意 名字中不要使用 因为在很多程序语言中 是作为对象的操作来使用 例如FONT color 最好用 代替 名字要尽量简短 名字的大小写尽量采用同一标准 名字可以使用非英文字符 比如用中文 但是有些软件可能不支持中文 IE5支持中文元素 5 XML文档的注释注释是为了方便阅读和理解 它不会被程序解释和浏览器显示 注释的语法如下 可以看到 XML文档的注释和HTML中的注释在语法上是相同的 养成良好的注释习惯将使你的文档更加便于维护 使用注释时要注意 1 注释内容中不要出现 2 不要把注释放在标记中间 如 TOM是错误的 3 注释不能嵌套 4 可以在除标记以外的任何地方插入注释 6 字符数据 CDATA 在写XML文档时 有时需要显示字母 数字和其他的符号 如 或者 等 而在XML中这些字符已经有特殊的含义 如果要使用这些字符就需要用到字符数据 CDATAcharacterdata 字符数据用于把整段文本解释为纯字符数据而不是标记的情况 CDATA中的所有字符都会被当作元素字符数据的常量部分 而不是XML标记 CDATA的语法是 中可以输入除 之外的任意字符 如 Anni 在页面上显示的内容是 ajie 而不会将其作为标记进行解析 7 实体 entity 在XML文档中 实体是组成文档的一些要素 这些要素如果要多次使用 就可以将其预先定义为一个实体 然后在一个文档中多次调用 或者在多个文档中调用同一个实体 实体可以包含字符 文字等 使用实体的优点是它可以减少差错 文档中多个相同的部分只需要输入一遍就可以了 它提高了文档的维护效率 如有多个文档都包含一个某人的电子邮箱 就可以将它定义为一个实体 如果需要修改这个电子邮箱 就不需要把所有的文件都修改 而只要修改最初定义的实体语句就可以了 定义实体的语法为 实体的引用格式是 实体名 实例4 3 XML文档中实体的使用方法 Entity xml 01 02 04 05 06 07 08 10 实例4 3的第03和04行分别定义了两个实体 country 和 add 在08行和09行引用了这两个实体 该实例在浏览器上的显示结果如图4 4所示 图4 4实例4 3的运行结果 在XML文档中 除标记之外就是字符数据 一般的字符用其本身来表示 但这不适用于XML中的保留字符 例如 字符 和 只能作为标记定界符 或在注释 处理指令和CDATA字段中直接使用 其他情况下则需要用字符引用或特定的字符串来表示 这类字符是XML的预定义实体 XML中的五个预定义实体如表4 1所示 表4 1XML的预定义实体 8 名字空间 namespace 当把多个XML合并为一个XML文档时 就会出现这样的情况 在不同的XML文档中 相同标识符可能表示的含义不同 这就会引起数据混乱 比如在一个文档woodtable中 表示桌子 而在另一个文档namelist中 表示表格 如果需要同时处理这两个文档 就会发生名字冲突 要解决这个问题 就要定义名字空间 给标识名称加一个网址 URL 来区别这些名称相同的标识 名字空间需要在XML文档的开头部分声明 声明的语法如下 其中yourname定义名字空间的名称 URL是名字空间的网址 假设上面的 桌子 文档来自 就可以声明为然后就可以在后面的标识中使用定义好的名字空间 woodtable 这样就将这两个区分开来了 要注意的是 设置URL并不是说这个标识真的要到那个网址去读取 它仅仅作为一种区别的标志而已 9 文本内容 PCDATA 文本内容 ParsedCharacterdata 缩写为PCDATA 是可以被XML解析器识别与解析的文本 XML支持Unicode字符集 因此可以在文本中包含字母 数字 标点 符号等 但注意 XML使用和 做定界标记 如果在文本中包含有这些字符 必须使用实体代替 最后说明一下CDATA与PCDATA的区别 PCDATA是被解析器解析的文本 文本内的标签会被当作标记 实体会被展开 CDATA是不被解析器解析的文本 文本内的标签不会被当作标记 实体不会被展开 前面我们介绍过什么是结构良好的XML文档 Well formedXML 相应地 一个遵守XML语法规范 并遵守DTD文件规范的XML文档则被称为有效的XML文档 ValidXML 要注意 结构良好的XML文档 和 有效的XML文档 的差别 它们之间最大的差别在于一个完全遵守XML规范 一个则有自己的 文件类型定义 DTD 那么 什么是DTD 又如何定义DTD文档呢 我们将在本节给予详细的介绍 4 3文档类型定义 DTD 4 3 1DTD的概念及其作用结构良好的XML文档不仅要符合XML的规范还要符合DTD文档的要求 DTD的中文名称是 文件格式定义 DocumentTypeDefinition 缩写为DTD 它用来描述XML文档的结构 一个完整的DTD文档应包含 1 元素 ELEMENT 的定义规则 2 元素之间的关系规则 3 属性 ATTLIST 的定义规则 4 元素的排列方式 5 可使用的实体 ENTITY 或符号 NOTATION 规则 把XML文档和它所使用的DTD文档进行比较分析 看XML文档是否符合DTD中所定义规则的过程叫确认 validation 这样的过程通常是由XML解析器 XMLparser 软件来完成的 通过以上分析我们可以这样说 DTD文档与XML文档之间的关系就像面向对象程序设计中的 类与对象 的关系 或者数据库系统中 数据库表结构与数据记录 之间的关系一样 因为一个DTD文档可以被多个XML文档所使用 使这些XML文档都遵守同样的规范与要求 各行业可以根据自己的需要定义不同行业的DTD 使不同组织的人可以通过DTD用来表示和交换数据 DTD可以在XML文档中直接给出 也可以保存为一个完全独立的DTD文件 其文件的扩展名为 dtd 这样把在XML文档里定义的DTD称为内部DTD 而把在XML文档外部已经定义好 在XML文档中调用的DTD称为外部DTD 4 3 2内部DTD与外部DTD1 使用内部DTD一个内部的DTD声明是在XML文档的头部声明的 即必须写在XML声明和XML根元素之间 其语法格式为其中 其中 ELEMENT 表示开始声明一个元素的DTD规则 ELEMENT是保留字 在声明的后面要写出元素的名称 在元素DTD名称后面是对该元素的定义 这个定义表示了在一个元素内的内容应该遵守的规则 下面的实例4 4说明了内部DTD的用法 实例4 4 内部DTD的使用方法 in DTD xml 01 02 05 07 08 09 10 11 12 13 14 张平15 3816 Male17 18 实例的02 10行是内部DTD的定义部分 其中以 ELEMENT 开始的第03行 05行 07行 08行和09行分别表示一个元素规则的定义 在 ELEMENT 之后是各元素的名称 名称后面是其规则 PCDATA 表示其内容部分要被XML解析器解析 实例4 4在IE浏览器上的显示结果如图4 5所示 图4 5实例4 4的运行结果 2 使用外部DTD内部DTD的缺点是只能被定义它的XML使用 如果其他的XML要使用相同的DTD 只有再在XML文档中重复编写相同的DTD内容 为了使一个DTD定义能被多个XML文档所使用 这就要使用外部DTD 要使用外部DTD 首先要将一个DTD保存在一个单独的文件中 在XML文档中使用外部DTD的语法为 其中 SYSTEM PUBLIC 这两个参数只能选其中的某一个 如果将XML文档与DTD文档存放在同一台机器上 则要使用SYSTEM 而PUBLIC则指文档调用一个公用的DTD文件的网址 即XML文档与DTD文档不在同一台机器上 另外还要注意 有效的DTD文档也必须以一个XML声明开始 例如 使用外部DTD与上面例子中使用内部DTD时不同 standalone属性的取值应 no 实例4 4中省略standalone属性时 其默认的值为 yes 因为它必须和相应的DTD一起使用 DTD文件的地址 就是DTD文件的网址和名称 所有DTD文件的后缀名为 dtd 我们还用上面的例子 先将DTD部分单独写成一个DTD文档 程序如下 实例4 5 1 外部DTD文档 DTD1 dtd 1 2 4 6 7 8 实例4 5 2 XML文档中引入外部DTD文档 out DTD dtd 01 02 03 04 05 06 张平07 38 08 Male09 10 实例4 5在IE浏览器上显示的内容与图4 5中的内容是完全一样的 其中实例4 5 2 的02行就是引入外部DTD文档的语句 3 使用内外混合型DTD内外混合型DTD是指一个XML文档 引入了外部DTD文档 但又在XML文档中有自己的DTD定义 内外混合型DTD的使用格式是 内外混合型DTD的实例如下 实例4 6 1 XML文档中要引入的外部DTD文档 in out DTD dtd 01 02 03 实例4 6 2 内外混合型DTD文档的用法 in out XML xml 01 02 04 05 06 07 韦应物08 秋夜寄邱十二员外 09 怀君属秋夜 散步咏凉天 空山松子落 幽人应未眠 10 实例4 6 2 中 第02行引入了一外部文档 in out DTD dtd 03行和04行又定义了内部的DTD 实例4 6的运行结果如图4 6所示 图4 6实例4 6的运行结果 要注意的是 如果一个元素或实体在内部DTD和外部DTD都有定义时 内部的定义会重新定义外部的定义 也就是说XML的内部DTD具有更高级 4 3 3XML元素要使用内部或外部DTD 就要定义文档中元素和元素要遵守的规则 当然也要定义元素之间的相互关系 下面介绍定义DTD的语法 元素是XML文档的基本组成部分 在DTD中定义一个元素 然后在XML文档中使用元素 元素的定义语法为 ELEMENT 表示要进行元素的声明 即说明要定义的是一个元素 声明后面是元素名称 元素名后是对元素的描述 在这里要说明元素所描述的内容是什么样的 元素的内容可以是一般的文字 也可以是其他的元素 元素的类型说明如下 1 EMPTY 该元素不能包含子元素和文本 即没有内容的元素 但可以有属性 这样的元素就是空元素 如有元素的定义 则下面的定义正确 名字 性别和年龄是属性 而不是元素内容 而下面的定义错误 曹昌 2 ANY 该元素可以包含任何可以被解析的数据和在DTD中定义的元素 将根元素设为ANY类型后 元素出现的次数和顺序将不受限制 如有元素的定义 则下面的定义正确 曹昌 3 PCDATA 可以包含任何字符数据 但是不能在其中包含任何子元素 4 其他类型 组合 一个元素本身是由其他元素的集合组成 如果一个元素的类型说明部分是另外的一个或多个元素的组合 则称这个元素是一个容器元素 容器元素的定义是其中 A B和C等是其他的一些元素名 这些被包含在容器元素中的元素 通过在其名称的后面加上有特定意义的符号 就可以控制其被使用的情况 这些符号叫结构符号 XML可以使用的结构符号如下 将各元素以指定的顺序排列 如 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 实例4 7 1 XML文档中要引入的外部DTD文档 element dtd 01 02 03 04 05 06 07 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文档的XML文档如下 实例4 7 2 XML文档 element xml 01 02 03 04 05 李丕06 1807 男 08 中国 北京 海淀区学院路122号09 pp 10 pp 11 12 13 张宾14 2015 男 16 中国 北京 海淀区学院路200号17 272727218 19 在该例中李丕有两个电子邮箱地址 而张宾却一个也没有 李丕没有电话号码 而张宾有一个电话号码 实例4 7的运行结果如图4 7所示 图4 7实例4 7的运行结果 4 3 4元素的属性与HTML的标记一样 XML中的元素也可以有属性 不同元素的属性 可以有不同的性质 对XML中的元素属性进行说明的语法是 其中 ATTLIST 表示要开始属性的设置 属性类型可以是CDATA ID IDREF IDREFS NMTOKEN NMTOKENS ENUMERATED ENTITY ENTITIES或NOTATION 属性的特点可以是 REQUIRED IMPLIED FIXEDvalue或取默认的值 Defaultvalue 下面说明这些属性类型 1 CDATACDATA指属性值可以是任何字符 包括数字和中文 注意这里的CDATA有别于前面介绍的CDATA 如 则可以进行下面的说明 2 NMTOKEN NMTOKENSNMTOKEN是CDATA的一个子集 表示属性值必须是英文字母 数字 句号 破折号 下划线或冒号组成 不能是中文 NMTOKENS与NMTOKEN类似 包含多个由空格分隔的字符 NMTOKEN的用法见下面实例4 8 实例4 8 属性类型NMTOKENS的应用 nmtokens xml 01 02 04 05 06 07 08 09 秋夜寄邱十二员外 10 11 怀君属秋夜 散步咏凉天 12 空山松子落 幽人应未眠 13 14 在实例4 8的05行定义了title元素的属性author其取值是NMTOKENS类型的 在09行author weiyingwu 中 author的属性由字母和空格组成 运行结果如图4 8所示 图4 8实例4 8的运行结果 3 IDID属性在XML文档中的取值必须是惟一的 如 则下面的定义是正确的 下面的定义是错误的 4 IDREF IDREFSIDREF属性的值指向文档中其他地方声明的ID类型的值 IDREFS同IDREF一样 但是可以具有由空格分开的多个引用 如有下面 人 的属性说明 ATTLIST人relIDID REQUIREDparentIDIDREFS IMPLIEDnameCDATA REQUIRED 则可以有如下的元素属性值 5 枚举属性类型枚举属性类型指事先定义好一些值 并使属性的值必须在所列出值的范围内 如 6 ENTITY ENTITIESENITITY类型的属性的值必须对应一个在DTD文档内声明的实体 它通常用来处理外部的二进制数据文件 如图形 音效等 ENTITIES类型的属性的值与ENITITIES类似 不同的是可以包含多个由空格分开的实体 具体用法见下面的实例4 9 实例4 9 属性类型ENTITY的应用 element Entity xml 01 02 04 05 06 07 08 09 10 12 实例4 9的第05行说明了address的属性all为ENTITIES类型 第11行是属性的值 由两个实体组合而成 实例4 9的运行结果如图4 9所示 图4 9实例4 9的运行结果 7 NOTATIONNOTATION表示属性的值必须引用已在DTD中其他地方声明过的某个NOTATION的名称 通常表示一个不可拆解的实体 如图片 一个外部文件等 声明不可拆解实体的处理程序的语法为其中 SYSTEM PUBLIC的含意已经在前面说明过 表示处理程序是否与XML文件在同一台机器上 Notation主要是用来表明文档中需要来自外部源的数据 而该数据XML本身是不能进行解析的 比如各种格式的二进制文件 需要外部的应用程序进行处理 声明NOSTATION属性的语法为如 在DTD中声明了解析mpeg文件的程序为mplayer exe 8 属性的特点属性有四种默认种类的值 具体内容如下 1 REQUIRED REQUIRED表示元素的所有实例都必须有该属性的值 NOTNULL 语法如下 如在DTD中的应用 如在XML中的应用 2 IMPLIED IMPLIED表示元素的实例中可以不出现该属性的值 NULL 语法如下 如在DTD中的应用 如在XML中的应用 3 FIXED FIXED表示元素的实例中该属性的值必须为指定的固定值 语法如下 如在DTD中的应用 如在XML中的应用 4 字符串字符串表示为属性提供一个默认的值 语法如下 如在DTD中的应用 如在XML中的应用 我们知道 XML文档本身并不包含数据的显示信息 在本章之前的实例中 XML文档在IE浏览器解析后只能显示XML文档的一个树形结构 其主要内容是组成XML的各元素 而无任何显示格式方面的内容 XML文档将数据的内容和数据的表现形式分离 那么如何才能将XML文档中的数据按人们习惯的方式在浏览器上显示出来呢 这就要使用所谓的 样式表 W3C推荐的样式表有两种标准 4 4使用样式表显示XML文档 1 CSS层叠样式表 2 XSL可扩展样式表 对于一个XML文档 使用不同的样式表就可以将数据在不同的介质 即媒体 上以不同的形式表现出来 来适合不同群体的人们浏览和使用这些数据 4 4 1CSS层叠样式表在上一章介绍过针对HTML提出的层叠样式表 CSS 同样可以很好地应用于描述XML文档的显示 利用CSS 可以方便地定义XML文档中元素的显示效果 在XML中使用CSS样式表 一般把CSS定义为一个专门的文档 文档的扩展名为 CSS 它是一个纯文本文档 所以可以使用各种文本编辑器进行编辑 将一个CSS样式表文件导入XML文档中的格式如下 其中 xml stylesheet 是引入样式表的开始标志 要引入的CSS文档地址由href表示 下面的实例4 10是一个使用CSS样式表显示XML文档的非常简单的例子 实例4 10 1 在XML文档中引入CSS样式表 CSS XML xml 01 02 03 04 05 张可国06 男07 8888345 08 中华人民共和国北京市海淀区海淀路888号09 10 11 李张铁12 男13 888888514 中华人民共和国北京市海淀区海淀路999号15 16 在实例4 10 1 的第02行引入了样式表文件 CSS1 css 使实例4 10 1 中的元素按样式表的要求格式显示 下面是样式表CSS文件 实例4 10 2 CSS样式表 CSS1 css 01 students information02 03 color navy 04 display block05 06 name sex07 08 font family Arial 09 font size 20pt 10 color red 11 12 tel13 14 font size x large 15 color black 16 font size 14pt17 18 address19 20 font size 16pt 21 color blue22 在XML中引入样式表文件之后 实例4 10在浏览器上的显示结果如图4 10所示 图4 10实例4 10的运行结果 4 4 2XSL可扩展样式表CSS是HTML扩展以后在DHTML中引入的内容 使用CSS可以方便地将XML文档的内容显示在浏览器上 但是其功能不如XSL可扩展样式表强大 XSL是专门针对XML所设计的样式表 它是XML的扩展应用 所有XSL文件都是合法的XML文件 因此 对于复杂的 高度结构化的XML数据只能使用XSL将数据展现给用户 现在的浏览器 如IE5 x和IE6 0等 已经提供了对XSL的支持 XSL的所有标记都有特定的意义 它们指明XSL如何将XML中的数据显示出来 实际上XSL包含了大部分CSS的功能 只是在XSL文件中以声明标记的方式来使用CSS 1 XSL样式表文档的基本结构XSL样式表文档是符合XML规范的文档 因此其结构与一般的XML文档相似 XSL样式表文档的基本结构如下 对其说明如下 1 标记表示XSL文档内容的开始 标记表示XSL文档内容结束 该标记就是XSL文档的根元素 3 通过模板描述XML文档的显示格式 4 使用xsl 的数据处理标记进行数据的循环 条件等处理 2 XSL的模板在XSL中 数据的显示格式被设计成一个个的模板 最后将这些模板组合成一个完整的XSL文档 这种设计的优点是用户可以先从整体上考虑整个XSL文档的设计 然后将一些表现形式细化成不同的模块 再具体设计这些模块 最后将它们整合在一起 这种将宏观与微观结合起来的设计方法 符合人们条理化 规范化的要求 另外 这也如同程序设计中的模块化设计 有利于设计人员的分工和协作 1 定义模板定义模板的语法结构为 其中各属性的意义是 1 match 确定XSL文档从XML文档的哪个标记开始提取数据 如果没有设置该属性 则默认情况是从根元素开始 即当match是根元素时 设置 match 2 language 表示在XSL文件中所使用脚本语言 默认为JavaScript 对于XML文档中不同层次的数据 要设计不同的模板 在各模板中描述不同层次元素的数据显示格式 数据引用和数据处理等内容 另外 在定义模板时要注意 在XML文档中 如果不同的标记下有同名的子标记时 在为其编写模板时 应把父标记作为其前缀 其格式为parent mark child mark 模板文件必须有一个根模板 即其属性match是 2 调用模板调用一个设计好的模板 要使用如下的语法格式 其中各属性的意义是 1 select 确定要调用的模板 即选取由标记建立的模板 2 order by 指定按哪个元素的数据来排序 排序方式是递增方式时 要在属性值前加上 或什么也不写 排序方式是递减方式时 要在属性值前加上 3 从XML文档中提取数据的方式从XML中提取数据有两种方式 选择方式和测试方式 选择方式使用的XSL元素是xsl value of xsl for each和xsl apply templates 测试方式使用的XSL元素是xsl if和xsl choose 1 使用xsl value of从XML中提取数据xsl value of用来取出XML文件中被选择的元素或属性的内容 也就是说从XML文档中取出数据 并将样式应用到所提取出的数据上 它有如下两种常用格式 1 表示输出当前节点及其所有后继节点的取值 2 输出指定节点的取值 用select属性指定提取对象 下面是一个简单的使用xsl value of提取数据的实例 实例4 11 1 XML文档 poem1 xml 01 02 03 04 秋夜寄邱十二员外05 韦应物06 07 怀君属秋夜 散步咏凉天 08 空山松子落 幽人应未眠 09 10 实例4 11 2 使用xsl value of提取数据的XSL poem1 xsl 01 02 03 04 05 06 在第02行声明了XSL样式表的统一资源标识符 URL 它采用了名字空间的用法 03行开始定义一个XSL模板 因为该模板的定义使用了缺省的 match 属性值 即match 表示从文件的根节点开始提取数据 04行用xsl value of提取数据 表示从根节点开始输出其后的所有数据 由于在模板中没有输出格式的控制标记 所以提取的数据按默认方式输出 即使用浏览器的默认格式 图4 11是其在浏览器上的显示结果 图4 11实例4 11的运行结果 如果将实例4 11 2 中的04行改为如下的格式 即加上了select属性 则只能提取到 content 标记的内容 如图4 12是其在浏览器上的显示结果 图4 12xsl value of加select属性时的显示内容 2 使用xsl for each从XML中循环选择数据使用xsl for each从XML中循环选择数据的语法为xsl for each可以循环处理指定节点的数据 要注意的是 在使用xsl for each模式选取节点 只是找到了所要的节点 并没有取出节点的值 要取出节点的数值 仍然要使用xsl value of 下面是一个使用xsl for each选择数据的实例 实例4 12 1 XML文档 poem2 xml 01 02 03 04 05 李白06 静夜思07 08 床前明月光 疑是地上霜 09 举头望明月 低头思故乡 10 11 12 13 王之涣14 登鹳雀楼15 16 白日依山尽 黄河入海流 17 欲穷千里目 更上一层楼 18 19 20 实例4 12 2 使用xsl for each循环处理XML文档指定节点的数据 poem2 xsl 01 02 03 04 05 06 07 08 09 10 11 12 13 在实例的第04 11行定义了一个XSL模板 04行的match 属性表示从XML文档的根元素开始提取数据 第05 10行定义了一个循环处理 唐诗 五言绝句 节点内数据的元素xsl for each 第06 08行定义了提取 唐诗 五言绝句 节点内 作者 和 标题 的元素xsl value of 输出时作者与标题在一个段内 第09行定义提取 唐诗 五言绝句 节点的 内容 的元素xsl value of 图4 13是其在浏览器上的显示结果 图4 13实例4 12的运行结果 3 用xsl apply templates调用模板设计好的模板可以通过xsl apply templates来调用 对于实例4 12 1 中的XML文档 poem2 xml 可以对不同的元素设计不同的模板 通过不同的模板对不同的内容设计不同的显示格式 将实例4 12 1 所示XML文档 poem2 xml 的第02行改为该实例的样式表XSL文件如下 实例4 13 使用不同的模板处理XML的元素 poem3 xsl 01 02 03 04 05 06 07 08 09 10 11 作者 12 13 14 15 16 标题 17 18 19 20 21 22 23 实例的第04 08行定义了一个XSL模板 该模板的05 07行循环调用 唐诗 五言绝句 节点下的 作者 标题 和 内容 三个模板 图4 14是其在浏览器上的显示结果 图4 14实例4 13的运行结果 4 单条件测试xsl if单条件测试xsl if元素可以依据条件进行判断 如果为真就执行条件内部的规则 其语法如下 xsl if元素有三种条件匹配方式 1 在当前工作标记下是否存在某一标记 即用标记的名称做为匹配条件 2 当前工作标记是否具有某个属性 3 当前工作标记的某个属性是否等于某个属性值 用元素的属性值作为匹配条件 上面测试条件中的 表示属性名的前缀 表示引用当前标记 表示筛选 只有满足筛选条件的标记才能被选取 当xsl if元素有script属性时 可以使用脚本语句表达式为测试条件 这时当脚本语句表达式为真 而且test条件成立时 XSL处理才会处理xsl if元素的内容 属性language表示script程序的语言种类 默认为JScript xsl if中测试条件的设置比较复杂 下面看实例4 14 该实例中有一个表示学生信息的XML文件 其中每位学生有姓名 性别 出生日期 成绩和技能五个项目 编写一个XSL文档 将学生信息以表格方式显示出来 要求给每一个学生的成绩信息给出评语 评语规则是 成绩 80 优秀成绩 60并且成绩 80 良好成绩 60 不及格当成绩小于0分或大于100分时 视为非法成绩 实例4 14 1 XML文档 score xml 01

温馨提示

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

评论

0/150

提交评论