
第1章 概述
1.1 XML技术简介
XML技术是在Internet广泛应用之后,传统的Web技术HTML的可扩展性、结构化和灵活性已经不能满足应用需要,且已经影响到Internet应用发展的背景下提出的。1998年2月,W3C(World Wide Web Consortium)提出了XML技术的第一个规范XML 1.0,目标是创建一种标记语言,并同时具备定义严格、语法明确、表示方便、结构良好、适用于所有行业的新标记定义等,用来彻底解决Internet应用中存在的问题。XML技术源自SGML,它既具备SGML的核心特征,又有HTML的简单性。目前,XML技术已经开始在Web、新型数据库系统中广泛应用,在计算机网络应用、网络编程、跨平台编程、移动互联网、物联网技术中发挥越来越重要的作用。
1.1.1 XML的历史
1.SGML
1979年国际标准化组织(ISO)设立了一个文本处理小组,开始开发一种基于GML(Generalized Markup Language)的文本描述语言。1980年,第一个GML工作草案发布。1983年,这个文本描述语言最终演化成SGML(Standard GML),这是一个标准化的信息结构化技术,后来SGML扩展和修改成为一种全面适应工业范围的信息标准。1986年,ISO采纳了SGML。
SGML语言庞大,功能强,体系严密,同时技术比较复杂,价格昂贵,需要大量的软件来支持它,导致运营成本较高。20世纪80年代主要用于电子产品交易、科技文献分类等方面。
2.HTML
HTML(HyperText Markup Language,超文本标记语言)于1989年在欧洲核子物理实验室问世,这个技术采用超文本传输协议(HyperText Transfer Protocol)。
HTML的出现对Internet的爆炸性发展起到了积极的作用,WWW成为人类了解信息、了解世界的一种全新的概念和模式。HTML的巨大成功,使HTML迅速从1.0版本发展成4.0版本。在发展的过程中,给HTML赋予了比最初设想要复杂得多的功能,目的是使HTML完成来自于商业应用、科学研究、信息发布的所有任务,使得HTML的语言失去了最初的简单性,并且在使用HTML时出现了随意性、不规范和不严格等问题。
另一方面,HTML的专用词表有限,用户无法自由增加新标记并进行有效性验证,用HTML来完成不同行业内的数据定义、数据表示,以及行业之间的数据交换很不方便,而随着Internet的广泛应用,这种交换又是必须的、大量的、十分广泛的,这使得HTML捉襟见肘,无法满足这种要求。
3.XML
为了解决HTML在Internet应用中的局限性,1996年,W3C开始寻找在Web中使用SGML的方法。因为,SGML具备HTML所没有的三种优势:可扩展性、结构化和灵活性。他们的目标是创建一种标记语言,这种语言既要具备SGML的核心特征,又要有HTML的简单性。同时具备许多新的特征,如定义严格、语法明确、表示方便、结构良好、适用于所有行业的新的标记定义等。1998年2月10日,W3C发布了XML 1.0规范,这就是XML(Extensible Markup Language),可扩展标记语言。
XML是Web发展到一定阶段的必然产物。W3C在XML 1.0规范中是这样定义XML的:“可扩展标记语言(XML)是用来描述一种称为XML的文件的数据对象,同时也部分地描述了处理这些数据对象的计算机程序的行为。XML是SGML应用的一个子集,或为SGML的某种限制形式。根据指定规格的定义,XML文件是符合规范的SGML文件。”
根据XML 1.0(第5版)规范,XML的设计目标是:
①XML应能直接用于Internet。
②XML应支持广泛的应用。
③XML应与SGML兼容。
④处理XML文档的程序应该容易编写。
⑤XML的可选择性特征保持绝对小,理想情况下为零。
⑥XML文档应该是人易读的且合理清晰的。
⑦XML设计应该是可很快准备好的。
⑧XML文档的设计应该正规和简洁。
⑨XML文档应容易创建。
⑩在XML标记中简洁性可以忽略不计。
XML 1.0规范包含三个主要部分,它们是XML文档内容、文档的逻辑结构、文档的物理结构。
XML文档是由被称为实体的存储单元组成的。实体或者是解析的,或者是不可解析的。解析的数据由字符组成,其中一部分形成字符数据,一部分形成标记。标记对描述XML文档的存储布局和逻辑结构进行编码。XML提供了把各种约束强加在该存储布局和逻辑结构上的机制。
XML文档内容中,包括结构良好性、字符集、通用语法结构、字符数据与标记、注释、处理指令、CDATA节、序言及文档类型定义、文档的独立性声明、空白符处理、行结束控制和语言标识等十余项内容,对书写XML文档的数据给出了详细的规定。
在XML文档的逻辑结构部分,定义了XML文档的标记书写的规则、元素类型声明、属性表声明和条件节等内容,从而规定了XML元素和属性的定义规范。
在XML文档的物理结构中,对字符和实体参考、实体声明、实体解析、XML处理器对实体和参考的处理、构造内部实体替代文本、预定义实体、表示法声明和文档实体等内容,对XML文档中实体的定义、引用、内部和外部实体进行了统一规定。
1.1.2 XML与HTML的比较
对于XML的语法,将在后续章节中详细讨论。为了便于理解XML的语法、标记、文件格式,对HTML与XML进行简单的比较讨论是一件有意义的事情,可以帮助我们理解XML。
1.HTML文档
HTML文件是一系列用“<”和“>”符号,把具有特定含义的英文字符串括起来,构造成称为标记的元素来描述语法的。
例1.1 一个简单的网页文件。

