用XSLT和Xpath查询XML文档
下载后可任意编辑 用XSLT和Xpath查询XML文档 1.序言 1.1 XML概述 1.1.1 XML产生背景 当今,互联网已渗透到社会生活的每一个角落,在此过程中HTML—超文本标记语言功不可磨,HTML以其简单精练的语句和易于掌握的通用性和易学性,使web技术从计算机世界走向全社会,走向千家万户。然而由于电子商务,电子图书,远程教育等的异军突起,使传统的web资源更加复杂化,多样化,于是高容量,高信息量,高效率成为网络信息技术进展追求的目标,与此同时,人们对web服务功能的需求也达到了更高的标准,如:用户需要对web进行智能化的语义搜索,对数据按不同的需求进行多样化显示等个性化服务;公司和企业要为客户创建和分发大量有价值的文档信息,以降低生产成本;以及对不同平台,不同格式的数据源进行数据集成和转换等等。因此,面对着web技术的飞速进展,HTML存在着如下的不足: ·HTML的标记集合是固定的。随着web技术的进展,新的数据格式不断出现并且需要在网上展现,这就需要有一种比较灵活的标记机制来满足不断进展的web内容要求,但标准的HTML语法格式过于简单,且又不允许用户自己创建新的标记,这将无法支持那些专门的页面格式,如:数学公式,化学方程式,音乐乐谱等。 ·DHTML的问题。由于标准的HTML已经无法满足用户的需求,人们在其基础上增加了动态的成分,如脚本程序等,但是这些非标准的技术制作的网页在不同的浏览器之见互不兼容。 ·HTML只是一种表现技术,它并不能揭示HTML标签所标记的信息的任何含义。 ·随着web文件变得越来越大,越来越复杂,web内容提供商已开始感受到普通的HTML已经无法提供用于大规模商业出版所需的扩展性,结构化和数据检查功能。 1.1.2 XML简介 1996年7月W3C开始设计XML,1998年2月发布了XML1.0的第一个版本。XML是SGML的一个简化子集,保留了SGML80%的功能,而其复杂程度只有原来的20%。XML将SGML的灵活性和强大功能与HTML的易用性结合到web的应用中,以一种开放的自我描述的方式定义了数据结构,在描述数据内容的同时能突出对结构的描述,从而体现数据之间的关系。 与普通的标记语言不同,XML是一种元标记语言,即它是一种用来定义标记语言的标记语言。事实上,用户可以利用XML语法和有限的元标记,来定义自己需要的任意的特别标记集,即定义一种在功能上类似HTML标记的标记集,从而形成自己所独有的一套标记语言。 相对于HTML,XML具有很多优点: ·XML是自描述的。XML允许根据各种不同的规则来制定标记,如:商业规则,根据数据描述甚至根据数据关系来制定标记。XML实现了用定义它们自己的标记集来说明文档内容的功能,说明的精度由实现者自己掌握。 · XML支持对文档内容的验证。XML文档的内容和结构是由DTD或XML Schema 来定义,我们可以根据它们来检验文档的有效性。 ·XML允许开发各种不同专业领域的特定标记语言,如:CML, MathML等。 ·XML是非专有并易于阅读和编写的。这使得它成为在不同应用间交换数据的理想格式。 ·XML是基于W3C定制的开放标准,从而使得基于XML的应用具有广泛性。 ·XML支持高级搜索。因为根据XML的语法规则,可以知晓文档内容的结构和含义,所以在XML文档中的搜索较为容易。假如web页是XML格式的,则搜索会更高效,而且不仅可以搜索数据,还可以在搜索中加入与数据相关的上下文信息,形成更为精确的搜索机制。 正因为XML有相对于HTML的这些优点,有人把它称为下一代的web语言,甚至把XML说成是21世纪的世界语,这些都说明了XML的巨大潜力。 1.1.3 XML文档的结构 1.1.3.1 法律规范的XML文档 在编写XML文档时,必须保证文档结构的法律规范性,这样浏览器才能对其作出正确的解释,否则会报错。W3C在XML1.0推举标准中对XML文档的法律规范性作了定义。 当一个文本对象满足下列条件时,就是一个法律规范的XML文档: ·整体上是一个标记文档。 ·必须满足XML1.0法律规范中所有的法律规范约束,即必须遵循XML1.0推举标准中规定的语法规则。 ·文本中直接或间接引用的解析实体都是法律规范的。 1.1.3.2 XML数据结构 所有法律规范的XML文档都由以下三部分组成: ·序言(可选),它包含关于数据其余部分的重要信息。 ·主体,它由一个或多个元素以层次树的形式组成。 ·尾声(可选),紧随元素树以各种各样的形式出现。 序言用于标记XML数据的开始,它描述数据的字符编码,并为XML解析 器和应用程序提供一些其它的配置线索。序言包括:一个XML声明,一个可选的文档类型声明,以及多个可选的注释,处理指令和空白字符等。 主体是XML文档中唯一必须存在的部分,是XML数据最主要的内容。它包括:元素,属性,字符数据等,除此之外,注释,处理指令和空白字符也可交叉存储在元素和字符数据中。主体被组织成一棵层次树,在这棵树中存在唯一的根节点,其对应的元素为文档元素,是树中所有其它元素的父元素,文档中所有其它元素都是它的后代。父—子元素之间要正确的嵌套。 尾声是可选的,它可能包括:注释,处理指令或空白字符。 1.1.4 本文的出发点 对于XML文档,业界有两种不同的观点:其一,以文档为中心的观点认为XML文档是一种带批注的文本文件,该文件包含标记指令,用于控制被包含文本的格式和显示,强调XML的语法并将尖括号视为XML的中心主题。其二,以数据为中心的观点认为XML只是类型化值的许多种表示方法中的一种,软件代理程序可以利用其进行数据互换和互操作,而将XML语法视为次要的细节。本文从后一种观点出发,论述运用Xpath和XSLT查询XML文档。Xpath维持原文档的层次性和结构,适用于访问XML文档的独立节点,XSLT适用于对查询结果进行处理,构建新的元素,在有必要的时候重新组织结果元素,综合运用XSLT和Xpath将允许开发者随意而方便的对源文档进行操作和重组。 由于Xpath是XSLT的基础和核心。所以在谈到XSLT之前须先对Xpath进行介绍。Xpath,即XML的路径语言,这一名称源于Xpath使用基于路径的语法遍历文档的信息集。另外,Xpath的数据模型与XML Infoset的[parent]/[childen]模型平行,每个Xpath节点的属性都可以通过对应的XML Infoset信息项的属性查看,因此,在谈及Xpath之前有必要对XML Infoset作一介绍。 1.2 XML Infoset 1.2.1 XML Infoset简介 XML Info