XML技术入门
|
|
XML与HTML的比较 |
|
Internet提供了全球范围的网络互连与通信功能,Web技术的发展更是一日千里,其丰富的信息资源给人们的学习和生活带来了极大的便利。特别是应运而生的HTML(超文本置标语言),以简单易学、灵活通用的特性,使人们发布、检索、交流信息都变得非常简单,从而使Web成了最大的环球信息资源库。然而,电子商务、电子出版、远程教育等基于Web的新兴领域的全面兴起使得传统的Web资源更加复杂化、多样化,数据量的日趋庞大对网络的传输能力也提出更高的要求。同时,人们对Web服务功能的需求也达到更高的标准,比如: 用户需要对Web进行智能化的语义搜索和对数据按照不同的需求进行多样化显示等个性化服务; 公司和企业要为客户创建和分发大量有价值的文档信息,以降低生产成本,以及对不同平台、不同格式的数据源进行数据集成和数据转化等等,这些需求越来越广泛和迫切。 |
|
传统的HTML由于自身特点的限制,不能有效地解决上述问题:作为一种简单的表示性语言,它只能显示内容而无法表达数据内容。而这一点恰恰是电子商务、智能搜索引擎所必需的。另外,HTML语言不能描述矢量图形、数学公式、化学符号等特殊对象,在数据显示方面的描述能力也不尽如人意。最重要的是:HTML只是SGML(Standard Generalized Markup Language,标准通用置标语言)的一个实例化的子集,可扩展性差,用户根本不能自定义有意义的置标供他人使用。这一切都成为Web技术进一步发展的障碍。 |
|
SGML是一种通用的文档结构描述置标语言,为语法置标提供了异常强大的工具,同时具有极好的扩展性,因此在数据分类和索引中非常有用。但SGML复杂度太高,不适合网络的日常应用,加上开发成本高、不被主流浏览器所支持等原因,使得SGML在Web上的推广受到阻碍。在这种情况下,开发一种兼具SGML的强大功能、可扩展性以及HTML的简单性的语言势在必行。由此诞生了XML语言。 |
|
XML(eXtensible Markup Language,可扩展置标语言)是由W3C于1998年2月发布的一种标准。它同样是SGML的一个简化子集,它将SGML的丰富功能与HTML的易用性结合到Web的应用中,以一种开放的自我描述方式定义了数据结构,在描述数据内容的同时能突出对结构的描述,从而体现出数据之间的关系。这样所组织的数据对于应用程序和用户都是友好的、可操作的。 |
|
XML的优缺点 |
|
XML的优势之一是它允许各个组织、个人建立适合自己需要的置标集合,并且这些置标可以迅速地投入使用。这一特征使得XML可以在电子商务、政府文档、司法、出版、CAD/CAM、保险机构、厂商和中介组织信息交换等领域中一展身手,针对不同的系统、厂商提供各具特色的独立解决方案。 |
|
XML的最大优点在于它的数据存储格式不受显示格式的制约。一般来说,一篇文档包括三个要素: 数据、结构以及显示方式。对于HTML来说,显示方式内嵌在数据中,这样在创建文本时,要时时考虑输出格式,如果因为需求不同而需要对同样的内容进行不同风格的显示时,要从头创建一个全新的文档,重复工作量很大。此外HTML缺乏对数据结构的描述,对于应用程序理解文档内容、抽取语义信息都有诸多不便。 |
|
XML把文档的三要素独立开来,分别处理。首先把显示格式从数据内容中独立出来,保存在样式单文件(Style Sheet)中,这样如果需要改变文档的显示方式,只要修改样式单文件就行了。XML的自我描述性质能够很好地表现许多复杂的数据关系,使得基于XML的应用程序可以在XML文件中准确高效地搜索相关的数据内容,忽略其他不相关部分。XML还有其他许多优点,比如它有利于不同系统之间的信息交流,完全可以充当网际语言,并有希望成为数据和文档交换的标准机制。 |
|
当然,XML作为一个新建立的标准,还有许多不足之处: 它在强调了数据结构的同时,语义表达能力上略显不足,例如定义了<地址>这样一个置标,如果不是在文档中实际定义内容,我们就无法知道是要表达家庭住址还是E-mail地址。另外,XML的有些技术尚未形成统一的标准,充分支持XML的应用处理程序很少,甚至浏览器对XML的支持也是有限的。 |
|
所以,XML还并不能完全取代HTML,毕竟HTML是最为方便、快捷的网上信息发布方式。况且HTML是描述数据显示的语言,而XML是描述数据及其结构的语言,二者在功能上也是截然不同的。 |
|
XML的使用前景 |
|
不管怎样,Web的应用将随着XML的发展而更加精彩: |
|
1. 商务的自动化处理 |
|
XML的丰富置标完全可以描述不同类型的单据,例如信用证、保险单、索赔单以及各种发票等。结构化的XML文档发送至Web的数据可以被加密,并且很容易附加上数字签名。因此,XML有希望推动EDI(Electronic Data Interchange)技术在电子商务领域的大规模应用。有兴趣的读者可以访问网站http://www.xmledi.org。 |
|
2. 信息发布 |
|
信息发布在企业的竞争发展中起着重要作用。服务器只需发出一份XML文件,客户可根据自己的需求选择和制作不同的应用程序以处理数据。加上XSL(eXtensible Stylesheet Language)的帮助,使广泛的、通用的分布式计算成为可能。 |
|
3. 智能化的Web应用程序和数据集成 |
|
XML能够更准确地表达信息的真实内容,其严格的语法降低了应用程序的负担,也使智能工具的开发更为便捷。来自不同应用程序的数据也能够转化到XML这个统一的框架中,进行交互、转化和进一步的加工。 |
|
XML的优点备受瞩目,它的发展方兴未艾,未来的Web将是XML的Web! |
|
XML的开发工具 |
|
开发XML有许多工具可以使用: |
|
● Notepad:最直接、最简单的文本编辑工具,在Windows附件中就可找到。 |
|
● Microsoft XML Notepad: 微软专门为设计XML文档而提供的编辑软件,可以借助它验证XML文档的有效性,详细说明和下载地址: http://msdn.microsoft.com/xml/NOTEPAD/intro.asp。 |
|
● Visual InterDev:该软件是用来开发Web应用程序的,不仅仅局限于XML,还可以开发ASP、HTML、XSL样式单等等。 |
|
● Microsoft XML Tree Viewer: 利用这个软件可以把XML文档的内容用树的结构形式显示出来: http://msdn.microsoft.com/xml/demos/default.asp。 |
|
● Microsoft XML Validator: 该软件可以检查XML文档是否是“格式良好的”以及其有效性,并对错误发出警告,它的下载地址是:http://msdn.microsoft.com/xml/demos/default.asp。 |
|
● Microsoft XSL Debugger: 样式单文件的复杂性使开发人员在编写时容易出现错误,这个软件就是帮助用户调试样式单文件的,把复杂枯燥的调试过程用可视化界面显示出来。下载地址 :http://msdn.microsoft.com/xml/_archive/xsl-debugger/xsl-debugger.htm。 |
|
● WordPerfect: 一种对开发XML和SGML提供高级支持的文字处理器,具有所见即所得的开发环境,提供向导、自动化控件的插入和文档的自动生成等功能,它是一款收费的商业产品,支持Windows 95/98/2000和Linux平台。详情请访问http://www.corel.com/。 |
|
● SixPack: 为XML的解析和开发提供简洁的界面,支持Macintosh平台,并公开源代码,详情请访问http://www.trafficstudio.com/sixpack/info.htm。 |
|
● Xray: 一种具有实时错误检查的XML编辑器。它根据DTD或者XML Schema,允许用户创建格式良好的XML文档或验证文档的有效性,并且支持多文档编辑,是一款免费软件,支持Windows 95/98/NT/2000平台。详情请访问http://architag.com/xray/。 |
|
XML的文档格式 |
|
首先介绍XML文档内容的基本单元——元素,它的语法格式如下: |
|
〈标签〉文本内容〈/标签〉 |
|
元素是由起始标签、元素内容和结束标签组成。用户把要描述的数据对象放在起始标签和结束标签之间。例如: |
|
<姓名>王平</姓名> |
|
无论文本内容有多长或者多么复杂,XML元素中还可以再嵌套别的元素,这样使相关信息构成等级结构。下面的例子中,在<employees>的元素中包括了所有职员的信息,每位职员都由<employee>元素来描述,而<employee>元素中又嵌套了<name>和<salary>元素。 |
|
例1: |
|
<employees> |
|
<employee> |
|
<name>Lars Peterson</name> |
|
<salary>25000</salary> |
|
</employee> |
|
<employee> |
|
<name>Charlotte M. Cooper</name> |
|
<salary>34500</salary> |
|
</employee> |
|
</employees> |
|
除了元素,XML文档中能出现的有效对象是:处理指令、注释、根元素、子元素和属性。 |
|
● 处理指令 |
|
处理指令给XML解析器提供信息,使其能够正确解释文档内容,它的起始标识是“<?”,结束标识是“?>”。常见的XML声明就是一个处理指令: |
|
<?xml version=“1.0”?> |
|
处理指令还可以有其他的用途,比如定义文档的编码方式是GB码还是Unicode编码方式,或是把一个样式单文件应用到XML文档上用以显示。 |
|
● 注释 |
|
注释是XML文件中用作解释的字符数据,XML处理器不对它们进行任何处理。注释是用“<!--”和“ --> ”引起来的,可以出现在XML元素间的任何地方,但是不可以嵌套: |
|
<!--这是一个注释--> |
|
● 根元素和子元素 |
|
如果一个元素从文件头的序言部分之后开始一直到文件尾,包含了文件中所有的数据信息,我们称之为根元素。 |
|
XML元素是可以嵌套的,那么被嵌套在内的元素称为子元素。在前面的例子中,<employee>就是<employees>的子元素。 |
|
● 属性 |
|
属性给元素提供进一步的说明信息,它必须出现在起始标签中。属性以名称/取值对出现,属性名不能重复,名称与取值之间用等号“=”分隔,并用引号把取值引起来。例如: |
|
<salary currency=“US$”> 25000 </salary> |
|
上例中的属性说明了薪水的货币单位是美元。 |
|
XML的语法 |
|
XML文档的基本结构由序言部分和一个根元素组成。序言包括了XML声明和DTD(或者是XML Schema),DTD(Document Type Define,文档定义类型)和XML Schema都是用来描述XML文档结构的,也就是描述元素和属性是如何联系在一起的。 |
|
例如,在例1的文档前面加上如下的序言部分,就构成了一个完整的XML文档: |
|
<?xml version=“1.0”?> |
|
<!DOCTYPE employees SYSTEM“employees.dtd”> |
|
一个XML文档中有且仅有一个根元素,其他所有的元素都是它的子元素,在例1中,<employees>就是根元素。 |
|
一个XML文档首先应当是“格式良好的”(Well-Formed),该规定的正式定义位于: |
|
http://www.w3.org/TR/REC-xml |
|
“格式良好的”XML文档除了要满足根元素唯一的特性之外,还包括: |
|
● 起始标签和结束标签应当匹配:结束标签是必不可少的; |
|
● 大小写应一致:XML对字母的大小写是敏感的,<employee>和<Employee>是完全不同的两个标签,所以结束标签在匹配时一定要注意大小写一致; |
|
● 元素应当正确嵌套:子元素应当完全包括在父辈元素中,下面的例子就是嵌套错误: |
|
<A> |
|
<B> |
|
</A> |
|
</B> |
|
正确的嵌套方式如下: |
|
<A> |
|
<B> |
|
</B> |
|
</A> |
|
● 属性必须包括在引号中; |
|
● 元素中的属性是不允许重复的。 |
|
XML文档的“有效性”是指一个XML文档应当遵守DTD文件或是Schema的规定,“有效的”XML文档肯定是“格式良好的”,有关内容我们会在以后详细说明。 |
|
XML的名称空间 |
|
XML文档中很可能会定义许多名字相同而意义不同的元素或属性,尤其在把不同的XML文档合而为一时,更容易产生冲突。名称空间就是为了解决这个问题而提出的。它用URI(Uniform Resource Indicator,统一资源指示器)加以区别,是在XML文件的元素和属性中出现的所有名称的集合。如下例: |
|
<pr:payment xmlns:pr=“http://www. microsoft.com/payroll”> |
|
<pr:employee>Lars Peterson</pr:employee> |
|
<pr:description>Reimburse expenses</pr:description> |
|
<pr:total>199.76</pr:total> |
|
</pr:payment> |
|
有了名称空间,用户就可以保证在文件中使用的名称是唯一的。对元素的属性xmlns进行定义就表示对该元素指定了一个名称空间。namespace_name必须是一个有效的URI。 |
|
如果省略local_prefix(本地前缀),这时就构成了缺省名称空间: |
|
<payment xmlns=“http://www.microsoft.com/acct”> |
|
<customer>1234</customer> |
|
<amount>500.00</amount> |
|
<date_received>12-03-2000</date_received> |
|
</payment> |
|
如果对一个元素定义了缺省名称空间,那么该元素及其子元素,包括它们的属性都会自动地成为该名称空间的一部分,不用再在每一个元素和属性前面一一标明了。 |
|
在本文开始部分,我们对XML这个新兴的技术做了一个概述,对它的优缺点进行了分析,并对其美好的应用前景进行了展望。在本文后半部分则对XML文档的相关语法、格式做了简要的描述,并介绍了几种有用的开发工具。在以后的内容中,我们会全面展开,深入到XML技术内部,去探索一下这个美妙的世界! |
XML技术预览
|
|
一、显示XML |
|
XML文档本身只描述数据内容,它的显示功能由样式单来完成。利用样式单技术时,输出平台不局限于显示器,可以是打印机、绘图仪或者是多媒体播放器。使用独立的样式单文件制定显示格式的一大优势在于:对同一份数据文件可以制定不同的样式风格,应用在不同的场合,使数据能够更合理、更有针对性地表现出来,提高了数据的重用性。 |
|
目前,W3C正式推荐的样式单标准有两种: 一种是层叠样式单CSS(Cascading Style Sheets);另一种是可扩展样式单语言XSL。 |
|
CSS最初是用于制定HTML文档显示格式的,现在也可用来对XML文档进行简单的样式规划。CSS在HTML中的应用极为广泛,但它在文本置换、依据文本内容而决定显示方式、对数据进行排序等智能化的显示功能上略显不足。 |
|
而XSL则较好地解决了CSS的这些问题,它最常用的功能是将XML的置标转换成为HTML的置标并显示输出。而且XSL还可以将XML文档向任何其他格式的结构文档进行转换。这种功能在B2B的商务模式中有着很好的应用前景。 |
|
XSL利用模式匹配的方法,选择XML文档中需要处理的元素/属性,再针对这些特定的对象制定相应的转换规则。借助XSL,我们还可以添加新的元素/属性,对所有元素/属性进行重新排序、循环处理、条件判断等程序化的控制,使其适应各种复杂的需求。 |
|
在XML文档中引用XSL的格式如下: |
|
<?xml-stylesheet type=“text/xsl” href=“Employees.xsl” ?> |
|
一个XML文档只能引用一个XSL样式单。XML解析器在处理XML文档时,遇到处理指令后,会载入指定的XSL样式单,然后根据其中的规则进行相应的转换处理。 |
|
二、绑定XML |
|
Web服务器与客户机之间的数据传递方式有三种: HTML页面、XML文档以及XML数据岛。其中,XML数据岛通过特定的标签把XML数据直接嵌入到HTML文档中。采用数据岛作为交互手段,不仅可以使数据具备一定的语义信息,同时还能保持HTML原有的一些特色,如利用用户端脚本程序实现动态信息交换等。 |
|
XML数据岛的实现方法是在HTML文档中使用<XML>标签。代码的嵌入方式有两种: 直接嵌入(如例1)和外部引用(如例2)。 |
|
例1: |
|
<XML ID=“MyXMLData”> |
|
<?xml version=“1.0” ?> |
|
……XML definitions…… |
|
</XML> |
|
例2: |
|
<XML ID=“MyXMLData” SRC=“http://www.microsoft.com/MyXMLData.xml”> |
|
</XML> |
|
在插入数据岛之后,就可以把XML中的元素同HTML元素链接在一起,利用HTML的表现手法显示XML数据,这种链接关系被称为绑定。绑定的方式按照HTML元素的性质可以分为两种:单值对象和表格对象。 |
|
单值对象的数据绑定需要在HTML元素中设置DATASRC属性和DATAFLD属性。DATASRC属性是区分XML数据岛对象的唯一标识,并且必须加上前缀“#”;DATAFLD属性则标识了数据岛中的元素对象。例3就是把一个HTML文本输入框与<salary>元素进行了绑定。 |
|
例3: |
|
<INPUT TYPE=“TEXT” |
|
DATASRC=“#MyXMLData” |
|
DATAFLD=“salary”> |
|
至于表格对象,主要是与HTML中的<TABLE>标签绑定。一般地,可以借助DSO(Data Source Object,数据源对象)等ActiveX控件更方便、有效地处理表格数据。具体使用方法在以后的内容中将做详细介绍。 |
|
三、访问XML |
|
Document Object Model(文档对象模型)简称为DOM,是对Web文档进行应用开发、编程的应用程序接口(API),是W3C公布的一种跨平台的、与语言无关的接口规范。 |
|
DOM采用对象模型和一系列的接口来描述XML文档的内容和结构,即利用对象把文档模型化。这种对象模型实现的基本功能包括: |
|
● 描述文档表示和操作的接口; |
|
● 接口的行为和属性; |
|
● 接口之间的关系以及互操作。 |
|
DOM对结构化的XML文档进行解析,文档中的指令、元素、实体、属性等所有个体都可以用对象模型表示。整个文档的逻辑结构类似一棵树,生成的对象模型就是树的节点,每个对象同时包含了方法和属性。 |
|
利用DOM,开发人员可以进行动态地创建XML文档、遍历结构、添加/修改/删除内容等操作。DOM面向对象的特性,使人们在处理和XML解析相关的事务时节省大量精力,是一种符合代码重用思想的强有力编程工具。 |
|
四、验证XML |
|
XML文档必须严格遵守语法规范,即都必须是“格式良好的”。同时,XML文档还应当符合语义方面的规范,即是“有效的”。对XML文档有效性的检查称为对XML的“验证”(Validation)。 |
|
“格式良好的”是对XML文档最基本的要求。凡是“格式良好的”XML文档都可以被XML解析器解析,进而生成对象树,以便接受进一步的处理。而且“有效的” XML必定是“格式良好的”。在此基础上,还要遵守DTD或XML Schema的语法规定,只有这样才能保证XML文档的易读性,同时还能充分地体现数据信息之间的关系,从而更好地描述数据。 |
|
DTD可以定义XML文档的词汇和语法。利用正则表达式,DTD除了可以说明XML文件中哪些元素是必需的、哪些是可选的、元素所能包含的属性等元素本身信息外,还可以描绘元素之间的结构信息。比如,某个元素可以嵌套哪些子元素、子元素的个数以及出现次序、是否可选等等。 |
|
典型的DTD格式如下: |
|
● 以DOCTYPE声明为起始标志,告诉解析器以下内容属于DTD; |
|
● 位于DOCTYPE后的DTD名称,必须与XML文档中的根元素完全一致,后面再跟着一个“[”号,接下来才是DTD正文。 |
|
DTD有两种使用方式: 内嵌式(如例4)和引用式(如例5)。它们在XML文档中的位置都必须位于根元素出现之前。 |
|
例4: |
|
<?xml version=“1.0”?> |
|
<!DOCTYPE employees [ |
|
……ELEMENT and ATTLIST definitions…… |
|
]> |
|
<employees> |
|
……XML data…… |
|
</employees> |
|
例5: |
|
<?xml version=“1.0”?> |
|
<!DOCTYPE employees SYSTEM “Employees.dtd”> |
|
<employees> |
|
……XML data…… |
|
</employees> |
|
目前,DTD是W3C推荐的验证XML文档有效性的唯一正式规范,但它也有着许多不足: |
|
● DTD过于复杂,要熟悉它的语法、标记集合需要一定的时间和精力,而且DTD采用的是非XML语法规则,不能用XML工具进行操作处理; |
|
● DTD对数据类型定义支持不够,所定义的数据类型有限,并且都是针对属性而设立,无法满足电子商务等Web应用所需要的丰富数据类型; |
|
● 扩展机制复杂,也很脆弱,最大的弊病在于不能表达元素之间的相互关系; |
|
● DTD不支持名称空间的机制。 |
|
以上种种缺陷,促使W3C组织致力于寻求一种新的机制来取代DTD。在众多的标准之中, Microsoft公司为主提出的XML Schema较为引人注目。它具有完全符合XML语法、丰富的数据类型、良好的可扩展性以及易被DOM等XML解析器处理等优点。 |
|
最后介绍一个用于XML验证的小工具:xmlint.exe。它可以用来验证XML文档是“格式良好的”以及“有效的”,用法如下: |
|
xmlint c:\my_xml\*.xml |
|
<!--验证所有XML文档是否是“有效的”--> |
|
xmlint -w c:\my_xml\*.xml |
|
<!--仅验证是否是“格式良好的”--> |
|
可以访问下面的网址下载该软件: |
XML的显示——XSL样式单(上)
|
|
一、XML文档转换原理 |
|
数据格式转换的重要思想是要把XML文档视为一种树结构,转换的过程就是从源树生成结果树的过程。XSL样式单定义了源树和结果树中对应部分的转换规则,每条规则中包含了一个模板,并对应着一种模式。模板定义了转换的结果,而模式则规定了需要进行转换的元素或属性对象。 |
|
XML中引用XSL的语法格式如下: |
|
<?xml-stylesheet type=“text/xsl” href=“Employees.xsl” ?> |
|
如果在声明部分引用了多个XSL样式单,则只有第一个样式单会生效,其余的都会被忽略掉。 |
|
XSL的格式转换功能在复杂的电子商务解决方案中大有用武之地。比如,A公司和B公司都是生产机器零件的厂家,在货物清单中都包含了产品序列号以及质量等级评分。A公司的文件格式如下: |
|
<Order> |
|
<OrderItem> |
|
<ItemID>12980-235</ItemID> |
|
<Quantity>200</Quantity> |
|
</OrderItem> |
|
</Order> |
|
而B公司的文件格式有所不同,相关信息都出现在元素的属性中: |
|
<Order> |
|
|