在HTML文件中出现的标记都是由HTML规范规定的,如<html>、<head>、<body>、<p>、<h1>等,每个标记应该有一个结束标记,结束标记由“</”和“>”包括标记名构成,如</body>、</p>。一个HTML文件必须在第一行写上<html>,最后一行写上</html>来包含所有的内容。浏览器判断一个文件是否为HTML文件,就是根据文件是否包含在<html>和</html>这一对标记中。但是也有几个元素没有结束标记,如<img>、<br>、<hr>等。目前使用的是W3C在1998年4月24日推出的HTML 4.0规范。
2.XML文档
一个XML文档是由用户自行定义的标记组成的,这些标记与HMTL一样,都使用“<>”来包含标记名。下面来考查一组数据的表示,如表1.1所示。
表1.1 学生成绩表

例1.2 根据表1.1建立XML文档。

与HTML文件一个最重要的差别是,在每一个XML文档的第一行必须写上<?xml version="1.0"?>命令,用于标识该文件是一个XML文档,也方便XML处理器识别哪些是XML文档,哪些不是XML文档。接下来的内容是用户自定义的根元素标记,根元素必须有一个结束标记,所有用户定义的其他元素都被包含在根元素中,如<studentlist></studentlist>之间的内容是其他元素标记的定义。每一个标记必须有一个结束标记与之对应。一对标记之间包含的对象称为一个元素。标记的表示与HTML的标记表示一样,都是把标记名放在“<”和“>”中间构成,结束标记是把标记名放在“</”和“>”之间。如<name></name>、<sex></sex>等。但是,XML的标记与HTML的标记名不一样。XML的标记名定义的含义、合法性和有效性,由用户专门在DTD(文档类型定义)或者XML Schema(XML模式)中定义。而HTML的标记名由HTML规范确定。
一般说来,在设计一个标记名时,应该使标记名具有特定的含义,以表示元素的意义。虽然,XML规范没有对哪种语言可以用作标记名做特别的限定,但为了使用方便,建议使用英文字符作为标记名,最好使用与元素名具有相同或相近含义的英文单词作为标记名,如学生名单<studentlist>、学生<student>、姓名<name>、性别<sex>等。另外,使用中文字符作为元素名称,也是可行的,如<成绩>、<高等数学>、<程序设计>、<街道>等。
在例1.2中,有一个根元素<studentlist>,根元素下有若干个<student>元素,每个<student>元素下都有<name>、<sex>、<major>和<score>,<score>标记中还嵌套了下一级子元素<mathematics>、<programming>、<circuit>,这样的元素嵌套,根据需要可以有许多层次。
1.1.3 XML的编辑工具
XML文档是文本文件,任何一种纯文本文件编辑工具都可以用于XML文档的编辑。如记事本、XML Writer、XML SPY等。下面是XML文档编辑器的简介。
1.记事本
Windows中的记事本,是一个文本文件编辑器,也是XML文档最常见的编辑工具。当读者手中一时没有更好的编辑工具时,可以使用记事本来编辑XML文档。Windows 98的记事本没有引入处理Unicode字符集的功能。Windows 2000及其以后版本的记事本提供了处理Unicode字符集的功能。
2.XML Notepad
XML Notepad是微软公司为XML文档编辑特意设计的编辑工具。其界面如图1.1所示,这是一个简单的XML文档编辑器。

