扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。
XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML仅仅是展示数据。事实上XML与其他数据表现形式最大的不同是:他极其简单。这是一个看上去有点琐细的优点,但正是这点使XML与众不同。
XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS, Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果XML是ExtensibleMarkupLanguage的简写,一种扩展性标识语言。HTML是一种标记语言,全称:'HypertextMarkupLanguage'超文本标记语言。同时,HTML里面有很多标签,类似,等,都是在HTML4.0里规范和定义,而XML里允许你自己创建这样的标签,所以叫做可扩展性。
1.XML并不是标记语言。它只是用来创造标记语言(比如HTML)的元语言。天,又糊涂了!不要紧,你只要知道这一点:XML和HTML是不一样的,它的用处途比HTML广泛得多,我们将在后面仔细介绍。
2.XML并不是HTML的替代产品。XML不是HTML的升级,它只是HTML的补充,为HTML扩展更多功能。我们仍将在较长的一段时间里继续使用HTML。(但值得注意的是HTML的升级版本XHTML的确正在向适应XML靠拢。)
3.不能用XML来直接写网页。即便是包含了XML数据,依然要转换成HTML格式才能在浏览器上显示。
XML是Extensible Markup Language的简写,一种扩展性标识语言。HTML是一种标记语言,全称:'Hypertext Markup Language' 超文本标记语言。同时,HTML里面有很多标签,类似, 等,都是在HTML 4.0里规范和定义,而XML里允许你自己创建这样的标签,所以叫做可扩展性。
1.XML并不是标记语言。它只是用来创造标记语言(比如HTML)的元语言。天,又糊涂了!不要紧,你只要知道这一点:XML和HTML是不一样的,它的用处途比HTML广泛得多,我们将在后面仔细介绍。
2.XML并不是HTML的替代产品。XML不是HTML的升级,它只是HTML的补充,为HTML扩展更多功能。我们仍将在较长的一段时间里继续使用HTML。(但值得注意的是HTML的升级版本XHTML的确正在向适应XML靠拢。)
3.不能用XML来直接写网页。即便是包含了XML数据,依然要转换成HTML格式才能在浏览器上显示。
正象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〉表示的。与之相比,下面这一段代码,显然更加清晰易读:
<联系人列表>
<联系人>
<姓名>张三</姓名>
<ID>001</ID>
<公司>A公司</公司>
<EMAIL>zhang@aaa.com</EMAIL>
<电话>(010)62345678</电话>
<地址>
<街道>五街1234号</街道>
<城市>北京市</城市>
<省份>北京</省份>
<ZIP>100001</ZIP>
</地址>
</联系人>
<联系人>
<姓名>李四</姓名>
<ID>002</ID>
<公司>B公司</公司>
<EMAIL>li@bbb.org</EMAIL>
<电话>(021)87654321</电话>
<地址>
<街道>南京路9876号</街道>
<城市>上海</城市>
<省份>上海</省份>
<ZIP>200002</ZIP>
</地址>
</联系人>
</联系人列表>
这一段代码是一个非常简单的XML文件。看上去它和HTML非常相象,但细心的人会发现这里的标签代表的不再是显示格式,而是对于客户信息数据的语意解释。
事实上,用XML定义的置标语言可以根据标记描述的侧重点不同分为两大类。一类偏重于语意描述,正如上面这个例子。还有一类偏重于显示方式的描述,象现在已经出炉的XHTML、SVG、SMIL,后面我们还会详细讲解。值得一提的是,这里对于显示方式的描述不仅限于对文本的描述,还可以包括矢量图形、图象、声音。比如,一个形如〈EMPHASIZE〉的标签在描述文本时可能是要求将文本加粗,而在描述声音时则要求将音量加大。
不过,正如我们上节所述,仅仅将数据置标还不够。为了让别人读懂这些数据,置标语言中的置标标准还需包括:
置标的语法
每个置标的含义
换句话说,如果想让计算机应用程序读懂并能处理这段数据,它还必须知道什么是一个有效的置标(如标签),如何处理一个有效的置标。具体地说,Netscape浏览器如何知道怎样显示上面的这段XML文件?标签〈电话〉是什么含义?它究竟是不是一个合法的标签?它又应该以什么方式表现?因此,我们的置标语言必须能够告诉应用程序它所采用的置标的语法,以便于应用程序对其处理。
在XML中,置标的语法是通过文件类型定义DTD(Document Type Definition)来描述的。也就是说,我们通过DTD来描述什么是有效的标签,从而进一步定义置标语言的结构。在用XML定义的置标语言中,DTD与数据文件是分离的部分。第三章我们将详细讨论DTD的定义方法。这里我们先给出关于上例的DTD描述,让大家先睹为快:
fclml.dtd:
<?xml version='1.0' encoding='GB2312'?>
<!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文件和HTML文件一样,实际上是一个文本文件。一种网站设计的工具。
Web的新生命——XML
2000-08-16 10:17:19
1996年11月,波士顿SGML世界年会产生一项重大变革:与会代表一致公认将目前InternetHomepage撰写标准HTML宣告终结,取而代之,采用最新电子文件格式化通用标准——可扩展的标识语言XML(Extensible Markup Language)。
根据美国电子商务专家预测,XML可以改善传统网页设计语言HTML的描述方式,未来将可取代HTML成为新一代的网页标示语言,这转变将革命性地改变以Web为基础的电子商业应用型态。利用XML所具有的可扩展性以及自我描述(slef-descriptive)特性,Web文件可以在企业间的应用程序中自动传输、处理及储存,不同厂商的电子商品可以在同一个使用者界面同时展现,资讯的搜寻变得更为精确快速,不同系统间可以流畅的互通,而中小企业也可以轻易享受EDI的好处。
一、从HTML到XML
其实,早就有一个全世界标准的标识语言,可以用来定义某一类文件格式标志,那就是电子通讯文件交换格式标准语言SGML(Standard Generalized Markup Language)。它是一个国际性标准(ISO8879),用来形容和定义结构化的电子文件,在1980年代就制订了。不过,由于SGML太过于详细和复杂,所以一直没有被广泛地采用。
Internet的广泛应用,需要人人都易上手的描述语言。作为SGML的子集,超文本标识语言HTML应运而生。它受到Internet和全球资讯网热潮的推波助澜,很快地就成为在网上制作页面的标准语言。
XML也是从SGML所衍生出来的简化格式,它取名叫做可以延伸的标示语言(ExtensibleMarkupLanguage)的原因主要是有别于HTML那种单一固定的语法,要让制作页面时,有一个更具弹性、更容易添加新功能,而又不失统一标准的语言格式。相对于HTML只是SGML衍生出来的一种文件格式,XML则免除了SGML的繁复但仍保持其威力,这使SGML的优秀品质能方便而直接地被用在Web开发上。
严格说起来,XML本身不是一个单一的标示语言,它是一种元语言(meta-language),可以被用来定义任何一种新的标示语言。像HTML之类的传统标示语言,是用来定义某一类文件的格式,以便于展示或列印;而XML则是可以用来创造类别文件的格式定义,也就是在XML之中可以创造出很多不同的标示语言,用来定义不同的文件类别。
XML继承了SGML具有的可扩展性、结构性及可校验性,与HTML语言相比,区别主要在三方面:
(1)可扩展性方面:HTML不允许用户自行定义他们自己的标识或属性,而在XML中,用户能够根据需要,自行定义新的标识及属性名,以便更好地从语义上修饰数据。(2)结构性方面:HTML不支持深层的结构描述,XML的文件结构嵌套可以复杂到任意程度,能表示面向对象的等级层次。(3)可校验性方面:HTML没有提供规范文件以支持应用软件对HTML文件进行结构校验;而XML文件可以包括一个语法描述,使应用程序可以对此文件进行结构确认。
需要指出的重要一点是,HTML与XML二者相互之间并不是竞争关系,而是互相补充的关系。各种浏览器都将能够处理这两种语言,而且将来的HTML标准可能允许在同一文档中混合使用HTML和XML。
二、XML语言结构
XML有许多部分,但是只需要了解其中的三个就可以了解它是怎样工作的。它们是:文档类型定义(Document Type Definition,DTD),也就是XML的布局语言;可扩展的样式语言(Extensible Style Language:XSL),也就是XML的样式表语言;以及可扩展链接语言(Extensible Link Language:XLL)。
我们以一份菜谱为例子。
Carol Schmidt
Chocolate Chip Bars
DinnerDessert
2/3Cbutter
2Cbrownsugar
1tspvanilla
……
Preheat oven to 350 degrees. Meltbutter;
combine with brown sugar and vanillain large mixing bowl.……
这就是一份可以接受的XML文档,它告诉了你XML是什么:把数据以一种有实际意义的方式进行组织。
表面上看,XML文件与HTML文件比较相似,都以一对相互匹配的起始和结束标记符来标记信息,但二者功能不同,HTML的标记符用来显示数据,XML的标记符则是描述数据对角,后者可以多种方式显示,这和把地址簿的信息放在数据库的字段和记录中而不是放在字处理器产生的清单中的道理一样,数据库可以让你把地址簿中的信息合成到标签、信封、信件或其它任何想要的载体上面。最终,就是把这份XML菜谱文件合成到一种表现语言中,如HTML或CSS上显示出来。
XML的标记符也可以由其他应用软件进行深入的处理,你可以告诉其它程序如何使用这些有意义的标记符;也可以通过编码把标记符中的内容放入数据库的某个域中,然后把它输出到一本书的硬拷贝中;还可以用一个支持XML的字处理器使网页的出版轻而易举;等等。这就是XML的本质:使标记对人和机器都可读。
从例子可以看出,一个XML文件必须满足以下三项基本规则:
(1)文档以XML定义开始。1.0表示其版本编号;(2)有一个包含所有其它内容的根元素,如上面例子中的和标记符;(3)所有元素必须合理地嵌套,不允许交叉嵌套。这在HTML中可能不算什么,因为浏览器已经被设计成可以处理这种问题。但是在XML中却是致命的——应用程序将拒绝处理没有组织好的文件。
三、XML应用范围
XML是一种网络标准,能够简化互联网和企业网上的数据交换,自1996年开发以来已取得了巨大进展。
按照XML工作组的Bosak的看法,XML的应用范围可分为4大类:
(1)要求Web客户机在两个或多个不同的数据库之间传递信息的应用;(2)希望将Web服务器的大量处理负荷转移给Web客户机的应用;(3)要求Web客户机把同一数据以不同的表现方式提供给不同用户的应用;(4)适应特定用户需求的智能Web工具应用。
电子商务属于第一类应用,尤其是以电子数据交换(EDI)为基础的电子商务。XML赋予Web数据的结构使其更容易添加上数字签名,同时更容易对文档或文档的一部分进行加密。W3C数字签名倡议从事的正是XML的安全和认证研究。在要求自动化和信息重复使用的其他应用方面,XML也将对HTML有所补充。将来不管什么时候,从HTML向XML的过渡将是顺畅的,不会给用户带来任何不便。