XML语言第一讲

 

置标语言概述

传统意义上的标记(markup)我们经常会遇到。例如,老师批改过的试卷,经常是满篇红色醒目的对号、错号、问号、波浪线或者意味深长的评语,这些都是标记;我们在看书的时候,也喜欢用荧光笔将重要的内容加亮,以帮助我们在日后重读文章时,能够提纲挈领、迅速抓住要害,这也是标记。从广义上来说,一篇文章中的标点符号、空格等都可以称做标记。这些标记使我们接触的文档具备了不同的意义,并协助我们完成不同的目标。

所谓置标语言(markup language),则特指用一系列约定好的标记来对电子文档进行标记,来实现对电子文档的语义、结构、格式的定义。这些标记应该与文档内容相区分且易于识别。标记语言必须定义什么样的标记是被允许的,什么样的标记是必需的,标记是如何与文档的内容相区分的,以及标记的含义是什么。

SGML语言起源
  为了促进数据的交换和操作,人们很早就产生了将文件结构化为标准格式的动机。20世纪60年代,IBM公司创建了GML(Generalized Markup Language,通用置标语言),以在其出版系统内部实现这一需求。
  SGML(Standard Generalized Markup Language,标准通用置标语言)从IBM的GML演化而来,是第一个标准化的信息结构化技术。SGML成为了IBM内部格式化和维护合法文件的手段。

SGML后来被扩展和修改,作为一种全面的信息标准以适应工业范围的广泛应用。但直到1986年,SGML才成为了ISO标准。尽管SGML的功能非常强大,但是由于它非常复杂,需要许多昂贵的软件配合运行,因而在很长一段时间都没有被推广。

HTML语言及其局限性
  1989年,欧洲粒子物理实验室(CERT)的研究员Tim Berners-Lee和Anders Berglund创建了一种基于标记的语言,为在Internet上共享的文章做标记,这就是HTML。HTML可以看做是SGML的简化应用,它的诞生,推动了信息产业的大发展。

HTML(Hyper Text Markup Language,超文本标记语言)是一种用来制作超文本文档的简单标记语言。用HTML编写的超文本文档称为HTML文档,它能独立于各作操作系统平台(如UNIX、Windows等)。自1990年以来,HTML就一直被用作World Wide Web(WWW)上的信息表示语言,用于描述Homepage的格式设计和它与WWW上其他Homepage (Hyperlink)的链接信息。HTML语言是通过利用各种标记(tags)来标识文档的结构及超链接信息的。

HTML之所以能够流行,是因为它有简洁的语法。但也正是由于它过于简洁,也产生了以下几个主要问题:
  (1) 标记扩展复杂。
  HTML当初仅仅提供了一种对静态文本信息表现的方法,但显然并不能适应越来越多的需要。随后越来越多的标签产生了,例如<img>用于描述图片,<script>通过为网页加入脚本支持来提供动态网页内容。日益增多的标记不但使HTML越来越庞大,浏览器的开发越来越复杂,还降低了不同浏览器之间的兼容性。

(2) 缺乏严格的语法定义。
  HTML文档的正确性很难得到确认。为了使文档的显示过程更加强健,浏览器通常忽略语法分析,不检查语法的正确性。
  (3) 结构化支持差。
  HTML缺乏对复杂结构的支持,例如HTML不能支持分层嵌套信息结构。HTML文档间的联系完全是平面的,这限制了全文检索技术的应用,也使得浏览的过程显得笨拙而繁琐。

(4) 数据、格式、超文本及图形用户界面语义混合。
  ① 内容提取困难。搜索引擎机械地逐一检索每个页面中所有可以匹配的内容,所以我们往往会得到太多的、难以判断的数据采样。这是由于HTML混淆了数据内容和数据表达,数据内容和数据表达信息都被显式地写在同一文档中的缘故。当我们希望看到用不同表现形式表达的同一内容时(比如需要一个用大号字体排印的版本),就不得不从服务器直接产生。同样,在网页显示上的任何其他变化也都必须由开发者亲自实现。

② 难以实现数据交换。HTML难以实现自动的数据交换,它的标签只用来控制文档的显示,却不能标示出数据域。
  ③ 信息重用性差。HTML不易重复使用已有的信息。如果要重新在网上发布同样的信息,或者希望为已有的信息编辑可打印的目录,或需要把网上的数据存入数据库,往往不得不用手工进行处理,更糟糕的是,当网上的数据发生变化时,这些过程都必须重做。
  HTML存在的这些问题随着互联网的蓬勃发展不但没有得到解决,反而越来越突出,成为HTML继续发展应用的障碍。

