» 网友学堂 » XML教程 » xml网页制做入门教程
xml网页制做入门教程
作者:hinet 发表时间:2007-2-25 17:23 阅读:1298次 在百度搜索相关内容

卷首语

大家好,欢迎访问“初学进阶”!
众所周知,虽然Internet的发展不过十年,但它对我们工作、学习、生活的方方面面却产生了深远的影响。一时间,电子商务、网上出版、网络通信,许许多多的新名词如潮水般涌来。在这个网络大潮之下,XML,这一以第二代网页发布语言而著称的新标准,凭借着它的勃勃生机与强大优势,为网络应用注入了新的活力。一年前的今天,或许还有很多人对“XML”这个名词感到陌生;但一年后的今天,如果谁还不懂XML,那么很可能他就已经在网上弄潮儿的行列中落伍了。
在这一栏目中,我们将分为十章详细介绍XML标准的语法和应用。第一章,我们简单介绍一下什么是XML,并将回顾XML的发展史。从第二章到第四章,我们分别从XML语法、DTD和样式单三方面详细介绍XML的三个基本要件。在第五、第六章中,我们从与XML相关的协议和软件工具两个角度来分析XML的使用现状。第七、八、九章,我们将讨论一些与XML相关的更深层次的内容,包括XML链接、XML DOM以及XML与数据库的连接。最后,在第十章,希望诸多网友和我们一起,仁者见仁,智者见智,共同为XML未来的应用和发展方向作一个前景规划!
好啦,下面就让我们从零开始,循序渐进、轻轻松松地学习XML,让XML引导我们步入精彩纷呈的网络世界!

#Advertisement
#1 hinet 发表评论于:2007-2-25 17:23
1.1.1 什么是置标语言

对XML感兴趣的你是否熟悉当前在网络上大行其道的超文本置标语言HTML(HyperText Markup Language)呢?是否对HTML背后的“置标”这一概念也有所了解呢?要知道,XML和HTML同属一个大家族——置标语言家族,因此,为了让大家更好地理解XML,我们就首先从HTML讲起。
顾名思义,HTML的精髓在于“置标”(Markup),通俗地讲,它就是一种用来给文本添加标记的语言。那么,“置标”的精确含义究竟是什么呢?
“置标”的一个精确定义是:就数据本身的信息对数据进行编码的方法。是不是这个定义太抽象了?没关系,其实“置标”的概念在现实生活中比比皆是,我们只须看看下面这个例子就明白了。
想必大家都有这样的经历——在上学时,曾经用黄色荧光笔把课本上的某些句子加亮,或者干脆在这些句子下面划线——相信即便你自己没有这样做过,你也见过身边的同学这样做。而之所以要将这些句子用荧光笔加亮,是因为你觉得它们很重要。考试前,这些内容需要复习一下,只要跟着这些加亮标记,你就可以迅速地把它们浏览一遍。事实上,不光是你,世界上成千上万的人都在为同样的理由做同样的事情。
其实,正是通过将这些内容加亮,你已经有效地将它们“置标”。把它们用黄色荧光加亮,表示这些课文很重要。于是乎,关于这些课文的信息——即这些课文很重要这一事实——就这样被编码了。
不仅如此,由于几乎所有人都遵循着和你一样的置标标准(难道你见过专门挑那些不重要的课文加亮的人吗?),当你拿起一本别人的课本随便翻翻时,你只要看看那些作了加亮标记的段落,就可以对这本书的精华略知一二了。
从这个例子中我们可以得到两点启示。当我们需要通过标记将有用的信息告知一组用户时:
首先,我们必须有一个标准,用它来描述什么是有效的标记。在上面例子中,标记被定义为在文字上的黄色荧光墨水印迹。而在HTML中,标记就是所谓的“标签”(tag)。
其次,我们还要有一个标准描述每个标记的具体含义。上面例子中的黄色荧光加亮标记意味着被加亮的句子很重要。而在HTML中,每一个标签都表明了一种显示的格式。
同样,“置标”的应用在计算机世界中也甚为广泛。文字编辑器借助置标来定义格式与外观,通信程序依靠置标来理解线路上所传输的信息的语意,数据库通过置标来将数据字段与一定的含义相连,并表明字段之间的关系,多媒体应用中置标则用来标示什么是图象和声音的源数据。
当这些数据被传送给计算机或应用程序时,它必须自身携带一些必要的信息,以表明这些数据的含义,以及接收者应该如何处理这些数据。
可以想象,到了考试期间,如果你的课本上没有任何重点标记,你只能对着它望洋兴叹。同样,如果数据中不带有任何背景信息,应用程序也只能对它望洋兴叹!
HTML就是众多著名的计算机置标系统中的一个。它描述了一系列标签,每个标签表明了一定的显示格式。被置标后的文件(即同时包含了纯文本和关于文本显示格式的标签的文件)由一个HTML处理工具,譬如一个浏览器,进行读取,然后再根据上述标记规则来加以显示。
最后,让我们通过一个例子来看看HTML中的置标是如何大显神通的。在HTML中,标签〈B〉的含义是要求HTML浏览器将一段文本加粗表示,而标签〈CENTER〉的含义是告诉浏览器将这段文本在一行的中间显示。所以,在浏览器中,〈CENTER〉〈B〉BOLD〈/B〉〈/CENTER〉是如下显示的:
BOLD
同样,下面这一段HTML代码显示了一个客户联系信息列表:



