日期:2014-4-27 浏览次数:20365次

当XML被W3C批准后迅速在1998年2月进入历史舞台,被称为"当年突然涌现的技术"。它被称为HTML的继任者,还被有些人称为结构化数据交换的未来混合语。
  
  由于XML是从它W3C开始的阴暗处涌现出来的,也许不可避免地,这一新数据格式将象它吸引狂热爱好者一样快地开始产生错误概念。在本专栏中,我将在一些关于XML的神话成为永世性错误理解前澄清它们。
  
  
  神话1:XML是由微软领导的共同成果
  
  XML是一个共同成果,但不是微软的。实际上,XML是由一个Sun微系统公司组织的标记言语专家小组提出的,以开发历史悠久的ISO标准SGML用于Web的一种方式。
  
  微软确实是XML任务中的一个次要参与者,但是其它一些大公司也是如此(Sun,惠普,Netscape, Adobe和富士及施乐),还有次要的SGML厂商和系统集成商(ArborText,Inso, SoftQuad,Grif,Texcel和Isogen),学术团体的代表(NCSA和Text Encoding Initiative),晚期使用者(DataChannel 和Vignette),和世界上最次要的SGML专家之一James Clark,他是W3CSGML的技术领袖。
  关于XML,令人惊异的是所有这些人和组织都将团体和公司议事日程放在一边,合作建立一个天生开放的标准,完全由用户需求驱动。这些需求包括:
  l 可扩展性,以定义需求的新标记。
  
  l 结构,以表示任意复杂程度的数据。
  
  l 校验,以检查数据的结构正确性。
  
  l 媒体无关性,以用多种格式发布内容。
  
  l 厂商和平台中立,以用标准的商业软件甚至简单的文本工具处理任何满足标准的文档。
  
  虽然我不得不钦佩微软对XML概念的熟练使用和推销,但是XML并不属于微软。XML属于世界。
  
  神话2:XML是HTML的一个扩展
  
  晚期对XML的概括已导致许多人置信XML仅仅是一种通过添加新标记来扩展HTML的方法。实际上,XML和HTML在标记言语中处于完全不同的层次。HTML是一种标记言语--一套具有标准意义的标准分隔符,可放到文档中以指示文档中特定部分的角色。例如,在一个HTML文档中<H2>和 </H2>之间的任何东西都被理解为一个第二级文档标题。
  
  标记言语
  
  对标记言语的经验只局限于Web的人们经常惊讶地得知HTML只是许许多多标准标记言语中的一种,这些言语在特定行业内已被开发多年。例如,航空业有一种飞机维护手册的标记言语,称为ATA-2100,半导体行业有一种用于电路数据的标记言语,称为PCIS,而计算机行业有一种用于软件文档的标记言语,称为DocBook。
  
  这些标记言语中有些比HTML使用得更久,其中许多面向的是要处理的问题不同的方面。例如,考虑这段HTML:
  
  <H2>Second-level heading</H2>
  
  这是一段很可能属于上面标题的文本。</P>
  
  一段类似的DocBook可能看起来象这样:
  
  <SECT2>
  
  <TITLE>二级标题</TITLE>
  
  <PARA>这是一段肯定属于上面标题的文本。
  
  我们知道这一点是由于它们都包含在同一个SECT2元素内。
  
  </PARA>
  
  </SECT2>
  
  虽然这些不同的标记言语有它们的不同之处,所有这些,包括HTML,在三方面都是类似的。
  
  l 每一个都定义了一套有标准化含义和标准化使用规则的标准标记--换句话说,一个标准化的语法。
  
  l 每一个都设计为对某一特定类型的文档或数据任务得最好。
  
  l 都使用有12年历史的国际文本处理标准SGML定义它们的标准标记集和语法。
  
  所有这些言语看起来也类似,由于它们都使用熟悉的尖括号,承继自SGML的具体援用句法。
  
  SGML层
  
  依据上面的描述,应该很清楚SGML本身属于一个不同于任何用SGML定义的一般标记言语的概念层,SGML和特定标记言语的区别经常被总结为SGML是一种元言语而不是一种言语。这是一个很不精确的概括。SGML不象真正的元言语那样笼统,如巴克斯/纳尔范式(BNF),它是用于定义程序设计言语的。不过,称SGML为元言语确实使人抓住了关键:SGML不是一种特定的标记言语;它是一种定义标记言语的言语。
  
  理解XML的关键要素是它属于SGML层,而不是HTML层。XML是SGML的一种简化方式,而不是HTML的一种扩展方式。XML和SGML的区别是XML的设计者去除了许多SGML的高级特性,这些特性使得难以在一个Web浏览器中实现一个SGML的完全解析器。
  
  但是基本思想是一样的:XML是一种允许创建无限种不同用途的不同标记言语的技术。XML的关键--和它变得如此普及的缘由--是所有可用它定义的不同的特殊用途言语都能被一个标准化的处理程序解析,这一程序小得可以内嵌入每一个Web浏览器中。
  
  不理解这一区别的人们往往得出一个结论,认为一个对XML敏感的使用将允许他们简单地在他们的HTML文档中四处撒上新的标记。试图用这种方式"扩展"HTML将使我们已得到的一团糟愈加混乱。
  
  神话3:XML可以本人驱动Web浏览器
  
  记住HTML概念是一种包含绝对小标准标记集的标记言语,与一些多少标准化的行为相关。XML概念是一个无限大的可能标记的集合,相关的行为基本没有标准。行为的规范必须来自其它某个地方。在发布时,这通常是一个款式表,但是在其它领域可以象JavaBeans一样柔性,或者象一种行业标准协议一样专门,程序员在其上编写标准化使用。
  
  句法不是语义
  
  XML支持者将这一点总结为XML定义句法而不是语义。一些理论家则反对说这一简单化的表述忽视了XML句法对象和构成它们所表示的XML数据(如元素和属性)的语义联系。然而,"句法而非语义"这一口号试图强调的更多,更简单:不像HTML标记,XML标记没有预定义的含义。意义或行为必须由以程序的运转条件或者脚本或者用款式表的声明条件甚至陈旧而好用的普通文本提供。
  
  当预期的XML用户可怜地讯问XML如何在他们的Web浏览器上显示时,关于这一点的混淆就很明显了。回答是它并不显示--至少不是靠它本人。
  
  要在一个浏览器内仿效如今对HTML所做