XML语言的诞生及其优点
  1996年,W3C(万维网联盟)寻找一种在Web中应用SGML的灵活性和强大功能的方法,这导致了1998年2月XML 1.0规范的发布。XML(eXtensible Markup Language,可扩展置标语言)不但具备了SGML的核心特性,而且非常简洁,XML规范的内容甚至不到SGML的1/10。XML作为SGML的子集,同样继承了SGML的优点——扩展性、结构化和有效性。

与HTML相比,XML具有以下几个优点:
  (1) 可扩展性强。
  定义一个标记语言并进行推广和应用,这在XML语言出现之前是非常困难的。一方面,新的标记语言标准化时间很长,从标准提交到相关标准化的建立,要经过几轮的评定和修改,等到正式发布标准时,可能已经过了几年的时间。另一方面,为了推广标准的广泛应用,制定者必须开发相应的标记解释和浏览工具,新的标记语言需要各个厂商进行支持和开发,同样要耗费大量的时间和精力。

各个行业对标记语言的不同需求,决定了定义一套各行业都能够普遍应用的标记是不可能也没有必要的。例如,数学需要大量的函数标记,化学需要大量的化学公式标记,建筑学则需要大量的设计图纸标记。XML语言允许各个不同的行业根据自己的需要制定适合自己行业的标记,同时,XML不要求所有的浏览器都能处理这成千上万个标记,也不会要求标记语言的设计者制定出一个非常详尽、全面的语言。这种思想大大加强了XML语言的可扩展性和灵活性。

(2) 遵循严格的语法要求。
  HTML语法要求并不严格,浏览器可以显示有语法错误的HTML文件。例如,“<b>加粗显示”和“<b>加粗显示</b>”这两条语句在浏览器中的显示效果是一样的,但前者明显没有进行标记的配对。
  XML非常注重准确性,在语法结构上只要有丝毫错误,分析器都会停止对XML进行进一步的处理。XML不但要求标记配对、嵌套,而且还要求严格遵守DTD(文档类型定义)的约定。

 XML分析器处理XML文档的过程中不会进行任何猜测和修改,要么文档被判定为正确而执行或显示,要么文档被判定为错误而停止处理。而HTML的标记已成为标准,HTML分析器可以判断出HTML中到底有什么,又缺什么。
  XML分析器的这种严格性大大减轻了浏览器开发人员的负担,也提高了浏览器的效率;同时,严格的语法要求又为XML文档提供了较好的可读性和可维护性。

(3) 数据内容与数据表达分离。
  下面给出一个XML示例文档来了解一下XML是如何表达数据的。

XML语言的概念
  XML不但是置标语言,而且是可扩展(extensible)的置标语言。HTML提供了一组事先定义好的标记库,XML则提供了一组标准。根据这个标准,可以根据实际需要自定义新的标记语言,并设计相应的一套标记,就像我们在数据库设计时为了表达信息而设计一组字段一样。因此,准确地说,XML是一种元置标语言,它允许程序开发人员根据它所提供的规则制定各种各样适合实际问题需要的标记语言,这也正是XML制定之初的目标所在。

XML规范展示了如下的设计目标:
  (1) 在Internet上直接使用XML。用户能够像使用HTML文档那样快速而简单地打开和浏览XML文档。在实际应用中,只有当XML浏览器像HTML浏览器那样被大量广泛地使用时,才能达到这个目标。
  (2)  XML应该支持非常广泛的应用,它能够在著作、浏览、内容分析等领域发挥巨大的作用。如此看来,当初仅因为需要在Web上传送结构化文档而定义XML的想法倒显得十分狭隘了。

(3) 由于XML可以兼容SGML,因此很多人用它来处理那些十分庞大、繁琐而原本需要SGML来处理的信息。XML设计得很实用,能够兼容已经存在的标准,并且能够解决在Web中传输结构化文档的新问题。
  (4) 计算机程序能够很好地处理XML文档。说得比较通俗一点,开发一个处理XML文档的程序相当容易。
  (5) 在XML中,随意数值保持足够地小,理想上是0。随意特征不可避免地带来兼容性的问题,以至于用户在共享文档时会出现失败的情况。

(6)  XML文档应该保持可读性和一定的清晰程度。如果没有XML浏览器,或者接收到一个篇幅巨大的XML文档,也能够通过常用的文字编辑软件来阅读XML文档,并且了解其内容。
  (7)  XML的设计应该是结构合理而简洁的。可以用很多种办法实现上面第(4)条所提到的目标,归根结底来说,XML应符合EBNF(Extended Backus-Naur Form)的表述规范,并遵从现代编译工具和方法来实现。从很多点上可以说明SGML的语法是不符合EBNF的表述规范的,写一个合适的SGML解析器需要处理繁杂的工作,而且难以解析语言的特性,XML不应该如此。

