图书前言

前    言

作为一本书的第5版,这足以证明其在专业开发人员和学术机构中的流行程度。本书致力于传授这样一种知识,它起初看起来只是另一种昙花一现的技术,但是相反却不断发展成熟以致成为一种理所当然的选择。自本书前一版本算起已将近六年光阴——在IT中这是一个名副其实的生命周期。在复审第4版中哪些应该保留,哪些应该更新,哪些新材料需要补充的过程中,作者发现大约四分之三的材料已经完全过时。相较于于五年前XML有了更多用途,同时在它背后也有了更多依赖XML的技术。现在我们不再需要手工配置深奥的配置文件来让一个Web服务启动并运行。此外在某些领域人们也发现XML并不是总是最合适的。这样或那样的情况,伴随着一次对内容的完整翻修,便形成了这一新版本的基础。

因此,什么是XML?XML代表可扩展标记语言(eXtensible Markup Language),它是一门用于以一种有意义的方式描述数据的语言。实质上无论哪里都需要存储数据,尤其是在数据可能需要被多个应用处理时,XML便是一个很好的起点。它已经在那些重视交互性的场景上取得了良好的声誉从而成为候选技术,这些场景既可以是不同企业间的两个应用,也可以是一个公司内的两个应用。目前存在数百种标准化XML格式,称为架构(schema),它们已经由各个企业达成共识来表示不同类型的数据,从病历到金融交易再到用于表示旅程的GPS坐标。

本书读者对象

本书面向广泛的读者群体。大多数开发者听说过XML但是却对其存有一丝恐惧。XML如今已经习惯在幕后使用,只有在其不能正常工作或者开发者希望做一些与众不同的事情时,用户才意识到他们必须关注内部原理。对于这些人我们有一句忠告:不再恐惧。它同样适用于那些在其他领域拥有丰富经验但是却从没有正式接触过XML的开发者。最后,当你需要第一次尝试一些新东西时,它可以作为你的参考。本书中几乎所有技术都有一个相关的“试一试”练习,它将引导你运行一个简单的示例并对该示例的工作过程进行解释。

本书大体上并不需要你有任何标记语言的知识。这些知识都将在前面几章覆盖。尽管预计大部分读者都有一些Web编程的知识与经验,但是我们已经试着扩展示例使得这些知识包括使用Microsoft堆栈、Java或者其他诸如PHP或Python的开源框架。

不用在意书名中的“入门”一词,那只是Wrox用于描述本书风格的词汇而不是指你的经验水平。本文中的许多概念,特别是最后几章,均来自于现实生活,已经远远超出了入门的范畴。

本书的内容

本书旨在教授你需要知道的XML的所有知识——它是什么,它如何工作,它的相关技术,以及如何使用它来进行工作(从简单的数据转换到提供多通道内容)。本书着手回答下面这些基础问题:

● 什么是XML

● 如何使用XML

● 它是如何工作的

● 它能用来做什么

XML的基本概念自出现以来一直没有改变过,但是其周边的技术却发生了显著的变化。本书对每种技术以及它是如何崛起的都做了一个基本的回顾,但是大部分例子使用的都是最新版本的技术。这些例子同样来自多个平台,其中Java和.NET占据大多数。XML产品同样有所涉及,一度曾经有许多免费和商业的可扩展样式表语言转换(XSLT)处理器;例如XSLT用于操纵XML,将其由一种结构转换为另一种,这将在第8章介绍,但是自从版本2出现之后,由于需要开发和维护软件的工作增多,这些处理器数量已经大幅减少。

本书的组织结构

我们已经尝试将本书中覆盖到的主题以一种尽可能符合逻辑的方式来编排使你能够从一名初学者蜕变成一名专家。每一章节都覆盖一个不同的专业领域。除非你对基础知识相当了解,我们建议你阅读第1部分的介绍性章节,尽管对于精明的读者来说略读就已经足够了。其他章节可以按照顺序阅读,或者如果你对其中某一领域尤其感兴趣,可以直接跳到那一章阅读。例如,当你的老板突然告知你下一个版本必须提供一个XQuery插件,你就可以直接跳到第9章。本书一个简要的概述如下:

● 首先你将学习XML的精确定义以及为什么人们觉得它有用。

● 之后带你学习如何创建XML以及应该遵循哪些规则。

● 一旦你掌握了它,你将继续学习一个合法的XML文档是什么样子的,以及你如何确定你的文档是合法的。

● 之后将了解如何能够操纵XML文档来提取数据并将其转换成其他格式。

● 接下来将会在数据库中存储XML——介绍这么做的优点与缺点,以及如何对数据库中的数据进行查询。

● 之后将学习提取数据的其他方法,特别是哪些适用于处理大文档的方法。

● 然后我们介绍了XML的一些用途,如何以XML格式发布数据,如何创建与使用基于XML的Web服务。我们解释了AJAX的由来以及它的工作原理,同时还有一些XML的替代品以及何时可以考虑使用它们。

● 之后是关于如何在网页中以及图片显示中使用XML的一些章节。

● 最后是一个案例分析。它将许多基于XML的技术结合应用于一个现实世界中的例子。

我们已经试着将本书按照一种符合逻辑的方式进行组织,首先向你介绍基础知识,之后带领你学习与XML相关的不同技术。这些技术被分成六个部分,它覆盖了大部分你能遇到的XML的主题,从原始数据验证到处理、存储以及展现。

第Ⅰ部分:XML介绍

大部分读者应该从这里开始。该部分的各章覆盖了XML的目标以及构建规则。在阅读了这一部分之后你应该理解基本概念与术语。如果你已经熟悉XML,你可以快速浏览这些章节。

第1章:什么是XML——第1章介绍了XML的历史,为什么需要它,以及创建XML文档的基本规则。

第2章:良构的XML——该章进一步详细描述了一个文档如果称为XML,则它应该包含什么,不应该包含什么。它还包括了用于描述一个XML文档中不同组成部分的现代命名系统。

第3章:XML名称空间——每个人的最爱,可怕的名称空间主题以一种简单易懂的方式进行解释。在阅读完该章之后,你将成为专家,而其他人则还在抓耳挠腮。

第Ⅱ部分:验证

本部分涵盖了多种技术来协助你验证创建或接收的XML的格式是否正确。

第4章:文档类型定义——DTD是最初的XML验证机制。该章展示了如何使用它们来既对文档进行约束又能提供额外内容。

第5章:XML Schema——XML Schema是一种更现代的描述一个XML文档格式的方式。该章描述了它们的工作方式并讨论了DTD的优缺点。

第6章:RELAX NG和Schematron——有时无论是DTD还是Schema都无法提供你需要的功能。该章介绍了另外两种方法,可用来检查XML是否合法,此外还包含混合了多种验证技术的例子。

第Ⅲ部分:处理

该部分包含了从一个XML文档提取数据和将一种XML格式转换为另一种格式的技术。它包含了XPath基础,它是许多XML技术的基石。

第7章:从XML中提取数据——该章介绍了文档对象模型(DOM),一种最早设计出来用于从XML中提取数据的方式。之后继续描述了XPath,XML技术的基石之一,它能精确定位到感兴趣的一个或多个项。

第8章:XSLT——XSLT是一种将XML从一种格式转换成另一种格式的方法,如果你是从一个外部源接收文档并且需要自己的系统能够读取该文档,则它是一种基本方法。它覆盖了版本1的基础,当前版本的更高级特性,并展示了下一个版本中计划中的一些特性。

第Ⅳ部分:数据库

在过去的许多年中,数据库中存储的数据与XML中的数据一直存在差距。本部分内容将两者结合在一起,并向你展示了如何能充分利用两种方式。

第9章:XQuery——XQuery是一种被设计成查询已存在文档并创建新XML文档的机制。它尤其适用于存储在数据库中的XML数据,该章将展示它的工作原理。

第10章:XML与数据库——许多数据库系统现在都有特意为XML设计的功能。该章检验了三种上述产品,展示了如何同时查询与更新已有数据,并在有需要时创建新的XML。

第Ⅴ部分:程序设计

该部分专注于两种处理XML的编程技术。第11章覆盖了处理大文档的技术,第12章展示了Microsoft最新的通用数据访问策略,LINQ是如何与XML结合使用的。