图1.1 XML Notepad界面
3.Amaya
Amaya是W3C专门为XML设计的开发工具,这是一个比较全面完整的XML开发工具,其界面如图1.2所示。读者可以在http://www.w3.org/中下载该软件。

图1.2 Amaya界面
4.XML SPY
XML SPY是Altova公司开发的专用XML编辑管理工具,一共有三个版本:XMLSpy Enterprise Edition/Professional Edition/Home Edition。用户可以获得三个月免费使用的试用版,读者可以在http://www.altova.com/中下载。
1.1.4 浏览XML文档
作为Internet上的主要浏览器,一个是微软的Internet Explorer,另一个是网景公司的Navigator(该公司已破产)。微软的浏览器IE 5.5及其以后的版本均支持XML。支持XML的还有W3C推荐的Awaya和Opera。
HTML文件在浏览器上显示,这就是众所周知的网页。HTML文件在IE浏览器上显示效果如图1.3所示,这是一个包含了标题、段落和图形的简单网页。
对于XML文档,在IE浏览器上直接显示的效果如图1.4所示。从图1.4可看出,XML文档在IE浏览器上显示出元素的树状结构,这类似于微软Windows资源管理器中的文件夹的形态。每个元素前的“-”表示该元素已经展开,若某个元素包含下一级子元素,展开后将显示该元素的下级元素,若某个元素前出现“+”,表示这个元素及其下一级子元素被封闭起来。

图1.3 HTML程序的浏览效果

图1.4 XML文档的浏览器显示效果
这个效果可能出人意料,但是,这就是XML文档应该出现在浏览器中的样子。读者不禁要问:不是要把XML文档作为新一代的Web应用标准来设计吗?不是要让XML代替HTML成为Internet上的主要技术标准吗?用IE浏览器显示XML文档怎么是这个样子?这样的XML能够实现W3C的良好愿望吗?
为了使XML文档在浏览器上显示人们期望得到的效果,可以采用几种技术。图1.5是使用XSL(eXtensible Stylesheet Language)对上面的XML文档进行转换后的显示效果。显然,图中表现的XML文档已经可以满足Internet上的一般应用了。