(8)  XML文档应该是易于创建的,尽管最终需要使用专用的编辑器来创建和修改XML内容,但是那并不是很紧迫的。在中间过渡期,我们可以选择一些其他的方法来创建XML文档,例如直接用字处理软件生成,或者使用简单的Shell和Perl脚本来生成,等等。
  (9)  XML标记的简练是其最大的价值所在。XML并不支持SGML中一些功能强大的特性,而这些特性也使得SGML解析器增加了许多额外的负担。

XML的应用
  1.创建新的标记语言
  作为元标记语言,XML可以为用户定义适合本行业领域的标记语言。如对例1-1描述的图书信息如果加以深入的研究和开发,完全可以编写出应用于表达图书信息的一套标记库。

 2.存储数据
  XML文档是带有一定语义的纯文本格式的文件,可以用来存储数据,也可以方便地编写应用程序来存储和读取存储的数据。由于XML对于硬件、软件、应用程序是独立的,因此也可以使用除标准HTML浏览器以外的其他应用程序来处理XML文档数据。XML数据文档配合DTD或Schema使用时,应用程序完全可以将XML数据文档作为数据源来使用,就像访问数据库一样。XML良好的自我描述特性也使它成为保存历史档案的最佳选择。

3.交换数据
  Microsoft SQL Server、Oracle、Microsoft Access等数据库虽然提供了强有力的数据存储和数据分析能力,但存储的数据格式是不一样的;而我们常用的字处理软件Word、Acrobat等存储数据也各不相同。XML的平台独立性可以将数据在兼容的系统或应用程序中进行交换,并将数据转换成XML文档,从而能够被不同类型的多种应用程序阅读,可大大降低引用的复杂性。XML也将成为在Internet上的企业之间交换金融信息的主要语言。

 4.Web应用
  XML文档将成为Web资源的重要组成部分,XML使得搜索引擎更为智能和准确。XML在Web上的应用主要有以下几个方面:
  (1) 集成不同的数据源。
  XML可以用来描述包含在不同应用中的数据,比如从Web页面到数据库记录等。Web应用的中间层服务程序将这些用XML表示的数据组合起来,然后交给客户端或者下一步的应用。XML还提供客户端包含机制,可以将多个数据源的数据进行集成。

 (2) 本地计算。
  XML数据传送到客户端后,客户端可以利用本地的XML分析器对数据进行解析和进一步处理,这样既完成了应用系统所需的功能,又合理地分配了一部分服务器的处理负荷。例如,数据库记录可以直接传输到客户端进行排序、二次筛选或运算等处理。
  (3) 数据的多种显示。
  XML将数据内容与数据表现分离的优点,决定了XML只描述数据的结构和语义,显示外观则通过样式单文件(Style Sheet)进行描述。因此,只需在显示时应用不同的样式单,同一数据集即可实现多种显示效果。

 (4) 网络出版。
  互联网的高速发展及其海量的内部信息使网络已经成为一种新的媒体。人们在网络上发布各种信息时,信息的发布形式和发布语言多种多样,其中基于XML的显示技术和显示语言发挥了重要的作用。例如,eBook、eNewspaper等电子出版物就利用了XML的优秀特性。
  (5) 支持Web应用的互操作和集成。
  Web界面定义语言(Web Interface Definition Language, WIDL)是WebMethods公司定义的一个XML应用,它是一个能够用于Web资源和企业应用接口的语言标准。通过它,Web应用可以自动存取Web资源和企业应用。

