1.6 XML
XML是由W3C定义的一种语言,是表示结构化数据的行业标准。XML在电子商务、移动应用开发、Web Service、云计算等技术和领域中起着非常重要的作用。
1.6.1 XML简介
1996年,万维网相关技术的主要设计组织W3C(World Wide Web Consortium,万维网联盟)开始创建一种可扩展的标记语言,能够结合SGML(Standard Generalized Markup Language,标准通用标记语言)的灵活性并能像HTML(Hypertext Markup Language,超文本标记语言)一样可以被广泛接受,这种语言就是XML,其全称是Extensible Markup Language,称为可扩展标记语言。所谓可扩展是指XML允许用户按照XML规则自定义标签。XML文件是由标签及其所包含的内容构成的纯文本文件,与HTML文件不同的是,这些标签可自由定义,目的是使XML文件能够很好地体现数据的结构和含义。W3C推出XML的主要目的是让数据的内容更加容易理解,使基于Internet的数据交换更方便。W3C的主页是http://www.w3c.org,关于XML的网页在http://www.w3c.org/XML中,大部分的技术文档可以在http://www.w3c.org/XR找到。XML 1.0版本是由W3C在1998年2月的推荐标准中定义的,W3C的推荐标准就像Internet的RFC(Request for Comments)一样,是一种非正式的“标准”。文档中的许多小问题和基础标准的一些变化导致了2000年10月第2版的出版,第2版修正和更新了文档,但没有改变XML本身。
W3C为XML制定了10个设计目标,具体内容如下。
- □ XML应该可以在Internet上直接使用;
- □ XML应该广泛地支持不同的应用;
- □ XML要和SGML兼容;
- □ 处理XML文档的程序应该容易编写;
- □ XML的可选特征应该保持绝对最低限,最好是零;
- □ XML文件要易读、清晰;
- □ XML的设计应该可以快速预备;
- □ XML应设计得正规、简洁;
- □ XML文件应该很容易创建;
- □ XML标签的简洁性应该是无关紧要的。
XML的语法规则非常严格,这一点和HTML有很大不同。HTML本身语法十分不严格,这在一定程度上影响了网络信息的传输和共享。W3C吸取了HTML发展的经验和教训,对XML制定了严格的语法标准。例如,标签都必须要有一个开始标签和结束标签,所有的标签都必须合理嵌套,即形成树状结构。也就是说,XML文件必须符合一定的语法规则,只有符合这些规则,XML文件才可以被XML解析器解析,以便利用其中存储的数据。XML文件分为格式良好的(well-formed)XML文件和有效的(validated)XML文件。符合W3C制定的基本规则的XML文件称为格式良好的XML文件,格式良好的XML文件如果再符合额外的关于标签的约束则称为有效的XML文件。
XML可以很好地描述数据的结构,有效地分离数据的结构和数据的显示,可以作为数据交换的标准格式,而在AJAX(Asynchronous JavaScript And XML,异步的JavaScript与XML)、Web Service(Web服务)、云计算等相关技术中,XML已经是数据交换领域事实上的行业标准。而HTML是用来编写Web页面的语言,HTML同时存储了数据的内容和数据的显示外观,如果只想使用数据而不需要显示,则需要对HTML进行专门的处理。例如,在Internet上广泛使用的搜索引擎,在抓取得到Web页面之后就需要去除页面中包含的标签,保留页面中有用的数据并用于建立索引。另外,HTML不允许用户自定义标签,目前的HTML大约有一百多个标签。HTML不是专门用于存储数据的结构,主要用于描述数据的显示格式。
1.6.2 XML的优点
1. 良好的可扩展性
在XML产生之前,要定义一个标记语言并推广利用非常困难。一方面,如果制定了一个新的标记语言并期望能生效,需要把这个标准提交给相关的组织(如W3C),等待接受并正式公布这个标准,经过几轮的评定和修改,到这个标记语言终于成为一个正式推荐标准时,可能已经用了几年的时间。另一方面,为了让这套标签得到广泛应用,制定者必须为它配备浏览工具。这样,就不得不去游说各个浏览器厂商接受并支持新制定的标签,或者自己开发一个新的浏览器,与现有的浏览器竞争。无论上述哪个办法,都需要耗费大量的时间和工作。现在借助XML的帮助,制定新的标记语言要简单易行得多,这也正是XML的优势所在。
各个行业可能会有一些独特的要求。例如,化学家需要化学公式中的一些特殊符号,建筑家需要设计图样中的某些特殊标记,音乐家需要音符,这些都需要单独的标记。但是,网页设计者一般不会使用这些记号,因此不需要这些标签。XML的优点就在于允许各个组织、个人建立适合自己需要的标签库,并且这个标签库可以迅速地投入使用。
不仅如此,随着当今世界越来越多元化,要想定义一套各行各业都能够广泛应用的标签既困难,也没有必要。XML允许各个行业根据自己独特的需要制定自己的一套标签,同时并不要求所有浏览器都能处理这成千上万的标签,同样也不要求标记语言的制定者制定出一个非常详尽、非常全面的语言,从而适合各个行业、各个领域的应用。比起那些追求大而全的标记语言,这种具体问题具体分析的方法实际上更有助于标记语言的发展。
实际上,现在许多行业、机构都利用XML定义了自己的标记语言,比较早而且比较典型的有:化学标记语言CML(Chemical Markup Language,由Peter Murray-Rust等人制定)和数学标记语言(MathML l.0,W3C的推荐标准,1998年4月7日)。
2. 内容与形式的分离
XML不仅允许自定义一套标签,而且这些标签不必仅限于对显示格式的描述。XML允许根据不同的规则来制定标签,比如根据商业规则、数据描述甚至可以根据数据关系来制定标签。数据自身的逻辑不得不让位于HTML规范的逻辑。如果要用Java Applet来处理数据,则这个Java Applet将不得不遍历整个HTML文件,把所有的HTML标记剔除掉,再把剥离出来的有用的数据重新组织。同样,任何一个不是单纯为了显示HTML文件的应用程序在处理HTML文件中的数据时,都不得不做大量的额外工作。
XML内容与显示相分离的优点如下。
在XML中,显示样式从数据文档中分离出来,放在样式单文件中。这样,如果要改动信息的表现方式,无须改动信息本身,只要修改样式单文件即可。如果要把表格的数据改用列表显示,则无须再去修改数据文档,因为数据文档的显示方式已经委托给样式单文件了,只要修改相应的样式单文件即可。
在XML中数据搜索可以简单、高效地进行。搜索引擎没有必要再去遍历整个XML文档,只须找相关标签下的内容。例如,要查找“Java面向对象程序设计”,只要看看<title>这个标签下的字符串数据是否匹配即可,此处title标签用于存储图书的名称信息(参见第6章)。
XML是自我描述的语言。即便是对预先定义的标签一无所知的人,这个文档也是清晰可读的。例如,XML文档中的<isbn>9787302489078</isbn>代表了一本教材(本书作者主编的《Java面向对象程序设计》教材)的ISBN编号信息。可是HTML文档就不那么清楚了。此外,信息之间的某些复杂关系,比如树状结构、继承关系等,在XML中也都得到了很好的体现,这样就大大方便了XML应用处理程序的开发。
3. 遵循严格的语法要求
HTML的语法要求并不严格,浏览器可以显示有文法错误的HTML文件。但是,XML不但要求标记配对、嵌套,而且要求严格遵守DTD(Document Type Definition,文档类型定义)或者XML Schema的规定。XML非常注重准确性,无论语法有什么差错,XML分析器都会停止进一步处理。在处理HTML文件时,浏览器通常具备一个内置的修改功能去猜测HTML文件中漏掉了什么,并试图修改这个有错误的HTML文件。XML解析器则不同,无论这个XML解析器是内嵌在浏览器中还是作为独立的处理器,都绝对不允许猜测和修改。就像编译程序一样,一个XML文档或者被判断为“正确”而被接受,或者被判断为“错误”而不被接受。这是因为XML的宗旨在于通过自定义的标签来传递结构化的数据,一个XML文档分析器无法像处理一个已有了一套固定DTD的HTML文件那样猜出文件中到底有什么,或者缺什么。
严格的语法要求固然表面上显得烦琐,但具有良好语法结构的文档可以提供较好的可读性和可维护性,从长远来看还是大有裨益的。这大大减轻了XML应用程序开发人员的负担,也提高了XML处理的时间和空间效率。随着XML的自动生成工具和所见即所得的编辑器的广泛使用,XML的编写者也就不用操心XML的源代码,更不用去想XML琐碎的语法规则了。当然,这对于XML的开发工具也就提出了较高的要求。
4. 便于信息的传输
当今的计算机世界中,不同企业、不同部门中存在着许多不同的系统。操作系统有Windows、UNIX等,数据库管理系统有DB2、SQL Server、Oracle等,要想在这些不同的平台、不同的数据库管理系统之间传输信息,不得不使用一些特殊的软件,这样就非常不方便。而不同的显示界面,从工作站、个人计算机到移动终端(例如手机、平板电脑等),使这些信息的个性化显示也变得相当复杂。
有了XML,各种不同的系统之间可以采用XML作为交流媒介。XML不但简单易读,而且可以标记各种文字、图像甚至二进制文件,只要有了XML处理工具,就可以轻松地读取并利用这些数据,这使得XML成为异构系统之间一种理想的数据交换格式。
5. 具有较好的保值性
XML的保值性来自它的先驱SGML。SGML作为一套有着十几年历史的国际标准,最初设计的目标是要为文档提供50年以上的寿命。
我们是通过流传至今的大量历史文献知道祖先悠久辉煌的历史,同样,我们的后代也要靠我们留下的文字资料来了解我们。可是现在大部分资料都是电子文档的形式,而且很多没有被打印下来单独存档。若干年后,我们的子孙很可能面对着这些电子文档,苦于没有软件工具能够打开。如果没有XML,恐怕只有两个办法:要么返璞归真继续使用纸介质,要么不辞辛苦随着软件的更新换代来大规模地转换原有文档到最新格式。SGML和XML不但能够长期作为一种通用的标准,而且很容易向其他格式的文档转换,它们的设计对这一问题给出了圆满的解决方案。
1.6.3 XML的应用
设计XML的本意是用来存储、传送和交换数据,而不是用来显示数据,主要用途如下。
1. 创建新的标记语言
作为元标记语言,XML可以为用户定义适合本行业领域的标记语言。目前这一应用的成功案例比比皆是,例如,化学领域的CML、数学领域的MathML、移动通信领域的WML等。
2. 数据存储
XML文档是带有一定语义的纯文本格式的文件,可以用于存储数据,也可以方便地编写应用程序来存储和读取数据。由于XML独立于硬件、软件系统,因此也可以使用除标准HTML浏览器之外的其他应用程序使用XML数据文档。其他应用程序也可以将XML文档作为数据源来访问,就像访问数据库一样,使得用XML存储的数据更为有用。XML良好的自描述性也使它成为保存历史档案,如政府文件、公文、科学研究报告等文档数据的最佳选择方案。
3. 数据交换
使用XML可以将数据在异构系统之间进行传输。在现实中,异构的计算机系统和数据库管理系统所包含的数据格式互不兼容。将数据转换成XML格式就能够被不同类型的多种应用程序阅读,可以大大地降低应用的复杂性。XML也成为Internet上企业之间交换信息的主要数据格式。2005年推出并已得到广泛应用的AJAX技术,即采用XML作为信息交换的数据格式。在分布式计算的最新技术——Web Service技术中,XML同样作为数据传输和数据交换的实现方式。目前除XML之外,还有一个比XML更轻量级的数据交换格式——JSON(JavaScript Object Notation)也开始得到广泛的应用(参见第7章)。
4. Web应用
由于XML是由SGML特别为Web简化的,因此XML文档将成为Web资源的重要组成部分,同时XML也使搜索引擎更为智能和准确。XML在Web方面的应用有如下几个方面。
- □ 集成不同数据源。XML文档可以用来描述包含在不同应用的数据,从Web页面到数据库记录等,Web应用的中间层服务程序将这些用XML表示的数据组合起来,然后提交给客户端或者下一步的应用。XML还提供客户端包含机制,可以将多个来源的数据集成在一个文档内显示。
- □ 本地计算。XML数据传输到客户端后,客户端可以利用XML分析器对数据进行解析和操作,在完成系统所需功能的同时,合理分配客户端和服务器的负荷。数据库记录可以直接传输到客户端,然后再进行排序,传统的HTML就无法做到这一点。
- □ 数据的多种显示。XML将内容和表现分离,XML只描述数据的结构和语义,显示外观则通过样式单文件(CSS或者XSL)进行描述。因此,只需在显示时配置不同的样式单,即可实现多种显示效果。
- □ 网络出版。随着互联网的发展,网络已经成为一种新的媒体,人们在网络上发布各种信息,信息的发布形式和发布语言也多种多样,其中,基于XML的显示技术和显示语言发挥着重要作用。比如eBook、eNewspaper等,就利用了XML的显示语言。
- □ 支持Web应用的互操作和集成。Web界面定义语言(Web Interface Definition Language, WIDL)是WebMethods公司定义的一个XML应用,是能够用于Web的资源和企业应用接口的语言标准。通过它,Web应用可以自动存取Web资源和企业应用。
总之,作为表示结构化数据的行业标准,XML向软件组织、软件开发人员、Web站点和最终用户提供了极大的便利。在电子商务、云计算、物联网等技术领域,使用XML的力度将进一步增大。XML是W3C推出的标准,已获得非常广泛的行业支持,W3C研究小组确保对工作在多系统和多浏览器上的用户之间的互操作性支持,并不断加强XML标准。XML在采用简单、柔性的标准化格式表达以及在应用程序之间交换数据方面是一个革命性的进步。XML不仅提供了直接在数据上工作的通用方法,而且XML的优势在于将用户界面和结构化数据相分离,允许不同来源数据的无缝集成和对同一数据的多种处理。从数据描述语言的角度看,XML是灵活的、可扩展的,有着良好的结构和约束规则;从数据处理的角度看,XML足够简单并易于阅读,几乎和HTML一样容易学习,同时比HTML更易于被应用程序处理,因此,XML目前已经成为结构化数据表示与交换的事实上的行业标准,并将随着分布式计算、移动计算、云计算、物联网等新兴技术和应用领域的发展得到更广泛的应用。