张三



用户ID: 001

公司: A公司

EMAIL: zhang@aaa.com

电话: (010)62345678

地址: 五街1234号

城市: 北京市

省份: 北京

ZIP: 100001



李四



ID: 002

公司: B公司

EMAIL: li@bbb.org

电话: (021)87654321

地址: 南京路9876号

城市: 上海市

省份: 上海

ZIP: 200002





这段HTML置标数据在浏览器中的显示效果如下:
张三
用户ID: 001
公司: A公司
EMAIL: zhang@aaa.com
电话: (010)62345678
地址: 五街1234号
城市: 北京市
省份: 北京
ZIP: 100001
李四
ID: 002
公司: B公司
EMAIL: li@bbb.org
电话: (021)87654321
地址: 南京路9876号
城市: 上海市
省份: 上海
ZIP: 200002

当我们对“置标”的含义有了一个明确的理解后,我们对XML的精髓就已经掌握了一半。那么,置标在HTML中的形式和作用与在XML中的形式和作用又有什么不同呢?下一节我们来讨论这个问题。
#2 hinet 发表评论于:2007-2-25 17:24
1.1.2 什么是XML

正象HTML一样,可扩展置标语言XML(eXtensible Markup Language)也是一种置标语言。它同样依赖于描述一定规则的标签和能够读懂这些标签的应用处理工具来发挥它的强大功能。这一点,从XML的命名上也可窥见一斑。
“关于此规范的正确题目,亦即XML的正确全名,应该是Extensible Markup Language, eXtensible Markup Language只不过是一个拼写错误罢了。但是,现在简写XML不仅正确,而且正如它在本规范的标题中一样,是Extensible Markup Language的官方名称。
这个名称和简写是由James Clark最先提出的,其它可供选择的名称还包括小型标准置标语言MGML (Minimal Generalized Markup Language), 标准置标语言的小型结构MAGMA (Minimal Architecture For Generalized Markup Applications), 以及互联网置标结构语言SLIM (Structured Language for Internet Markup)。
——Extensible Markup Language (XML) 1.0 Specs, The Annotated Version. ”

从对XML的最初命名可以看出,XML的核心归根结底还是置标。不过,XML这个置标语言可比HTML的功能要强大的多了。
“人”如其名,XML的强大功能来自于“X”。也就是说,XML不但是置标语言,而且是可扩展的(eXtensible)置标语言。XML并非象HTML那样,提供了一组事先已经定义好了的标签,而是提供了一个标准,利用这个标准,你可以根据实际需要定义自己的新的置标语言,并为你的这个置标语言规定它特有的一套标签。准确的说,XML是一种源置标语言,它允许你根据它所提供的规则,制定各种各样的置标语言。这也正是XML语言制定之初的目标所在。
“XML的制定目标为:
XML应该可以在互联网上直接使用(*就象HTML那样好用)。
XML应该支持各种不同的应用方式(*不但包括浏览,还包括对内容的分析)。
XML应该与SGML兼容(*子承父业嘛,后面我们会讲到,SGML是XML的直接先驱)。
处理XML文件的应用程序应该容易编写(*计算机系的研究生花上两周的工夫就该差不多了)。
XML中的可选特性的数量应该减到最小,最好减至没有(*可选特性经常造成混淆)。
XML文件应该具有良好的可读性,并且比较清晰(*别象HTML那样,如果不借助浏览器,要想读它简直就是对你意志力和耐心的考验)。
用XML设计新的置标语言应该方便快捷(你不必再去经历标准制定的繁琐程序了)。
XML设计的置标语言应该正式、简洁(不然怎么易写易读?)。
XML文件应该容易编制(想想要用“记事本”写个HTML是一件多么可怕的工作)。
XML标记的简洁性并不重要(你不必再去费尽心机减少标记)。
——Extensible Markup Language (XML) 1.0 Specs, The Annotated Version.”