XML文档的编辑工具

  开发XML有许多工具可以使用,下面介绍一些常用的工具。
  • Notepad:最直接、最简单的文本编辑工具,在Windows附件中就可找到。
   •  Microsoft XML Notepad:微软专门为设计XML文档提供的编辑软件,可以借助它验证XML文档的有效性。
   •  Microsoft Visual Studio 2005:该软件是用来开发Web应用程序的,不仅仅局限于XML,还可以开发ASP.NET、ASP、HTML、XSL样式单等。

  •  Microsoft XML Tree Viewer:利用这个软件可以把XML文档的内容用树型结构形式显示出来。
   •  Microsoft XML Validator:该软件可以检查XML文档是否是“格式良好的”以及其有效性,并对错误发出警告。
  • Microsoft XSL Debugger:样式单文件的复杂性使开发人员在编写时容易出现错误,这个软件就是帮助用户调试样式单文件的,它能把复杂枯燥的调试过程用可视化界面显示出来。

 • WordPerfect:一种对开发XML和SGML提供高级支持的文字处理器,具有所见即所得(WYSWYG)的开发环境,提供向导、自动化控件的插入和文档的自动生成等功能。它是一款收费的商业产品,支持Windows 95/98/2000和Linux平台。
   •  SixPack:它能为XML的解析和开发提供简洁的界面,支持Macintosh平台,并公开源代码。

 • Xray:一种具有实时错误检查的XML编辑器。它基于DTD或XML Schema,允许用户创建格式良好的XML文档或验证文档的有效性,并且支持多文档编辑,是一款免费软件,支持Windows 95/98/NT/2000平台。
   •  XMLSpy:它是所有XML编辑器中做得非常好的一个软件,支持WYSWYG。该软件支持Unicode、多字符集,也支持Well-formed和Validated两种类型的XML文档,亦支持NewsML等多种标准XML文档的所见即所得的编辑,同时提供了强有力的样式表设计。

一个简单的XML文档实例

  【例1-2】
  案例说明:一个关于图书信息的XML文档存储、校验和显示的实例。该实例有三个组成部分:其中XML数据文档为“ch1-2.xml”,负责存储包含两本XML图书信息的列表;XML语法文档为“ch1-2.dtd”,负责描述数据文档中的结构,并对数据文档的有效性进行验证;XML样式文档为“ch1-2.xsl”,负责描述XML数据文档在浏览器中的显示方式。上述三个文档存储在同一个目录下。

程序名称:ch1-2.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE BookList SYSTEM "ch1-2.dtd">
<?xml-stylesheet type="text/xsl" href="ch1-2.xsl"?>
<!--关于学习软件开发的图书信息列表-->
<BookList>
      <Annotation>&Content;</Annotation>
      <Book ISBN="7-5606-0924-4/TP0851">

<Title>软件工程</Title>
      <Abstract>介绍软件工程理论...</Abstract>
      <Author>邓良松</Author>
      <Category>计算机</Category>
      <Publisher>西安电子科技大学出版社</Publisher>
      <PubDate>2001年6月</PubDate>
      <Price>20.00</Price>    
</Book>
<Book ISBN="7-5606-0492-7/TP0229">

 <Title>软件系统开发技术(修订版)</Title>
       <Abstract>介绍软件系统的开发技术...</Abstract>
       <Author>潘锦平</Author>
       <Category>计算机</Category>
       <Publisher>西安电子科技大学出版社</Publisher>
       <PubDate>2001年1月</PubDate>
       <Price>12.30</Price>
  </Book>
</BookList>

程序名称:ch1-2.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY  Content  "学习软件开发的参考书">
<!ELEMENT Annotation (#PCDATA)>
<!ELEMENT Title (#PCDATA)>
<!ELEMENT Abstract (#PCDATA)>
<!ELEMENT Author (#PCDATA)>
<!ELEMENT Publisher (#PCDATA)>

<!ELEMENT Price (#PCDATA)>
<!ELEMENT PubDate (#PCDATA)>
<!ELEMENT Category (#PCDATA)>
<!ELEMENT Book ((Title, Abstract, Author, Category, Publisher, PubDate, Price))>
<!ELEMENT BookList ((Annotation, Book, Book))>
<!--"ISBN图书分类号,唯一标识图书,定义为Book的属性"-->
<!ATTLIST Book     ISBN CDATA "7-5606-0492-7/TP0229">

程序名称:ch1-2.xsl
<?xml version=“1.0” encoding=“UTF-8”?>
<xsl:stylesheet version=“1.0” xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”>
<xsl:template match=“/”>
    <html>
      <head>
       <title>关于学习软件开发的图书信息列表</title>
       </head>
    <body>

<xsl:apply-templates select=“BookList”></xsl:apply-templates>
    </body>
    </html>
</xsl:template>
      <xsl:template match=“BookList”>
       <xsl:for-each select=“Book”>
        <ul>
           <li><b><xsl:value-of select=“Title”/></b></li>
     </ul>

<li><xsl:value-of select=“@ISBN”/></li>
        <li><xsl:value-of select=“Author”/></li>
     <li><xsl:value-of select=“Category”/></li>
        <li><xsl:value-of select=“Publisher”/></li>
        <li><xsl:value-of select=“PubDate”/></li>
     <li><xsl:value-of select=“Price”/></li>
      </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值