Ajax与三层架构-08章XSL转换XML

上传人:Ron****an 文档编号:147384059 上传时间:2020-10-09 格式:PPT 页数:144 大小:2.24MB
返回 下载 相关 举报
Ajax与三层架构-08章XSL转换XML_第1页
第1页 / 共144页
Ajax与三层架构-08章XSL转换XML_第2页
第2页 / 共144页
Ajax与三层架构-08章XSL转换XML_第3页
第3页 / 共144页
Ajax与三层架构-08章XSL转换XML_第4页
第4页 / 共144页
Ajax与三层架构-08章XSL转换XML_第5页
第5页 / 共144页
点击查看更多>>
资源描述

《Ajax与三层架构-08章XSL转换XML》由会员分享,可在线阅读,更多相关《Ajax与三层架构-08章XSL转换XML(144页珍藏版)》请在金锄头文库上搜索。

1、第8章 XSL转换XML,第8章 XSL转换XML,8.1 概述 8.2 一个XSL文档的讨论 8.3 XSL样式表 8.4 模板规则 8.5 样式表设计,8.1 概述,本章讨论XML文档的另一种转换技术XSL(XML stylesheet language-XML样式表语言)。 W3C在推出XML 1.0规范后,便开始开发符合XML规范要求的转换技术,这就是XSL。1999年11月16日,W3C发布了XSLT 1.0。在2001年12月20日发布了XSLT 2.0,之后相继推出7个修订版,2005年2月11日,2007年1月23日又发布了XSLT 2.0的修订版,最近的一个版本是2009年1

2、月23日发布的。 XSL包含两个部分:一个是XSLT(XSL Transformation),另一个是定义格式的XML词表。,8.1 概述,XSL定义一个XML文档的样式,这个定义用XSLT描写XML文档是如何转换成另一个使用格式化词表的XML文档的。 XMLT 2.0规范包含:样式表结构,数据模型,XSLT语言,模式,模版规则等内容。本章以2007年1月23日发布的XSLT 2.0规范作为蓝本进行讨论。因为,XSLT2.0涉及的内容十分庞大,限于篇幅,我们只能讨论其中的一部分内容。本章只讨论与XML数据的格式化和表示应用有关内容,更多的内容请读者参考相关文献。,8.1 概述,XSLT 2.0

3、是一个把XML文档转换成其他XML文档、文本文档或HTML文档的语言。用XSLT 2.0 不仅能够处理XML,还能处理类似于XML的任何东西。譬如:关系数据库、地理信息系 统、文件系统,任何其他XSLT处理器能建立的XPath data Model(XDM)实例。某些情况下,XSLT 2.0可能直接从XDM实例的数据库来运行。这种在多种输入格式下处理多个输入文件的能力和处理所有XML文件的能力非常有用。其过程参考图8.1 。,8.1 概述,图8.1 XSLT处理过程,8.2 一个XSL文档的讨论,在例2.1中我们给出了一个XML文档,现在着手设计一个简单的XSL转换文档来进行转换,在后续的章节

4、逐步深入展开讨论。 【例8.1】 根据 例2.1的XML文档,设计 一个简单的XSL文件进 行转换。 图8.2给出例2.1 XML文档的树型结构 。,图8.2 例2.1 XML文档的树型结构,8.2 一个XSL文档的讨论,分析:在例2.1的XML文档中根元素是booklist,在bookist下有若干个book子元素,book下有name、author、press、pubdate、price五个子元素和一个属性isbn。文档的结构如图8.1示。用XSL格式化该XML文档,设计要求为: (1)为根元素建立容器,容纳其所有的子元素。 (2)每个book显示在屏幕的一个行区域。 (3) 每个book

5、的子元素显示成一个单元。 可以为例2.1设计一个XSL(文件名:ch8-1.xsl): 1 2 3 4 ,8.2 一个XSL文档的讨论,5 图书信息 6 7 8 图书信息 9 10 11 12 13 14 15 16 17 18 19 20 ,8.2 一个XSL文档的讨论,程序说明: XSL程序是符合XML规范的文档,所以,第1行是该文档为XML文档的声明。 第2行的声明此文件是XSL的表单文件,其中的version声明该文档的版本号,xmlns:xsl属性给出此XSL表单文件的名称空间。该声明需要结束符关闭(20行)。 319行是一个整体,用 定义一个模板,其中的属性match=“/”用来选

