XML有两个先驱——SGML和HTML,这两个语言都是非常成功的置标语言,但是他们都在某些方面存在着与生俱来的缺陷。XML正是为了解决它们的不足而诞生的。
让我们首先从SGML说起。SGML的全称是标准通用化置标语言,它从80年代初开始使用。正如XML一样,SGML也可用于创建成千上万的置标语言,它为语法置标提供了异常强大的工具,同时具有极好的扩展性,因此在分类和索引数据中非常有用。目前,SGML多用于科技文献和政府办公文件中。但是,SGML非常之复杂,其复杂程度对于网络上的日常应用简直不可思议。不仅如此,SGML非常昂贵。还有最关键的一点,几个主要的浏览器厂商都明确拒绝支持SGML,这无疑是SGML在网上传播遇到的最大障碍。
相反,HTML免费、简单,而且它获得了广泛的支持。HTML最初于1990年由CERN设计,它是一个非常简单的SGML语言,可以方便普通人的使用。而正如设计之初所构想的那样,HTML现在在世界范围内得到了广泛的应用。不幸的是,HTML有许多致命的弱点,不能解决所有解释数据的问题,像是影音文件或化学公式、音乐符号等其它型态的内容、效能问题,需要下载整份文件,才能开始对文件做搜寻的动作、扩充性、弹性、易读性均不佳。正因为如此,1996年人们开始致力于描述一个置标语言,它既具有SGML的强大功能和可扩展性,同时又具有HTML的简单性。国际互联网论坛W3C (World Wide Web Consortium)决定专门成立一个SGML专家小组来从事此项工作,大名鼎鼎的Sun公司的Jon Bosak担任小组的指挥。事实上,Bosak和他领导的专家小组对SGML所做的贡献就像JAVA研究组对C++做出的贡献一样。SGML中所有非核心的、未被使用的和含义模糊的部分都被删除,剩下的就成为短小精干的置标工具——XML。对于XML的描述(由Tim Bray和C.M. Sperberg-McQueen撰写)只有26页,而当初的SGML的描述却长达500页之多。而更妙不可言的是,尽管篇幅只是SGML的1/20,但 SGML中所有的精华都被保留了下来。
这以后,XML不断发展演化,并且从CML和MathML中汲取了大量的经验。1997年春天,可扩展链接语言XLL草案已被拟定,到了1997年夏天,微软也开始了关于通道描述格式CDF(Channel Definition Format)的定义工作,这应该算是XML的第一个真正的应用。
最后,XML于1998年修成正果。W3C于1998年2月批准了XML的1.0版本,一个崭新而大有前途的语言诞生了。
后注:
XML是从1996年开始有其雏形,并向 W3C(全球信息网联盟)提案,而在1998二月发布为W3C的标准(XML1.0)。 XML的前身是SGML(The Standard Generalized Markup Language),是自IBM从60年代就开始发展的 GML(Generalized Markup Language)标准化后的名称。文件中能够明确的将标示与内容区隔;所有文件的标签使用方法均一致。1978年,ANSI将GML加以整理规范,发布成为SGML,1986年起为 ISO 所采用(ISO 8879),并且被广泛地运用在各种大型的文件计划中,但是SGML是一种非常严谨的文件描述法,导致过于庞大复杂(标准手册就有500多页),难以理解和学习,进而影响其推广与应用。
于是,人们对SGML进行了简化衍生出 HTML。HTML 简单,在初期没有任何定义文档外观的相关方法,仅用来在浏览器里显示网页文件。而后,随着因特网的发展,人们为了控制其文件样式,扩充了描述如何显现数据的卷标。在 Netscape 与 Microsoft 之间的浏览器大战后, HTML 标准权威性遭受重大的考验,所幸,到了HTML 4.0时,W3C 又恢复了其地位。
同时W3C意识到HTML的原罪:
不能解决所有解释数据的问题 - 像是影音文件或化学公式、音乐符号等其它型态的内容。
效能问题 - 需要下载整份文件,才能开始对文件做搜寻的动作。
扩充性、弹性、易读性均不佳。
为了解决以上问题,专家们使用SGML精简制作,并依照HTML的发展经验,产生出一套使用上规则严谨,但是简单的描述数据语言:XML。 XML是在一个这样的背景下诞生的─是不是能有一个更中立的方式,让消费端自行决定要如何消化、呈现从服务端所提供的信息?
而XML目的即在于提供一个对信息能够做精准描述的机制,借以弥补 HTML 太过于表现导向的特质。
W3C XML 规范和时间线
| 规范 | 草案/提议 | 推荐 |
| XML 1.0 | 1998年2月10日 | |
| XML1.0 (2.Ed) | 2000年10月6日 | |
| XML 1.0 (3.Ed) | 2004年2月4日 | |
| XML 1.1 | 2004月2月4日 | |
| XML 1.1 (2.Ed) | 2006年8月16日 | |
| XML 1.0 Namespaces | 1999年1月14日 | |
| XML 1.0 Namespaces SE | 2004年3月4日 | |
| XML 1.1 Namespaces | 2004年3月4日 | |
| XML 1.1 Namespaces SE | 2006年8月16日 | |
| XML Infoset | 2001年10月24日 | |
| XML Infoset (2.Ed) | 2004年2月4日 | |
| XML Base | 2001年6月27日 | |
| XLink 1.0 | 2001年6月27日 | |
| XPointer Framework | 2003年3月25日 | |
| XPointer element() scheme | 2003年3月25日 | |
| XPointer xmlns() scheme | 2003年3月25日 | |
| XInclude 1.0 | 2004年12月20日 | |
| XInclude 1.0 SE | 2006年11月15日 | |
| XML Processing Model | 2004年4月5日 |