论文部分内容阅读
摘要:XML因为它在可扩展性和灵活性上的优点以及W3C不遗余力的为它制定各种标准,已经成为Internet上的主要语言。如何对XML文档进行转换以满足不同用户的需要,成为一个非常重要的问题,利用XSLT可以很好的解决这个问题。本文详细描述了基于XSLT转换XML文档的方法,深入讨论其工作原理,并结合一个具体应用实例,进一步阐明了基于XSLT转换XML文档的过程。
关键词:XML;XSLT;XML转换
中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)03-10750-01
1 引言
XML(eXtensible Markup Language)[1]是一种由SGML(Standard Generalized Markup Language)衍生而来的简单的、灵活的文本格式。XML具有这样一些特点和应用:(1)灵活的扩展能力;(2)高度结构化、层次化的数据组织形式;(3)数据与表现形式分离;(4)数据结构的开放性;(5)设计与特定领域相关的标记语言。
由于XML的各种良好特性,将会有越来越多的数据以XML的格式保存和传输。在很多应用场合中需要把XML文档转换成其他格式的文档。例如,构建网站时需要把XML转换成常见的HTML文档;在电子商务中,企业间通过XML文档交换数据,但在接收数据后就可能先要把XML文件转换成企业内部的数据格式,才能往下处理。
因为XML的灵活性和无限性,对同一类数据结构,不同人之间、甚至同一个人不同时期设计的XML文档数据层次关系乃至元素命名都会有所不同。因此,XML文档之间同样存在结构转换的问题。解决了这个问题,XML才能更好的作为数据传输通用格式而在各种应用场合得到广泛应用。
目前存在几种转换XML文档的方法[2]:(1)自己编制程序;(2)利用SAX(Simple API for XML);(3)利用DOM(Document Object Model);(4)基于XSLT。其中基于XSLT方法是当前最重要的方法,也是本文想要讨论的方法。
2 XSLT的概述
XSLT(eXtensible StylesheetLanguage Transformation)错误!未找到引用源。,是W3C正在制定的规范XSL错误!未找到引用源。(eXtensible Stylesheet Language)中的一部分[5],负责XML文档的转换。它详细规定了转换所需要的词汇表和词汇表中的词汇对应的语义。由于XSLT所具有的优异特性,他越来越多地使用在不同XML文档格式转换的场合中:从一种逻辑结构的XML向另一种逻辑结构的XML转换,或是转换为可浏览的HTML文档等。
XSLT文档本身是格式良好的XML文档,通过使用XML的尖括号标记语法来表示文档的结构,所以在书写时要注意标签的匹配问题。既是XSL的声明语句,也是根元素,必须位于文件的首部,所有的XSLT命令都必须在 … 元素中。利用域名机制把XSLT指令区别于其他的XML内容,样式表中所有指令都必须注明属于“http://www.w3.org/1999/XSL/Transform”这个XSLT专属的域名,一般是以“XSL”作为前缀。XSLT定义了源树和结果树中对应部分的转换规则,即模板规则,由标签标明,它可以说明处理的对象(元素/属性)、处理的方式或是转换的结果。
3 XSLT的工作原理
XSLT转换的基本思路是将XML文档视为一种树结构,转换过程就是从源树生成结果树的过程。结果树与源树是分离的,结果树的结构可以与源树完全不同。创建结果树时,来自源树的元素可以被过滤和重排序,并可以添加任意结构。XSLT定义了源树和结果树中对应部分的模板规则(Template Rules),每条模板规则中包含了一个模板(template),并对应着一种模式(pattern)。模板定义了转换的具体内容,即怎样转换,而模式是一个XPath错误!未找到引用源。表达式,它是模板的一个属性,规定了需要进行转换的元素或属性对象,即在什么情况下需要应用这个模板规则。模式与源树中的元素相匹配,模板被实例化产生部分结果树。例如在XSLT转换样式表片段 … 中,定义了一个模板规则,元素的match属性值”/”是模式的一个实例。它规定模板规则只有在XSLT处理器遇到文档元素结点下的根结点时才被实例化。
XSLT转换通常涉及三个文档:源文档、目标文档和含有模板规则的文档,即XSLT转换样式表。XSLT转换器以XML文件为输入,利用预先编写好的转换模板(XSLT转换样式表)把它转换成目标文件,如图1所示。其中,目标文件可以是XML文件,也可以是其他格式的文件如HTML,甚至C程序源文件等等。XSLT不依赖于任何一种编程语言,它本身也是一种符合XML规范的标记语言,可以看作XML的一种应用,发挥了XML元语言的特点,而反过来对XML文档进行转换操作。首先,XML源文档被解析成DOM树存放在内存中,接着对文档进行分析,每一个DOM树中的节点都会与一个模式相比较,当二者匹配时,就会按照模板定义的规则进行转换,否则继续往下匹配。如此循环,直到整个文档处理完毕。具体流程如图2所示。
XSLT按以下规则对源树进行处理,以最终得到结果树。(1)源树中的每一个节点都有可能经处理用来创建结果树片段,此过程是通过模板规则实现的;(2)对源节点列表中的节点按顺序进行处理,产生的结果树片段附加到已产生的结果树中。在创建结果树时,从包含源树根节点的节点列表开始处理;(3)节点的处理需要找到所有匹配本节点的模板,然后按一定规则从中选择一个最佳的模板,被选中的模板将本节点作为当前节点、源节点列表作为当前节点列表进行处理;(4)模板一般通过一个指令来选择一个新的源节点列表继续处理。由于此动作由一个指令完成,因此选择新的源节点列表以及继续处理是不可分的一个步骤;(5)匹配、处理和选择是不断地递归执行,直到没有选择任何新的源节点。模板中选择新的源节点列表来继续处理的指令通过元素定义,并可以通过其select属性选择源节点列表。按照这个规则,XSLT從源树的根节点开始,选择合适的模板来处理根节点。此时根节点被视为为当前节点(current node)。如果此模板中选择了一个源节点列表并继续应用模板,则对此源节点列表中的每个节点顺序处理,重新选择合适的模板来处理此节点,此节点被视为为当前节点,此源节点列表被称为当前节点列表(current node list)。如此递归处理下去,直到没有任何新的源节点被选择。
4 案例说明
本小节通过给出一个实际的例子来详细说明基于XSLT转换XML文档的方法。这个例子实现了从XML文档中提取数据生成一个文本文档。数据以XML文档格式提供,内容如下:
其中xmns:z为名称空间定义。在Xpath中使用名称空间轴对应处理这些内容,在样式表头声明这些名称空间后,样式表中就可以用相应的名称空间前缀引用相应节点。将源XML文件通过处理得到文本格式文件的过程如图3所示。
实际使用的样式表内容如下:
转换结果为一个文本文档,内容如下:
5 结束语
XSLT作为一种操纵XML文档的转换语言有着丰富的命令和函数,利用XSLT技术可以方便地完成对XML文档内容的分析、处理,同时可以将源XML文档转换为多种不同的格式。
参考文献:
[1]Jean Paoli, Francois Yergeau. Extensible Markup Language(XML) 1.0[S]. Available at http://www.w3.org/TR/2006/REC-xml-20060816/,16 August 2006.
[2]李力鴻, 邵敏, 等. XML文档信息的几种转换方法分析与应用实例[J]. 计算机科学, 2003,30(2):40-44.
[3]James Clark. XSL Transformation (XSLT) Version 1.0 [S]. Available at http://www.w3.org/TR/1999/REC-xslt-19991116/,16 November 1999.
[4]Anders Berglund. Extensible Stylesheet Language (XSL) Version 1.1[S]. Available at http://www.w3.org/TR/xsl/, 05 December 2006.
[5]Lionel Villard, Nabil Layaida. An Incremental XSLT Transformation Processor for XML Document Manipulation [A]. In: ACM. Proceedings of the 11th international conference on World Wide Web[C]. ACM Press, 2002,474-485.
[6]James Clark, Steve DeRose. XML Path Language (XPath) version 1.0 [S]. Available at http://www.w3.org/TR/xpath, 16 November 1999.
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
关键词:XML;XSLT;XML转换
中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)03-10750-01
1 引言
XML(eXtensible Markup Language)[1]是一种由SGML(Standard Generalized Markup Language)衍生而来的简单的、灵活的文本格式。XML具有这样一些特点和应用:(1)灵活的扩展能力;(2)高度结构化、层次化的数据组织形式;(3)数据与表现形式分离;(4)数据结构的开放性;(5)设计与特定领域相关的标记语言。
由于XML的各种良好特性,将会有越来越多的数据以XML的格式保存和传输。在很多应用场合中需要把XML文档转换成其他格式的文档。例如,构建网站时需要把XML转换成常见的HTML文档;在电子商务中,企业间通过XML文档交换数据,但在接收数据后就可能先要把XML文件转换成企业内部的数据格式,才能往下处理。
因为XML的灵活性和无限性,对同一类数据结构,不同人之间、甚至同一个人不同时期设计的XML文档数据层次关系乃至元素命名都会有所不同。因此,XML文档之间同样存在结构转换的问题。解决了这个问题,XML才能更好的作为数据传输通用格式而在各种应用场合得到广泛应用。
目前存在几种转换XML文档的方法[2]:(1)自己编制程序;(2)利用SAX(Simple API for XML);(3)利用DOM(Document Object Model);(4)基于XSLT。其中基于XSLT方法是当前最重要的方法,也是本文想要讨论的方法。
2 XSLT的概述
XSLT(eXtensible StylesheetLanguage Transformation)错误!未找到引用源。,是W3C正在制定的规范XSL错误!未找到引用源。(eXtensible Stylesheet Language)中的一部分[5],负责XML文档的转换。它详细规定了转换所需要的词汇表和词汇表中的词汇对应的语义。由于XSLT所具有的优异特性,他越来越多地使用在不同XML文档格式转换的场合中:从一种逻辑结构的XML向另一种逻辑结构的XML转换,或是转换为可浏览的HTML文档等。
XSLT文档本身是格式良好的XML文档,通过使用XML的尖括号标记语法来表示文档的结构,所以在书写时要注意标签的匹配问题。
3 XSLT的工作原理
XSLT转换的基本思路是将XML文档视为一种树结构,转换过程就是从源树生成结果树的过程。结果树与源树是分离的,结果树的结构可以与源树完全不同。创建结果树时,来自源树的元素可以被过滤和重排序,并可以添加任意结构。XSLT定义了源树和结果树中对应部分的模板规则(Template Rules),每条模板规则中包含了一个模板(template),并对应着一种模式(pattern)。模板定义了转换的具体内容,即怎样转换,而模式是一个XPath错误!未找到引用源。表达式,它是模板的一个属性,规定了需要进行转换的元素或属性对象,即在什么情况下需要应用这个模板规则。模式与源树中的元素相匹配,模板被实例化产生部分结果树。例如在XSLT转换样式表片段
XSLT转换通常涉及三个文档:源文档、目标文档和含有模板规则的文档,即XSLT转换样式表。XSLT转换器以XML文件为输入,利用预先编写好的转换模板(XSLT转换样式表)把它转换成目标文件,如图1所示。其中,目标文件可以是XML文件,也可以是其他格式的文件如HTML,甚至C程序源文件等等。XSLT不依赖于任何一种编程语言,它本身也是一种符合XML规范的标记语言,可以看作XML的一种应用,发挥了XML元语言的特点,而反过来对XML文档进行转换操作。首先,XML源文档被解析成DOM树存放在内存中,接着对文档进行分析,每一个DOM树中的节点都会与一个模式相比较,当二者匹配时,就会按照模板定义的规则进行转换,否则继续往下匹配。如此循环,直到整个文档处理完毕。具体流程如图2所示。
XSLT按以下规则对源树进行处理,以最终得到结果树。(1)源树中的每一个节点都有可能经处理用来创建结果树片段,此过程是通过模板规则实现的;(2)对源节点列表中的节点按顺序进行处理,产生的结果树片段附加到已产生的结果树中。在创建结果树时,从包含源树根节点的节点列表开始处理;(3)节点的处理需要找到所有匹配本节点的模板,然后按一定规则从中选择一个最佳的模板,被选中的模板将本节点作为当前节点、源节点列表作为当前节点列表进行处理;(4)模板一般通过一个指令来选择一个新的源节点列表继续处理。由于此动作由一个指令完成,因此选择新的源节点列表以及继续处理是不可分的一个步骤;(5)匹配、处理和选择是不断地递归执行,直到没有选择任何新的源节点。模板中选择新的源节点列表来继续处理的指令通过
4 案例说明
本小节通过给出一个实际的例子来详细说明基于XSLT转换XML文档的方法。这个例子实现了从XML文档中提取数据生成一个文本文档。数据以XML文档格式提供,内容如下:
其中xmns:z为名称空间定义。在Xpath中使用名称空间轴对应处理这些内容,在样式表头声明这些名称空间后,样式表中就可以用相应的名称空间前缀引用相应节点。将源XML文件通过处理得到文本格式文件的过程如图3所示。
实际使用的样式表内容如下:
转换结果为一个文本文档,内容如下:
5 结束语
XSLT作为一种操纵XML文档的转换语言有着丰富的命令和函数,利用XSLT技术可以方便地完成对XML文档内容的分析、处理,同时可以将源XML文档转换为多种不同的格式。
参考文献:
[1]Jean Paoli, Francois Yergeau. Extensible Markup Language(XML) 1.0[S]. Available at http://www.w3.org/TR/2006/REC-xml-20060816/,16 August 2006.
[2]李力鴻, 邵敏, 等. XML文档信息的几种转换方法分析与应用实例[J]. 计算机科学, 2003,30(2):40-44.
[3]James Clark. XSL Transformation (XSLT) Version 1.0 [S]. Available at http://www.w3.org/TR/1999/REC-xslt-19991116/,16 November 1999.
[4]Anders Berglund. Extensible Stylesheet Language (XSL) Version 1.1[S]. Available at http://www.w3.org/TR/xsl/, 05 December 2006.
[5]Lionel Villard, Nabil Layaida. An Incremental XSLT Transformation Processor for XML Document Manipulation [A]. In: ACM. Proceedings of the 11th international conference on World Wide Web[C]. ACM Press, 2002,474-485.
[6]James Clark, Steve DeRose. XML Path Language (XPath) version 1.0 [S]. Available at http://www.w3.org/TR/xpath, 16 November 1999.
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。