第11章:事件驱动程序设计——该章介绍了两种特别适用于处理大文件的XML处理方法。一个是基于开源API的,示例代码使用Java实现。第二个是Microsoft的.NET框架的核心部分,它的示例代码使用C#实现。

第12章:LINQ to XML——该章介绍了Microsoft最新处理XML的方法,从创建到查询再到转换。它包含了许多使用C#和VB.NET的示例,目前相较于.NET版本它们具有更多功能。

第Ⅵ部分:通信

本部分共有5个章节,它们专注于使用XML作为一种通信方式。它覆盖了将数据以一种许多不同系统都能够利用的形式来展示,之后说明了Web服务如何能使数据被大量不同的客户端所使用。最后讨论了如何以一种标准的方式描述复杂数据使得它能够被访问。

第13章:RSS、Aton和内容聚合——本章覆盖了将内容(比如新闻feed)以一种平台独立的方式展示的主要方法。它还介绍了相同的XML格式如何能用于展示诸如客户列表或销售业绩之类的结构化数据。

第14章:Web 服务——Web服务是过去十年中最大的软件成就之一。该章分析了它们如何工作,XML如何与其结合,如果要排除遇到的问题,这些是必须了解的基础知识。

第15章:SOAP和WSDL——该章深入挖掘Web服务并描述了内在使用的两个主要系统:SOAP(它决定了服务如何被调用),以及Web服务描述语言(WSDL),WSDL用于描述Web服务应该提供什么内容。

第16章:AJAX——该部分的最后一章介绍了AJAX以及它如何能够让你的网站在保持响应并使用更少的带宽的情况下提供即时信息。很显然,它使用了XML,但是该章还介绍了你希望抛弃XML转而使用一种替代技术的情况。

第Ⅶ部分:显示

本部分展示了两种使用XML以一种用户友好的方式显示信息同时其格式又能够被计算机识别的方法。

第17章:XHTML和HTML5——该章介绍了如何以及何时使用XHTML以及为什么它相较于传统的HTML更受欢迎。之后进一步展示了HTML 5的新特性以及它如何消除其中的一些障碍。

第18章:可伸缩矢量图形(SVG)——该章介绍了如何将图片存储在XML格式中以及这种做法的优点。之后展示了这种格式如何与其他的诸如HTML的格式相结合,以及这样做的原因。

第Ⅷ部分:案例分析

该部分包含了一个案例分析,它结合了XML的许多用途,并以一个真实世界的例子来展示了它们之间是如何交互的。

第19章:案例分析:XML在出版业中的应用——该案例分析展示了一个虚构的出版社如何从一个基于专有的出版软件转移到一个基于XML的工作流,以及在商业上带来了哪些好处。

附录

三个附录包含了参考资料以及每章最后练习的答案。

附录A:习题参考答案——该附录包含全书所有出现过的每章最后练习的答案。

附录B:XPath函数——该附录包含大部分XPath函数的信息、它们的签名、返回值以及如何使用它们的例子。

附录C:XML Schema数据类型——该附录包含由XML Schema定义的众多内置数据类型的信息。它展示了这些数据类型之间的联系以及它们如何被不同的面(facet)所限制。

使用本书的预备知识

运行本书中的示例并不需要购买任何软件,所有例子都可以使用免费可用的软件来编写并运行。你将需要一个装有标准浏览器的计算机——Internet Explorer、Firefox、Chrome或Safari,只要它们是较新的版本都可以工作。如果你想亲自创建实例而不是从Wrox网站下载,那么你将需要一个基本的文本编辑器,即使是记事本也照样可以。对于一部分代码你也需要运行一个Web服务器,Windows下的IIS服务器的免费版本或者其他系统的众多开源实现服务器(比如Apache)都可以满足需求。对于一些代码示例,你将需要使用Visual Studio。你既可以使用Microsoft的商业版本,也可以使用供下载的免费版本。