6、择该模板从根元素开始构建一个容器。 418行,借助HTML来显示XML元素内容。,8.2 一个XSL文档的讨论, 915行使用了循环命令,其中的属性select用来筛选出显示的元素,这是一个XPath表达式。作用是组织循环,显示booklist下的所有book元素。 1014行使用取值命令取出个元素的值,其中的select用来筛选某个具体的元素值。为了显示成一行,使用HTML的段落标记元素来划分段落。每一个元素值后用顿号“、”分隔。 当设计好上述的XSL文档后,在例2.1的第二行加上: ,8.2 一个XSL文档的讨论,然后在浏览器上显示结果如图8.2所示。,图8.3 用ch8-1.xsl转换c

7、h2-1.xml,8.2 一个XSL文档的讨论,1.XSLT常用术语 用XSLT样式表(stylesheet)把源XML文档的树结构转换为结果树的软件称为XSLT处理器,以免与其他处理器混淆。 执行XSLT处理器功能的特定操作称为实现(implementation)。 源树(source tree)是指提供给XML转换的任意树,它包括含初始上下文节点的文档,含作为样式表参数值提供的节点,从诸如XML文档、Word文件获得的函数结果,以及扩展函数返回的文档等。 结果树(result tree)是由样式表指令构造的任意树。结果树分为最终(final)结果树和临时(temporary)结果树。,8.

8、2 一个XSL文档的讨论,2.什么是XSLT 以样式表的形式来表示XML文档,把XML文档的元素用特定转换命令实现转换,这就是XSLT(XML Stylesheet Language Transform)。XSLT是W3C推荐的XML文档的样式表语法,该语法是与XML1.0的名称空间(Namespaces)一致的结构良好的XML。如例8.1的XSL就是一个XSLT技术应用示例。 在转换XML源文档时,XSLT的任务是把样式信息添加给一个XML源文件,并把它转换成包含XSL格式化对象的文档,或者转换成另一个面向表现的格式,如HTML、XHTML等。样式表就是这个转换技术的核心之一。,8.2 一个

9、XSL文档的讨论,在XSLT中使用一种叫转换表达式的东西,来描述把源文档树转换成结果树的方法和语法规则。这个转换表达式的规则由XPath规范定义。 文档树的结构用数据模型说明。转换由一组模版规则来实现。模版(template)规则把树的层次结构构成的元素序列与模式(pattern)相联系,该模式与源文档的结点匹配。许多情况下,计算这个元素序列会产生新结点作为结果树的一部分。结果树与源树的结构可能相同,也可能完全不同。在构造结果树的过程中,源树的结点可能被过滤掉或被重新排序,还可能加上其他任意结构。,8.2 一个XSL文档的讨论,这个机制允许样式表能够应用到广泛的一类文档,这些文档具有相似的源树

10、结构的构造形态。 一般情况下,样式表包含的元素可以是用XSLT定义的,也可以不是。当样式表包含的元素是用XSLT定义时,必须使用XSLT的名称空间来进行限定。XSLT的名称空间规定为:http:/www.w3.org/1999/XSL/Transform。例如,在例8.1中xsl文件的第2行,我们就使用了这个URI,来规定在整个文件中的XSLT元素都使用XSLT的这个名称空间。 3. 样式表 样式表是用xsl:stylesheet元素或xsl:transform元素定义的一个整体,由一个以上的样式表模块组成。,8.2 一个XSL文档的讨论,每一个模块形成一个XML文档的整体或某个部分。每个样式