让我们来考虑一个非常简单的例子。如果我们需要定义一个新的置标语言,叫做FCLML(F_company s Client List Markup Language)——F公司的客户列表置标语言。这个语言应该定义一些标签来代表可联系的客户和有关他们的信息。这组标签很简单,它们的优点是代表了一定的语意。让我们回想一下上一节中这些信息在HTML中是如何用标签〈UL〉和〈LI〉表示的。与之相比,下面这一段代码,显然更加清晰易读:
<联系人列表>
<联系人>
<姓名>张三
001
<公司>A公司
zhang@aaa.com
<电话>(010)62345678
<地址>
<街道>五街1234号
<城市>北京市
<省份>北京
100001


<联系人>
<姓名>李四
002
<公司>B公司
li@bbb.org
<电话>(021)87654321
<地址>
<街道>南京路9876号
<城市>上海
<省份>上海
200002



这一段代码是一个非常简单的XML文件。看上去它和HTML非常相象,但细心的人会发现这里的标签代表的不再是显示格式,而是对于客户信息数据的语意解释。
事实上,用XML定义的置标语言可以根据标记描述的侧重点不同分为两大类。一类偏重于语意描述,正如上面这个例子。还有一类偏重于显示方式的描述,象现在已经出炉的XHTML、SVG、SMIL,后面我们还会详细讲解。值得一提的是,这里对于显示方式的描述不仅限于对文本的描述,还可以包括矢量图形、图象、声音。比如,一个形如〈EMPHASIZE〉的标签在描述文本时可能是要求将文本加粗,而在描述声音时则要求将音量加大。
不过,正如我们上节所述,仅仅将数据置标还不够。为了让别人读懂这些数据,置标语言中的置标标准还需包括:
置标的语法
每个置标的含义
换句话说,如果想让计算机应用程序读懂并能处理这段数据,它还必须知道什么是一个有效的置标(如标签),如何处理一个有效的置标。具体地说,Netscape浏览器如何知道怎样显示上面的这段XML文件?标签〈电话〉是什么含义?它究竟是不是一个合法的标签?它又应该以什么方式表现?因此,我们的置标语言必须能够告诉应用程序它所采用的置标的语法,以便于应用程序对其处理。
在XML中,置标的语法是通过文件类型定义DTD(Document Type Definition)来描述的。也就是说,我们通过DTD来描述什么是有效的标签,从而进一步定义置标语言的结构。在用XML定义的置标语言中,DTD与数据文件是分离的部分。第三章我们将详细讨论DTD的定义方法。这里我们先给出关于上例的DTD描述,让大家先睹为快:
fclml.dtd:

