本书自第1版出版以来,一直是广大程序员学习XML的优秀入门教程。该书全面详实地介绍了XML的基本语法、基本用途和常用的开发工具和方法。全书共21章,分为8个专题。主要内容有XML基本语法、DTD、XML Schema、RELAX NG、XPath、XSLT、XQuery、DOM、SAX、RSS、Web服务、Ajax、SOAP、CSS、XHTML、SVG和XForms等,每章都有习题,书后附有参考答案,可帮助你全面掌握XML及其应用方法。
欢迎使用《XML入门经典(第4版)》一书。它是笔者最初学习XML语言时梦寐以求的一本书。 在我们编写本书第1版的时候,XML语言刚刚面世不久,但是它很快获得立足之地,并且越来越广泛地应用于各种应用程序中。当我们开始编写本书的第2版时,XML已经被证明不是一种稍纵即逝的时尚,而事实上,它在整个计算机行业里具有令人难以置信的广泛应用。当本书的第3版出版时,事实已清楚地表明,XML不仅已是一项成熟的技术,而且更重要的是它已分为若干个专门领域。在编写本版的时候,面对日益增多的XML规范,我们有必要对它们进行分类。这些规范或者使用XML技术,或者给XML核心规范提供了补充内容。 那么什么是XML?它是一种标记语言,以其特有的方式描述数据结构。不管是在什么场合,凡是涉及到数据输入/输出、存储、传输,都可以使用XML技术。最为大家所熟知的应用例子可能是Web程序(特别是最近出现的手持式Web服务,其中一些服务是基于XML语言的),但是XML也广泛应用于其他非Web应用程序。例如,它可以代替(或者补充)传统的数据库,也可以用于两个企业之间传输财务信息。新闻机构以及个人也已经开始利用XML技术发布聚合新闻故事和发布网络日记。 本书的目的就是为读者提供有关XML的全部信息—— 什么是XML、它的基本原理、它使用的技术以及如何把它最有效地应用在各种不同的场合,从简单的数据传输到在Web网页里使用XML技术。本书回答以下几个最基本的问题: ● 什么是XML技术? ● 如何应用XML技术? ● 它的工作过程? ● 它有哪些作用? 本书读者对象 本书是为那些尽管知道掌握XML技术的重要性,但是又不知道其理由的人准备的。读者也许已经看到过很多与XML有关的宣传,但是并没有看到一些实质性的东西,想象不出XML到底是怎么回事,它到底有什么功能;读者也许已经使用过一些开发工具—— 这些工具试图用用户界面和脚本掩盖底层的XML技术,但是读者很想知道底层的工作过程;也许读者曾经涉足于Web开发,甚至可能对HTML知之不少,但实际上它们都不是学习本书的前提。 实质上,读者并不需要对标记语言有所了解。本书假定读者完全不知道标记语言是怎么回事,并在一开始就让初学者明白什么是XML,并使读者迅速成为XML的专家。 “入门”一词是指本书的风格,而不是指读者的经历,有两类初学者是本书最理想的读者: ● 比较熟悉Web开发或数据传输技术的程序员。他们已经掌握了本书将要介绍的一些基本概念,但是他们要学习如何把XML技术嵌入到这些他们正在开发的实际项目中。 ● 那些虽然熟悉程序开发环境但是对Web开发和数据交换应用程序没有实质性的知识的读者。对于这一类读者,本书除了指导他们如何把XML技术应用到这些领域里外,还要给他们介绍一些新概念,这些新概念有助于他们理解这些系统的运行机制。 本书组织结构 我们尽量按内容的逻辑关系组织本书,目的是把读者从一个初学者训练成一个专家。在本书的第4版,各节的内容是根据XML在各个领域里的专门技术而安排的。除非读者已经在使用XML,否则必须从本书第Ⅰ部分的“引言”开始阅读。读了“引言”后,可以快速跳转到某个专题,当然,如果读者喜欢,也可以从头到尾阅读本书。但是要记住,书中有很多内容相互交迭在一起,某些章节里要用到其他章节里的内容。 ● 本书一开始就讨论什么是XML语言,为什么计算机行业需要这样一种语言。 ● 在介绍了原因之后,接着就讨论“如何”使用XML语言,我们向读者介绍如何建立一个良构的XML文档。 ● 当读者已经知道了XML语言的本质和使用方法后,需要继续学习高级的内容,如在创建XML文档时,不仅要创建一个良构的文档,而且还要是一个有效的文档(以后读者将领会“有效”一词的含义)。 ● 在熟悉了XML语言并且看到它在实际中的应用之后,我们就让程序员充分发挥其潜能,并且介绍基于XML的程序设计语言,利用这种语言,可以把文档从一种格式转换为另一种格式。 ● 最终,我们需要保存XML数据,或者从数据库中读取XML数据。在这个时候,读者不仅要知道XML和数据库技术的发展现状,而且要掌握如何用类似于SQL的查询语法检索XML信息,我们称之为XQuery。 ● 如果我们不能编写程序读取XML文档的数据或创建新的XML文档,则XML没有实际的应用价值,所以我们又回到程序设计这个话题上,并且讨论XML的几种程序方法。 ● 在自己的单位里如何编写程序与如何使用XML是一回事,但是把资料传送给商业上的合作者或者把信息发布到Internet上又是另一回事。我们将介绍如何利用XML技术在Internet上发送、发布信息,并且搜索可以提供信息的服务。 ● 我们有这么多的数据表示成XML格式,如果我们能轻而易举地把这些数据显示给其他人,那真是太好了。事实将证明,我们完全能够做到这一点。本书将向读者介绍HTML的XML版本,即XHTML。读者将会发现,其实自己已经在HTML文档中使用过一种名为CSS的技术。利用这种CSS技术,我们可以给HTML文档增加可视化效果。此外,读者还将学习如何用XML技术生成令人啧啧称羡的图形和交互表单。 ● 最后,以一个案例研究结束本书的内容。通过这个案例,让读者初步掌握如何把XML应用于实际工作中,读者可以把这个案例应用于自己的程序中。 本书主要内容 本版以前三版为基础,为了反映XML语言的最新变化,新增了许多内容—— XQuery、RSS和Atom以及AJAX。为了在全书里反映XML规范的最新版本和最好的约定,我们更新了本书的许多内容。变化之一是,在每章的后面增加了习题,这些习题用来测试读者对本章内容的理解程度。这些习题的答案放在附录A里。 第Ⅰ部分:引言 绝大多数读者必须从“引言”开始阅读本书。“引言”部分的前3章除了介绍XML文档的构建规则外,还介绍了XML语言的应用。读完了第Ⅰ部分内容后,读者应该能够看懂XML文档,并且可以动手建立XML文档。 第1章:什么是XML 这一章介绍了一些基本概念,向读者介绍这样一个事实:XML就是一种标记语言(类似于HTML语言),可以用它定义元素、标签和属性(它们总称为词汇)。读者将发现,标签并没有实际含义,只是描述数据结构的一种方法。 第2章:良构的XML文档 除了介绍什么是良构的XML文档外,本章还介绍了在命名和构造元素时应该遵循的规则(XML 1.0和1.1规范)。为了生成良构的XML文档,我们必须遵循这些规则。 第3章:XML名称空间 由于用户可以自行定义标签,因此在共享文档时,必须避免标签名之间发生冲突。名称空间为我们提供了一种用URI唯一标识一组标签的方法。这一章介绍如何使用名称空间。 第Ⅱ部分:验证 除了第Ⅰ部分的建立良构XML文档的规则外,读者最想学习的技术可能就是如何创建和使用不同的XML词汇了。第Ⅱ部分将向读者介绍定义XML词汇的三种语言,它们是DTD、XML Schema和RELAX NG。此外,本部分还向读者介绍如何利用这些定义验证用户的XML文档。 第4章:文档类型定义 利用文档类型定义(DTD)说明XML文档的构建模式,甚至可以提供默认值。当XML文档遵循相应的文档类型定义时,我们就称之为有效的XML。这一章讨论文档类型定义的基本用法。 第5章:XML Schema 与文档类型定义(DTD)一样,XML Schema也是用来定义XML文档的结构的。除了用来定义文档结构外,还可以用来定义属性值和元素内容的数据类型。与DTD相比,XML Schema功能更加强大。 第6章:RELAX NG RELAX NG是XML定义文档结构的第三种方法。它不仅在语法上和功能上不同于XML Schema和DTD,而且吸收了前两者的精华。因此,它既简单又功能强大。RELAX NG 使用两种语法;本书既讨论它的完全语法,也讨论它的紧凑语法。 第Ⅲ部分:处理过程 除了定义和建立XML 文档外,我们还需要掌握如何从文档中读取信息,如何把它转换为其他格式。事实上,正是由于XML 具有易于读取信息和易于转换为其他格式等特性,才使XML 功能如此强大。 第7章:XPath XPath语言用来定位XML文档里的段落和数据,它在其他许多的XML技术里有重要的应用。 第8章:XSLT 用XSLT样式表可以把XML转换为其他XML文档、HTML文档或其他格式。第8章介绍XSLT技术。 第Ⅳ部分:数据库 能够建立和处理XML文档当然不错,但是我们最终需要保存这些文档。第Ⅳ部分介绍在保存和检索XML文档时,从不同的数据库中读取文档片段需要用到的方法。 第9章:XML查询语言—— XQuery 我们经常从一个数据库中检索信息,有了XQuery,我们可以用一流的方法实现这个功能。XQuery 是建立在XPath 和XPath 2.0之上的。 第10章:XML与数据库 XML是组织数据的最理想选择,因此有些传统的数据库开始支持XML。本章介绍这些数据库,并概括性地介绍XML在n-层结构中的应用。此外还介绍基于XML的新型数据库。 第Ⅴ部分:程序设计 在我们的XML 职业生涯中,在某个时候肯定需要在自己的程序中访问XML 文档。第Ⅴ部分将介绍两种最常用的方法,即文档对象模型(DOM)和XML 简单API(Simple API for XML,SAX)。 第11章:文档对象模型(DOM) 程序开发者可以在各种编程语言中利用文档对象模型的对象、接口、方法和属性操作XML。本章介绍这些内容。 第12章:XML简单API 用程序方法处理XML数据的另外一种方法是以XML简单API为接口。本章介绍如何使用SAX和来自Java SAX API的例子。 第Ⅵ部分:通信 在两台计算机之间接收或发送信息通常是不容易的,但是人们已发明了若干技术,利用这些技术,使得在计算机之间用XML进行通信变得轻而易举。这部分将介绍RSS、内容聚合、Web服务和SOAP。第4版新增一章内容专门介绍Ajax技术。 第13章:RSS、Atom和内容聚合 RSS是一项正在蓬勃发展的技术。它可用来在Internet上发布聚合新闻和网站摘要。本章不仅介绍了如何使用RSS和Atom的不同版本,而且也讨论了这些技术的未来发展趋势。此外,本章还说明了如何建立一个简单的新闻阅读器程序。 第14章:Web服务 利用Web服务,我们可以执行跨计算机通信。本章描述什么是Web服务,并向读者介绍,如何在XML中使用远程过程调用(用XML-RPC和REST技术),此外本章还向读者简单介绍SOAP等重要主题。最后,把它用于Web服务的规范进行分类。 第15章:SOAP和WSDL 简单对象访问协议(SOAP)是XML Web服务的基础,它允许跨计算机通信,是目前最常使用的规范之一。利用SOAP,我们可以对XML文档进行封装,然后通过Internet把它发送到其他计算机供进一步处理。这一章解释了SOAP和Web 服务解释语言(WSDL),后者用来发布Web服务。 第16章:Ajax 有了Ajax我们可以在Web服务、SOAP和REST通信中使用JavaScript脚本。此外,Ajax模式可以用于Web网页里与Web服务进行通信,而且不需要刷新。本章是第4版新增的内容。 第Ⅶ部分:显示 有几个XML技术专门用来显示保存在XML文档中的数据。有些技术是基于Web的,另一些技术是专门为应用程序和移动设备而设计的。在这一部分,我们主要介绍当前使用的显示方法和显示格式。 第17章:样式表(CSS) 网站设计者很久以前就已经在HTML网页里使用样式表(CSS)了,利用样式表,可以方便地修改网站的外观,无需修改底层的HTML文档。这强大的功能也可以用于XML 文档,使得我们可以在浏览器里正确显示XML文档。如果读者希望能够灵活地控制显示文档,则还可以用XSLT 把自己的XML文档转换为HTML或XHTML文档,然后把CSS应用到这些文档上。 第18章:XHTML语言 XHTML是新版HTML,它遵循XML规则。本章讨论HTML 与XHTML之间的差异,并说明如何利用XHTML语言使我们的网站得到更多浏览器的支持,从最早的浏览器到移动设备上的最新浏览器。 第19章:可缩放矢量图形(SVG) 读者是否想用XML生成定制图像呢?有了SVG,我们就可以用基于XML的矢量命令描述一个图形。本章,我们将向读者介绍SVG的基本概念,然后深入介绍一个比较复杂的基于SVG的应用程序,该应用程序可以发布到Internet上。 第20章:XForms XForms是基于XML的表单,它可以用来设计台式机里的应用程序、纸质表单,当然还有XHTML表单。本章,我们介绍XForms的基本概念,以及一些令人感兴趣的应用。 第Ⅷ部分:案例研究 通过本书前面20章的学习,读者已经知道了XML在Web、B2B(Business-to-Business)、数据存储和其他许多情形中的应用。这个案例研究通过一个实例程序向读者说明了如何把理论应用于实际。它是本版新增的内容。 第21章:案例研究—— 抵押贷款计算器 这个案例研究探讨了把XML应用于网站的一些方法和遇到的一些问题。它用一个实例说明如何建立一个贷款计算器。我们首先用XHTML 和CSS建立一个主页,然后用Ajax访问本地的Web服务,利用XML Schema建立.NET的数据结构,最后用文档对象模型把结果显示在SVG图表里。第22章的案例研究包含相同的内容,但是不采用.NET的开发方法而是采用Ruby on Rails的开发方法。 第22章:案例研究—— 基于Ruby on Rails架构的抵押贷款计算器 在这个案例里,我们将用Ruby on Rails语言建立一个Web应用程序。本例只使用Ruby on Rails内置的Web服务器。 附录 附录A提供了全书习题的答案,其余的附录提供本书重要内容的参考资料,当读者开始把从本书学到的知识应用于实际开发时,这些参考资料就非常有用。 整个附录由以下几部分组成: ● 附录A 习题参考答案; ● 附录B XPath参考; ● 附录C XSLT参考; ● 附录D XML 文档对象模型; ● 附录E XML Schema元素和属性参考手册; ● 附录F XML Schema数据类型; ● 附录G SAX 2.0.2参考手册。 使用本书的预备知识 由于XML是一项基于文本的技术,因此创建XML文档真正所需要的只是一个记事本或类似的文本编辑器。然而,要真正理解本书某些例子的执行过程,读者还需要一个最新的IE浏览器,它可以在本地打开XML 文档,甚至当执行出错时还会向你提供错误信息。不管怎样,本书提供的屏幕截图可以帮助读者明白实际的执行过程。此外,还要注意以下几点: ● 如果读者的计算机安装了IE浏览器,则肯定还安装了DOM的一个程序,该程序在相关章节里非常有用; ● 本书的一些例子和案例研究需要访问微软的IIS(或PWS)或Apache等Web服务; ● 全书还使用了其他XML工具(基本上是免费的),我们都提供如何获取这些工具软件的说明。 在本书的“验证”这一部分,我们提供了如何使用Codeplot的说明。Codeplot是一个在线的集成的代码编辑器,它支持各种XML技术。由于许多验证工具要求具有编程经验或需要下载很大的程序,因此这一部分的例子使用Codeplot编辑器。Codeplot也可以用来检查XML 文档的良构性,用XSLT转换XML文档,或帮助我们编写XHTML、CSS和SVG文档。该编辑器是免费的,采用了许多本书介绍的技术。 编程语言 贯穿全书,我们都试图证明XML语言无处不在。有些实例专用于Windows平台,但是绝大部分实例都包括了在其他平台上使用的说明,其中包括Linux在内。本版重写了许多实例,使得这些例子可以用于任何的操作环境或Web浏览器。 此外,我们试图说明XML在各种不同编程语言中的使用。这些语言包括Java、JavaScript、PHP、Python、Visual Basic、ASP、C#和Ruby on Rails。因此,读者很有可能发现某个例子是自己熟悉的编程语言编写的,但同时,更有可能发现有些例子是用读者从来没用过的编程语言编写的。当我们使用某种新的编程语言时,总会说明如何下载和安装使用这个语言所需要的工具软件。由于我们的重点放在XML上,因此不管在例子里使用哪种语言,都详细说明了XML核心概念。 源代码 在读者执行本书里的例子时,可能会用手工方法输入全部的代码,或使用本书附带的源代码文件。本书中使用的所有源代码文件都可以从网站上下载。登录该网站后,只需输入本书的书名(或者使用搜索框,或者使用标题列表),在本书的网页上,单击Download Code链接就可以获得本书的全部源代码。 由于很多书也使用类似的书名,因此读者使用本书的ISBN号搜索是最方便的。本书(原英文书)的ISBN是978-0-470-11487-2。 当读者下载了本书的源代码后,用自己喜欢的解压软件对它进行解压。或者访问Wrox公司代码下载主页(/dynamic/books/downloads.aspx),看看是否有本书或该公司其他书的代码。 勘误表 我们尽最大所能,避免在原文或代码里出现错误。但是没有人是完美的,错误是肯定有的。如果读者发现书中的某个错误,不管是拼写错误还是代码错误,反馈给本书的作者,我们会感激不尽。你指出某个错误,可能会节省另一个读者几个小时的苦苦探索的时间,而且也帮助我们提供更高质量的信息。 要得到本书的勘误表,访问网站,用搜索命令或标题列表查找本书。然后在详细介绍本书的页面里,单击Errata链接本书勘误链接),在这一页里,读者将会看到Wrox编辑专为本书发布的勘误表。该出版公司出版的全部书籍列表,包括每本书的勘误表链接,都可以从/misc-pages/booklist.shtml网站上下载。 如果在使用本书的过程中发现了问题或有任何建议,请给wkservice@vip.163.com发电子邮件,我们会检查您的信息,如果是正确的,我们将在本书的后续版本中采用。 网站 如果读者想与本书的作者或同行进行讨论,可以加入到上的P2P论坛。该论坛是一个基于Web的系统,用户可以发布与Wrox出版的书以及相关技术相关的消息,还可以与其他读者和技术人员进行交流。该论坛还提供订阅服务,利用E-mail向读者发送感兴趣的主题,或最新发布到论坛里的帖子。Wrox公司的作者、编辑、其他行业的专家和你的读者朋友都在这些论坛里。 在网站上,还可以找到其他很多不同的论坛,这些论坛不仅帮助读者阅读本书,还可以帮助读者开发应用程序。要加入该论坛,只需按下面的步骤: (1) 访问网站,单击Register(注册)链接; (2) 阅读使用条款并单击Agree(同意)按钮; (3) 填写加入论坛的必要信息和可选信息,单击Submit(提交)按钮; (4) 读者将接收到一封电子邮件,指示读者如何验证用户账号和完成注册过程。 不加入P2P论坛也可以阅读各个论坛里的消息,但是要发布自己的帖子,必须要加入论坛。 当读者加入了论坛后,就可以往论坛里发布新消息,也可以回复其他人发布的消息。可以在Web上随时阅读论坛里的消息。如果读者希望某个论坛用E-mail把最新消息发送给你,单击论坛列表中论坛名旁边的Subscribe to this Forum图标。 如果读者还想获得关于Wrox P2P使用的更多信息,必须要阅读P2P的FAQ(最经常问的问题)。在FAQ里,如何使用论坛软件以及许多专门针对P2P和Wrox书籍等常见的问题都有答案。要阅读FAQ,只需单击P2P页面上的FAQ链接。