11、表模块的形成由数据模型中的一个元素结点来表现。 样式表模块分为标准和简化两种。标准样式表模块是一棵树或树的一部分,该模块由一个xsl:stylesheet元素或xsl:transform元素以及它的后继结点、相关属性和名称空间组成。简化样式表模块是一棵树或树的一部分,指该模块由字面结果元素及其后继结点、相关属性和名称空间一块构成;该元素本身不属于XSLT名称空间。 样式表模块有两种存在方式,一种是独立的,另一种是嵌入的。,8.2 一个XSL文档的讨论,一个独立的样式表模块是由整个XML文档组成的样式表模块,一个嵌入式样式表模块是嵌在另一个XML文档内的样式表模块,典型地,该文档是正在被转换的源

12、文档。 4. 模版规则 XSLT技术以“模板驱动”的方式访问XML数据,通过引进模板,来访问XML数据元素及其属性。 模版规则定义一个处理过程,这个处理能够应用于那些与某个特定模式(pattern)相匹配的结点。一个xsl:template声明定义一个模板,它包含创建结点和(或者)原子值的序列构造程序。一个xsl:template元素必须具有match或name属性,或两者都有。,8.2 一个XSL文档的讨论,如果xsl:template元素带有match属性,它就是一个模版规则。如果一个xsl:template元素带有name属性,它就是命名模版。命名模板可以被其他模板调用。 模版调用有许多

13、方法,这要根据它是模版规则、还是命名模版来决定。调用该模版的结果就是计算包含在xsl:template元素中的序列构造的结果。,8.3 XSL样式表8.3.1 样式表元素,1.定义样式表 在XSL中,样式表元素用xsl:stylesheet 和xsl:transform来表示。xsl:stylesheet是一个表示样式表模块的XML元素,xsl:transform是xsl:stylesheet的同义词,所以说这两个元素是等价的。它们的语法格式的简化形式分别为:,8.3.1 样式表元素,说明: 一个xsl:stylesheet元素必须携带version属性,用来表示XSLT版本。它是一个数字,一

14、般是2.0。表示当前使用的XSLT的版本是2.0。 id属性给出该样式表的唯一标识符,用于标识该样式表。这是一个可选项。 namespace属性定义该样式表使用的名称空间。对XSL而言,其使用的名称空间是专门指定的,即http:/www.w3.org/1999/XSL/Transform。 xsl:stylesheet 和xsl:transform只需使用一个即可,习惯上使用xsl:stylesheet定义样式表。,8.3.1 样式表元素,如例8.1中的XSL文件中的第2行: 就是一个样式表定义。这行代码告诉XSLT解析器现在执行的是一个XSL转换样式表文件。 2. 样式表子元素 在一个样式表

15、中,可以使用在xsl:stylesheet元素之下的子元素叫顶层元素。常用的顶层元素有:xsl:template、xsl:import、xsl:include、xsl:function、xsl:output、xsl:param、xsl:variable。 xsl:variable和xsl:param既可以用作声明,也可以用作指令。全局变量或者参数用声明定义,局部变量和声明用指令定义。,8.3.1 样式表元素,如果需要用到xsl:import元素,它们必须写在xsl:stylesheet中的其他元素的前面。除此之外的所有其他xsl:stylesheet的子元素可以以任意顺序出现,除非存在有冲突的

16、声明外(例如,匹配同一节点的两个模板规则具有相同的优先级别),这些元素的顺序不影响转换的结果。一般情况下,对于包含冲突声明的xsl:stylesheet将出错,但在某些情况下,允许处理器通过选择后续出现的声明来恢复该错误。 例如下面是这些顶层元素定义的一些用法: (1)xsl:template作为顶层元素的情形:,8.3.1 样式表元素, (2)xsl:variable作为顶层元素的情形: 其他的样式表元素将在后面的内容逐步讨论。,8.3.1 样式表元素,3.简化样式表模块 允许作为样式表模块的简化语法只为文档结点定义单个的模板规则。这个样式表模块可以只包含字面(literal)结果元素和它的内容。该字面结果元素必须具有xsl:version属性,这样的样式表模块与标准的样式表模块是等价的。简化样式表规则使用匹配模式“/”。 【例8.2】 使用简化样式表规则设计样式表。 仍然用例8.1中使用的XML文档来讨论,下面是设计模块: ,8.3.1 样式表元素, 图书信息 新书: 因为我们在此简化样式表中,没有使

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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