图1.5 经过XSL转换的文档的显示
1.1.5 XML的相关技术及其发展
从1998年到现在,XML技术规范从1.0第一版本发展到1.0第五版本。XML不仅在Internet领域,还在各种行业的数据描述和表示方面展现出良好的行为和品质,尤其在电子商务领域的表现十分出色,因而XML得到了广泛应用。现在,在W3C和业界的大力支持下,XML逐渐向广泛的应用领域迅速发展,开始成为Web技术中的核心。同时XML的相关技术也快速出现,基于XML技术核心的软件体系正在逐渐形成。
1.XML数据类型定义
XML文档数据的类型和有效性定义,可以保证XML文档数据的正确性和完整性。在XML技术规范中,通过DTD和XML Schema来定义数据类型。
(1)DTD
DTD(Documents Type Definition,文档类型定义)是W3C建议的XML有效性检验的标准,其使用先定义根元素,然后分别定义各级子元素以及元素属性的方式对XML元素(Element)和属性表(Attlist)进行定义,提供十分有限的元素类型来定义元素和属性。
(2)XML Schema
XML Schema最开始是微软公司推荐并且在微软产品中通用的XML文档有效性标准,在2001年5月成为W3C的建议规范,W3C一直在致力于适合描述XML内容模型的规范的开发工作。2001年5月3日,W3C发布了XML Schema 1.0规范的推荐版本,并声明这个规范是稳定的,有助于Web互操作性,并且被W3C的成员修订,这些成员来自学术界、业界和研究团体,他们赞成采用这个规范。XML Schema 1.0定义了公用标记词表、使用这些词表的XML文档的结构,以及提供了与这些词表和结构相关的联系。W3C认为:“XML Schema 1.0为XML发挥其全部潜力提供了一个实质构件”。在开发过程中,参与标准制定的各方都一致认为XML Schema 1.0标准的制定将是XML发展历史上意义重大、影响深远的事件。
XML Schema 1.0包含三个模块:结构、数据类型和初级读物(Primer)。结构描述了XML文档的结构和内容模型的约束和规则来操纵文档元素的有效性;数据类型为确定XML的元素和属性的数据类型提供了40多种,允许XML软件在操作数据、数字、时间、串等信息时表现得更好;初级读物是为了读者方便理解XML Schema而写的一个非标准文档,使用了大量的例子来描述XML Schema 1.0。
XML Schema 1.0给XML技术带来更大的灵活性,加速了XML技术在重要领域的应用,因此,也加速了XML Schema的深入发展和进一步成熟。2004年10月28日,W3C发布了XML Schema 2.0规范。
(3)XML文档的有效性验证
微软对XML的技术支持主要反映在它的XML解析器MSXML.dll中。这个解析器伴随着XML的发展而发展,从最初的2.0发展到今天的4.0版本,在MS XML 4.0中,引入对XML Schma进行验证的技术支持——SOM(Schema Object Model)。该对象对XML Schema文档进行加载、分析和检验,以确定XML元素定义的有效性。
2.XML文档数据显示和转换技术
XML文档直接在Web浏览器上显示时的形态,上面已经讨论过,这一点与HTML文档的显示不一样。为了解决XML文档的显示问题,需要借助其他技术,下面对这些技术分别进行简单讨论,详细内容可以参考本书后续章节。
(1)CSS
CSS(Cascading StyleSheet)原本是为了HTML文档的格式化提出的。1998年XML 1.0规范提出时,还没有相应的XML转换语言,所以使用了人们熟悉的CSS1对XML文档进行格式化。但是CSS1只提供了一些简单的格式标记,除了这些用于格式化HTML的样式元素外,无法满足XML元素进行格式化的要求,如不能为XML很好地工作、没有表格功能等。
1998年,W3C修订了CSS1,扩展了CSS1的功能,使之成为CSS2。CSS2是一个样式表语言,使设计者和用户可以了解CSS2,然后构造HTML文档和XML应用。把文档的样式表示和文档的内容分开,CSS2简化了Web设计和站点维护。
(2)XSLT
XSLT(eXtensible Stylesheet Language Transformation)是W3C推荐的XML文档数据的转换技术,于1999年11月提出。可以采用XSLT技术,实现XML文档数据的查询、读写操作。现在使用的是XSLT 2.0版本。
XSLT技术以“模板驱动”的方式访问XML数据,XSLT文件符合XML规范。XSLT处理器可以安装在客户端或服务器端。微软公司的MSXML(XML解析)支持XSLT,可以解析XML和处理XSLT转换。经过XSLT处理的XML数据可以HTML的形式显示在浏览器上。
XSLT包含XSL转换和XSL格式化对象。XSL文档本身是一个定义严格的XML文档,符合XML语法规范。在XSL格式化对象中,通过引进模板(template)访问XML数据元素及其属性。
(3)DOM
DOM(Document Object Model)是一组接口集合。这个集合为各种应用程序提供了标准设计接口,各个接口规定了相应的属性、方法和对象。
DOM对XML文档的访问主要以结点访问为基础,从XML数据树状结构的根结点开始,每一个下层元素都作为结点处理。通过对结点的处理,可以实现数据检索、增加和删除等操作,从而实现对XML文档数据的管理。这样,DOM在处理时需要一次性完整地读入XML文档,从而获得XML文档的整个树状结构。
DOM已经出现了三个版本:DOM Level 1、DOM Level 2、DOM Level 3。其中,DOM Level 3是最近期的版本,于2004年7月提出。DOM技术在XML应用中扮演越来越重要的角色,特别是在Web应用编程中有广泛应用,因此受到了业界的普遍重视,XML DOM得以迅速发展。
(4)Data Island
Data Island(数据岛)技术是以HTTP来实现网络传输,并显示XML数据文件的另外一种技术。把XML数据文件嵌入HTML文本中的,作为提供数据的模块,借助HTML可以方便地在浏览器上浏览这个XML数据文件,这就是所谓的数据岛技术,也称XML数据源。
XML数据岛分为内部和外部两类。内部数据岛是直接在HTML中通过在元素<xml></xml>之间包含XML数据,其数据格式完全符合XML规范。外部数据岛是通过元素<xml>的属性src来引用以XML文档形式保存在磁盘上的XML数据。
(5)SAX
SAX(Simple API for XML)是另外一个常用的XML文档处理技术。目前SAX还不是W3C的建议规范,是由XML-DEV电子报的一组开发人员进行设计和发展的。在读取XML文档时,顺序地读入XML文档中的元素名和元素值、属性名和属性值。它与DOM的差异类似于磁带和磁盘,SAX只能向前顺序读取XML数据,把XML文档作为一个可读取的字符流,这与磁带的读写类似。而DOM可以完整浏览和更新XML文档数据,这与磁盘的读写类似。
SAX是一组程序设计接口。在加载XML文档时可以部分调入内存,使得内存使用效率比较高,同时可以提高读取速度,提高处理效率。在顺序读取XML文档的场合,SAX可以大大提高XML文档的处理效率。但是,SAX不能随机访问XML,不能方便地对XML数据进行修改。
3.XML的查询、链接、检索
目前XPath、XQuery、XLink是W3C推荐的用于XML文档的查询链接和检索的规范。
XPath 3.0的目标是定义一种定位XML文档各部分的语言。XPath规范定义了两个主要部分:允许到XML文档各个部分的路径说明的表达式语法,另一部分是支持这些表达式的核心库基本函数。XPath是XSLT的基础。
XQuery 3.0是XPath 3.0的扩展。一般情况下,任何在语法上合格和成功运行的XQuery 3.0和XPath 3.0的表达式将返回相同的结果。
XLink(XML Linking Language)称为XML链接语言,它使用XML语法创建与简单HTML的单一方向超链接类似的结构。为了创建和描述资源之间的链接,XLink允许在XML文档内插入元素。XLink提供建立基本单方向链接和更复杂链接结构的框架,使XML文档可以:确定两个以上资源之间的链接关系;把元数据与一个链接联系起来;表示与所链接资源相分离的内部的各种链接。
4.XML数据库技术
XML文档作为数据存储的载体,从一开始就引起了人们对其数据库特性的研究兴趣。XML文档与传统的关系数据库差别较大,如果把XML文档当作数据库处理,如何让它具备关系数据库的安全机制、事务管理、并发操作、数据完整性和一致性统一等技术呢?于是提出了半结构数据库的概念。几年来,关于XML数据库的研究发展很快,已经有了一个基本的框架。
基于XML的数据库系统分为NXD(Native XML Database)和XEDB(XML Enable Database)两类。NXD是以XML文档为基础的数据库管理系统,目前是XML数据库研究的重要课题。XEDB则是在传统的RDBMS中增加了支持XML技术的功能,使得传统数据库系统能够访问XML。
(1)NXD
XML文档是一种简单的文本文件,把XML文档作为一种数据存储方式,可以使XML文档具有传统数据库存储数据的基本功能,而访问XML文档数据要比访问传统数据库更简单、更方便。这就是NXD数据库系统。这个数据库模型和概念正处于研究和探索阶段。到目前为止,这个数据库系统的初步概念是:XML文档是数据库的数据区,DTD和XML Schema是数据库的数据定义模型,XSLT、DOM、SAX是数据库数据处理技术,XPath、XLink、XQuery是数据库数据的查询链接工具。这些技术有机地结合在一起,就形成了未来XML数据库的雏形。
NXD可以方便地处理以数据为主的结构化XML文件,也能够方便地处理以文本为中心的XML文档。
(2)XEDB
传统关系数据库以表作为数据存储容器,它类似于以数据为中心的XML文档,由XEDB管理的以数据为中心的结构简单的XML文档可以方便地存储到关系数据库中,关系数据表也可以转换成结构简单的XML文档,由XEDB管理。
对于以数据为中心的结构复杂的XML文档,用XEDB来管理,将破坏XML文档的内部结构,同时也使转换时的技术复杂化。因此,用XEDB来管理结构复杂的XML文档时,还需要在传统的关系数据库中加入复杂的XML文档转换的功能。例如,微软的SQL Server 2000中引进了大量的表与XML文档转换的技术,如带批注的XDR架构、FOR XML语句等。
对于以文档为中心的XML文档,XEDB表现不是很好,所以,在研究大量非结构化文本数据的XML文档的处理时,不采用传统数据库的方法。
5.XML的安全技术
XML作为网络上传输和转换的对象,作为重要的Web技术,其安全性十分重要。除了网络安全技术外,从XML技术入手的专用XML安全技术规范已经出台。在标准的XML成分中,增加了一些专用属性,可以提供检验XML文档安全的手段和工具。XML安全技术包括XML加密、XML签名、XML密钥管理规范和XML的访问控制语言等内容。
(1)XML加密
XML加密为需要安全地交换数据的应用程序提供端到端的安全服务,XML文档可以整体加密。XML Encryption规范是W3C推荐标准,用于XML文档的加密。除整体加密外,还可以部分加密。加密的数据可以是任意的数据、XML元素、XML内容模型等。
(2)XML签名
XML Signature是W3C推荐标准,它支持数据的完整性检验、消息认证、签名者身份认证。XML Signature适用于任何数据内容,可应用于一个或多个数据内容。XML Signature可分为三类:被封装式签字、封装式签字和分离式签字。被封装式签字指Signature元素位于被签字数据块之内。封装式签字是指Signature元素包含了被签字的数据块。分离式签字是指Signature元素和签字的数据相互独立,位于不同的文档内或内容模型中。
(3)XML密钥管理规范
XML密钥管理规范是分发和注册公钥信息的规范,它包含如下的内容:XML关键信息服务规范和XML关键注册服务规范。前者支持应用程序把对与XML Signature、XML Encryption或其他公钥关联的密钥信息的处理任务委托给一个网络服务。后者支持密钥对持有者向信任服务系统注册密钥对,从而该密钥对随后可用于前者或更高层的信任断言服务。
(4)XML访问控制语言
XML访问控制的目的是为XML文档提供一个精细的访问控制模型和访问控制规范语言。利用这一访问控制技术、访问控制策略可以控制一个XML文档如何显示给用户,如具有某一角色的用户可以查看该文档的某一部分,而这一部分对其他普通用户来说应该是隐藏的。