<ELEMENT 联系人列表 (联系人)*>
<ELEMENT 联系人 (姓名,ID,公司,EMAIL,电话,地址)>
<ELEMENT 地址 (街道,城市,省份)>
<ELEMENT 姓名 (#PCDATA)>
<ELEMENT ID (#PCDATA)>
<ELEMENT 公司 (#PCDATA)>
<ELEMENT EMAIL (#PCDATA)>
<ELEMENT 电话 (#PCDATA)>
<ELEMENT 街道 (#PCDATA)>
<ELEMENT 城市 (#PCDATA)>
<ELEMENT 省份 (#PCDATA)>
同样,除了定义置标的语法外,我们还需定义置标的具体含义。为了明确各个标签的意义,XML使用与之相连的样式单(style sheet),由它来向应用程序,比如浏览器,提供如何处理显示的指示说明。一个样式单的具体格式我们在第四章再具体描述,现在我们只需知道,样式单所作的规定可能是这样的:
每当看到一个〈联系人〉标签,用一个〈UL〉标签显示它。同样,〈/联系人〉转换为一个〈/UL〉标签。
所有的〈姓名〉标签被转换为〈LI〉标签加以显示。同样,〈/姓名〉转换?LI〉标签。
所有的〈EMAIL〉标签被转换为〈LI〉标签加以显示。同样,〈/EMAIL〉转换为〈/LI〉标签。
等等...
在这个样式单的例子中,我们使用HTML的标签功能来定义我们的FCLML的显示格式。但如果XML文件不是由浏览器,而是由其它应用程序来进行处理,我们可能采用其它相应的标签。
于是乎,我们的应用处理程序要综合DTD,样式单以及FCLML文件数据三方面要素,根据这些数据和规定来显示它。
看到这里,你可能会长叹一声:这不是越来越复杂了吗?原先只要一个HTML就能把数据和显示方式都包括进去,现在我们需要FCLML文件,DTD,样式单——总共三个文件!这还不算,我们需要一个处理工具把DTD、样式单、FCLML三者合一。别忘了,浏览器只是用来处理一种特定的置标语言(比如HTML)的,而不是用来处理所有置标语言的。这说明我们不但要把三个文件合一,还要制作或购买一个新的应用处理程序。太恐怖了!
“一个被称作XML处理器的软件模型应该能够读入一个XML文件,并解释其内容和结构。XML处理器是基于另一个称作应用的模型来进行这种处理的。
——Extensible Markup Language (XML) 1.0 Specs, The Annotated Version”

的确,对于初学者而言,在使用XML时确实要克服一些障碍,不过在下面一节中,你将看到,这是非常值得的。
#3 hinet 发表评论于:2007-2-25 17:24
1.2.1 仍从HTML说起<br>    <br>
<br>   可能大部分网页制作者对HTML仍然情有独钟,一听说要有一个新的语言来代替它,本能地先想为老朋友辩护两句。HTML怎么啦?它不是挺好的吗?<br>
不错,说起当今世界互联网的蓬勃发展,HTML的确立下了赫赫战功。可是,HTML自身的特点使它蕴藏了许多危机,随着它不断的发展,这些危机不但没有减弱,反而越来越突出,甚至已然成为HTML继续发展应用的障碍。时至今日,连HTML经过几年来广泛应用所赢得的资深声誉也无法掩饰其日益深刻的危机了。<br>
HTML制定之初的本意在于根据信息的含义来为它们置标,而没有具体规定它们应该如何在浏览器中显示。回忆一下,在HTML的早期版本中,<title>代表题目,<h1>代表第一层的大标题,<h2>代表第二层的大标题,<em>、<strong>代表强调的文本,<address>代表作者的联系信息。至于这些题目、各层大标题应该如何显示,应该由浏览器决定,因为HTML标准的制定者相信,比起网页的制作人员,浏览器更了解用户的偏好和使用的浏览环境。显然网页的制作者事先并不知道哪些用户决定不显示图片,又有哪些用户喜欢大一些的字体,只有浏览器才能保证为这些特殊用户提供良好的支持。<br>
不幸的是,浏览器的开发者同样也不大了解这些特殊用户的偏好,不仅如此,他们也不大想了解这些信息。相反,他们引入了自己定义的一些标签和属性,用这些新的标签来专门描述显示格式,比如标签<font>、<center>、<bgcolor>等等。浏览器厂商还开发了自己的网页制作软件,如Netscape开发的Netscape Composer,微软开发的Frontpage等等。这些所见即所得的网页制作工具自动生成HTML文件,而这些HTML文件更是忽略了标签的语意信息,而几乎完全将它们作为格式表现的工具。比如说,现在关于表格的标签,如<table>、<tr>、<td>等,不仅可以代表表格中不同行、列的信息,还可能专门用于网页布局。这样一来,HTML越来越侧重于信息的表示,标签中原本就很微弱的信息描述的含义也被削弱了。最后,HTML终于演变为专门用于Netscape和Microsoft IE两大浏览器的页面显示语言。<br>
可能你觉得虽然某些有特殊癖好用户的要求得不到满足,但毕竟对大多数人而言,浏览页面最基本的问题——显示问题,还是解决了。而且,有了这些专门的显示标签,这个问题还是解决得不错嘛!其实不然。浏览器生产厂家在激烈的市场竞争中,为了显示自己的独特性,IE和Netscape都给HTML加入了一些特殊的标记,以便为自己的浏览器增加一些特殊的显示效果。日益增多的标签不但使HTML越来越庞大,浏览器的开发越来越复杂,还降低了不同浏览器之间的兼容性。比如说你的网页是针对IE5浏览器、800*600屏幕分辨率来制作的,那么在640*480的屏幕上观看的效果就会大打折扣,而如果放到Netscape浏览器中,显示效果与最初的设计构想甚至会大相径庭。<br>
不仅如此,尽管HTML的标签越来越多,其显示力却还远远不够。如果你希望非常精确地表现一些你自己的数据,可能你需要一些现在在HTML中尚不存在的标签。比方说,你是一个化学家,你可能需要表现化学分子式中的一些特别的符号。又比方说,你是一个飞机设计师,你希望能够表现飞机的动力引擎。可对于这些,HTML都望尘莫及。要想满足各行各业对显示的不同要求,显然需要大量的标签,这无疑给当今日益臃肿的HTML雪上加霜。<br>
问题还不止这些,现在HTML内部结构的条理性越来越差。你写的HTML文件,甚至是那些专门的所见即所得工具自动生成的HTML文件,可能在语法上会错误百出,不过没关系,浏览器照样能读它。HTML中的文件可以不具有嵌套关系,比如<h1><h2></h1></h2>,也可以不配对出现,只有<h1>而没有</h1>,更不会要求你在使用标签<h2></h2>的外面一定要保证有<h1></h1>,(在语意上难道不该先有一级标题,再有二级标题吗?)。乍一看,这仿佛对网页制作者而言是个福音,可对浏览器的开发者就是件头痛的事了,他们不得不把大量的精力耗费在文法错误的包容上,相应的,浏览器的程序也要加大,甚至牺牲浏览时的时间效率和空间效率。<br>
另外,还更有一批对HTML无可奈何的人,那就是搜索引擎的开发者。因为从HTML的标签本身,他们几乎得不到任何有用的信息。如果你要到网上去找出世界上所有关于XML的书籍的价钱,天啊,搜索引擎要被你忙坏了。它要分辨网络上哪些“XML”字段对应的是书名,又要知道这些书名所对应的价钱。可能你会说,在我们图书馆的网页中,这不是已经办到了吗?问题就在这里,图书馆是根据内部的数据库来进行搜寻的,数据库中的各个字段都有着明确的含义。但搜索引擎在网上是根据HTML文件来进行搜索的,那些原本条理清晰、层次分明的数据库的内容在HTML文件中早就被各种各样的标签搞得混乱不堪,而搜索引擎则不得不在这些混乱的内容中大海捞针!<br>
HTML的这许多弊病,使它进入了一种“山重水复疑无路”的境地。那么,XML又是怎样带来了“柳暗花明又一村”呢?
#4 hinet 发表评论于:2007-2-25 17:24
1.2.2 XML的第一大优势——自由民主的网上世界


说起来,XML仿佛充当着自由宣言的角色,它打破了标记定义的垄断,将网上世界变为一个更加自由民主的世界。
不知你是否清楚在没有XML的时候,要想定义一个置标语言并推广利用它是何等困难。一方面,如果你制定了一个新的语言而期望它能生效,你需要把这个标准提交给相关的组织,例如W3C,等待它接受并正式公布这个标准,经过几轮的评定、修改、再评定、再修改,等到你的置标语言终于熬到成为一个正式推荐标准,可能几年的时间都已匆匆而过了。另一方面,为了让你的这套标记得到广泛应用,你必须为它配备浏览工具。这样,你就不得不去游说各个浏览器厂商接收并支持你的标记,或者索性自己开发一个新的浏览器去与现有的浏览器竞争,无论哪个办法,都令人望而却步!
现在有了XML,你终于可以自由地制定你自己的置标语言,而不必再念念不忘微软、Netscape、W3C的首肯了。
当然,别以为XML的主要目的真的仅仅是为了提供一种祥和的气氛,体现新时代的自由平等的主旋律,它在网络应用中有着确确实实的作用。大家都知道,各个不同的行业可能会有一些独特的要求。比如说,化学家需要化学公式中的一些特殊符号,建筑设计图纸中需要某些特制的标记,音乐家需要音符,这些都需要单独的标记。但是,其它网页设计者则用不着这些记号,也不需要这些标记。XML好就好在它允许各个组织、个人建立适合他们自己需要的标记库,并且,这个标记库可以迅速地投入使用。
不仅如此,随着当今世界越来越多元化,要想定义一套适合各行各业、能够普遍应用的标记既困难,也没有必要。XML允许各个不同的行业根据自己独特的需要制定自己的一套标记,但它并不强迫所有浏览器都能处理这些成千上万个千奇百怪的标记,同样也不要求置标语言的制定者制定出一个非常详尽非常全面的语言从而适合各个行业各个领域的应用。比起那些追求大而全的置标语言的做法,这种具体问题具体分析的方法实际上更有助于置标语言的发展。
“从网络使用之初,我们一直在所有文件中都使用近乎相同的格式,HTML格式...使用具有固定语法的固定标记集具有一定的好处,即简单性。但是,HTML非常有限,网页设计者希望能够对页面的表现能力具有更多的控制,这就需要求助于XML。
——Norman Walsh”

实际上,现在许多行业、机构都利用XML定义了自己的置标语言。比较早而且比较典型的是下面两个实例:
化学置标语言CML (Chemistry Markup Language),by Peter Murray-Rust
数学置标语言MathML (Mathematical Markup Language) 1.0 Specification, W3C Recommendation 07-April-1998
好了,上面我们说了很多关于XML如何突破HTML这种基本标记集的话题。其实,这个优势还远远不是XML的最大优势。那么,它的最大优势又是什么呢?