如果想使用免费版本Visual Studio Express 2010,可以前往www.microsoft.com/visualstudio/ en-us/products/2010-editions/express下载。每个版本的Visual Studio都专注于某个特定领域,比如C#或Web开发,因此为了验证所有的示例,你需要下载C#版本,VB.NET版本以及Web版本。你还应该安装Visual Studio 2010的1.0服务包,它可以在www.microsoft.com/ download/en/details.aspx?id=23691下载到。一旦一切准备就绪你就能够打开样例解决方案,或者如果失败的话,可以通过选择File | Open | Project/Solution...的方式打开解决方案中的一个样例项目,并浏览解决方案文件或者你希望运行的特定项目。在本书即将出版之时,Microsoft正在准备推出新版本Visual Studio 2011。尽管截图可能会略有不同,但是本书中的例子都应该可以在新版本中运行。

约定

为了帮助你从本书中获得尽可能多的知识以及清楚地知道它的内容,在本书中我们使用了大量的约定。

试一试

“试一试”是一个你应该遵循本书中的文字说明而进行实践的练习。

(1) 它们通常由许多步骤组成。

(2) 每一步骤都有一个编号。

(3) 使用你自己的数据库副本来按照步骤进行练习。

示例说明

在每个“试一试”之后,将会详细讲解你所输入的代码。

我们使用如下两种方式表示代码:

● 对于大部分示例我们使用不带突出效果的monofont类型。

● 对于当前上下文中尤其重要的代码我们使用加粗字体来突出显示。

源代码

在读者学习本书中的示例时,可以手动输入所有的代码,也可以使用本书附带的源代码文件。本书使用的所有源代码都可以从本书合作站点http://www.wrox.com或www.tupwk.com.cn/downpage上下载。登录到站点http://www.wrox.com,使用Search工具或书名列表就可以找到本书。接着单击本书细目页面上的Download Code链接,就可以获得所有的源代码。

在下载了代码后,只需要用自己喜欢的解压缩软件对它进行解压缩即可。另外,也可以进入http://www.wrox.com/dynamic/books/download.aspx上的Wrox代码下载主页,查看本书和其他Wrox图书的所有代码。

勘误表

尽管我们已经尽了各种努力来保证文章或代码中不出现错误,但是错误总是难免的,如果您在本书中找到了错误,例如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以让其他读者避免受挫。当然,这还有助于提供更高质量的信息。

请给wkservice@vip.163.com发电子邮件,我们就会检查您的信息,如果是正确的,我们将在本书的后续版本中采用。

要在网站上找到本书的勘误表,可以登录http://www.wrox.com,通过Search工具或书名列表查找本书,然后在本书的细目页面上,单击Book Errata链接。在这个页面上可以查看到Wrox编辑已提交和粘贴的所有勘误项。完整的图书列表还包括每本书的勘误表,网址是www.wrox.com/misc-pages/booklist.shtml。

P2P.WROX.COM

要与作者和同行讨论,请加入p2p.wrox.com上的P2P论坛。这个论坛是一个基于Web的系统,便于您张贴与Wrox图书相关的消息和相关技术,与其他读者和技术用户交流心得。该论坛提供了订阅功能,当论坛上有新的消息时,它可以给您传送感兴趣的话题。Wrox作者、编辑和其他业界专家和读者都会到这个论坛上来探讨问题。

在http://p2p.wrox.com上,有许多不同的论坛,它们不仅有助于阅读本书,还有助于开发自己的应用程序。要加入论坛,可以遵循下面的步骤:

(1) 进入p2p.wrox.com,单击Register链接。

(2) 阅读使用协议,并单击Agree。

(3) 填写加入该论坛所需要的信息和自己希望提供的其他信息,单击Submit。

(4) 您会收到一封电子邮件,其中的信息描述了如何验证账户,完成加入过程。

加入论坛后,就可以张贴新消息,响应其他用户张贴的消息。可以随时在Web上阅读消息。如果要让该网站给自己发送特定论坛中的消息,可以单击论坛列表中该论坛名旁边的Subscribe to this Forum图标。

关于使用Wrox P2P的更多信息,可阅读P2P FAQ,了解论坛软件的工作情况以及P2P和Wrox图书的许多常见问题。要阅读FAQ,可以在任意P2P页面上单击FAQ链接。