bluesky_lcj

导航

XML介绍和XML基础规范

XML介绍 XML基础规范

  XML全名是可扩展标记语言,是W3C国际标准组织规定的一种基于文本的数据存储格式,它是从IBM的SGML技术派生的,HTML也是从SGML派生的。SGML内容非常复杂,而XML使用了SGML的20%的语法实现了SGML的80%的功能。

  从软件开发人员的角度看, XML语法主要有

  XML是国际标准,绝大部分软件厂商,开发工具和编程语言都支持相同的基本XML规范。XML文档可用于任何开发平台上,这是XML技术最大的优势。相对来说,JAVA这种非国际标准的技术跨平台则是不太容易的。

  XML是基于纯文本的,XML文档中是不能包含二进制数据。而且存储文件时会涉及到文本编码格式的问题。

  XML文件具有层次结构,其中使用一对尖括号来定义一个XML元素,一个XML元素可以包含若干个属性,而XML元素下面可以包含若干个子XML节点。

  一个XML文档只能而且必须定义一个根元素,不可多定义,也不能不定义。

  XML元素不能错乱套嵌定义,比如“<a><b></a></b>”是错误的XML文档。

 XML格式是为了各系统交流数据而设计的,其设计过程考虑了方便的数据的临时存储和交流,而不考虑数据的长期存储,因此XML文档比较冗余,文件体积大,因此不适合存储大数据量,网络传输效率低。在软件开发中需要注意到这个问题。

  XPath

  XPath是W3C国际标准组织提出的在一个XML文档中快速检索和定位XML节点的标准。关于它将在下节课程详细介绍。

  XSLT

  XSLT也是W3C国际标准组织在XML标准的基础上提出的XML文档转换的标准,它是一种非常重要的XML应用,它也是跨平台的,受到众多软件厂商的支持。在下节课程将详细介绍XSLT。

  W3C

  此处多次提到W3C国际标准组织,那么到底什么是W3C国际标准组织呢?

  W3C是大部分软件企业联合起来制定某些重要软件业标准的国际组织。它的成员包括微软,IBM,SUN等软件巨头。它制定和维护了HTML,XHTML,HTTP,XML,VML,XPath,XForm等软件行业内重要的标准,绝大多数软件厂商都支持W3C制定的标准,它制定的标准是真正的跨平台的全球通用的。因此它对全球软件业界,尤其是WEB软件业界有着巨大的影响。它的网址是 http://www.w3c.org/,在它的网站上可以看到它所制定的上百个标准。大家若要开发具有国际水平的WEB应用系统,应当要好好学习W3C的某些标准。

  国际标准的意义

  在这里说明一下国际标准的意义。

  所谓国际标准就是某个权威的非营利性的国际组织,其立场中立,不代表某个具体的公司,而是代表整个业界。它针对某项普遍使用的技术出台一些规范和标准。而各个具体的软件厂商在运用这项技术时自觉遵守这套国际标准。这样能方便各个系统之间交流数据,保障异构系统进行集成,并保持数据结构的长期稳定性和兼容性。这样的国际组织有ISO,ECMA和W3C等等。

  我们使用到的一些技术都已经成为国际标准,例如SQL,JavaScript,C#,HTML,XML,XSLT,HTTP等很多技术。

  国际标准具有一些特点,首先是稳定性和连贯性,国际标准一旦正式发布,就保持了相当的稳定性,其内容只能慎重的增加而不能删减,国际标准组织不会轻易修改已经正式发布的国际标准,而且在修改标准时会充分考虑到各种因素,保证向上和向下的兼容性,能最大程度的保障业界在旧标准上的投资。而且这些国际组织发布国际标准时有时会事先提出标准的修订计划。

  其次国际标准是全球业界都遵守的,虽然没有强制遵守的机制,但绝大多数软件厂商都会遵守或者努力遵守这些国际标准。而且国际标准组织的成员有很多大软件厂商,比如W3C的成员就有微软,IBM,SUN等大公司。因此国际标准是代表了最广大软件业界的根本利益,代表了最先进的软件生产力。

  对于应用软件开发商,充分的运用国际标准能很大程度的保护客户在IT系统上的投资。由于国际标准具有相当的稳定性和连贯性,若客户IT系统充分的使用了这些国际标准,则在升级到新标准时能获得很好的兼容性。IT系统不用推倒重来,这样能保护客户在已有系统上的投资。

  作为软件开发人员,也应当了解这些国际标准,首先是能比较容易的实现异构系统的集成,并能获得比较好的系统兼容性和可维护性。而且软件开发人员在切换开发平台,比如从Java转移到.NET平台上时,以前学习国际标准的投资就会得到保护,而遵守相同标准的源代码的移植和翻译也是低成本的。

  DOT.NET框架对XML的支持

  .NET框架提供了对XML的强大支持,而且.NET框架本身也普遍采用XML格式来存储各种配置信息。比如web.config文件。

  在.NET类库中,名称空间System.Xml下面就包含了大量的操作XML文档的类型。这些类型构成了两种XML文档的处理模型。

 流式处理模型

  在流式处理模型中,我们将XML文档做作一个数据流来进行处理,我们将逐个处理XML文档中的数据,在这种模型下,我们可以只读的快速读取大体积的XML文档,而且内存占用少,程序性能好。类型System.Xml.XmlReader就提供了流式处理模型,使用XmlReader就可以快速读取XML文档。

  使用流式处理模型是有缺点的,首先是它只能读取XML文档,不能修改XML文档;其次是检索XML文档内容不方便,不能使用XPath技术;而且编程接口比较简单,处理XML文档不够方便。当程序需要比较简单的从XML文档读取数据则可以采用流式处理模型。

  DOM处理模型

  在DOM处理模型中,我们首先是使用文档对象模型的思想解析整个XML文档,在内存中生成一个对象树来表述XML文档。比如使用一个XmlElement对象来影射到XML文档中的一个元素,使用XmlAttribute对象来影射到XML文档中的一个属性。这样我们编程操作内存中的对象就影射为操作XML文档。

  使用DOM处理XML文档具有相当大的优点,首先是处理方便,我们可以使用各种编程技巧来处理XML文档对象树状结构,比如可以递归遍历XML文档的一部分或全部,可以向树状结构插入,修改或删除XML元素,可以设置XML元素的属性。

  在DOM模式下,我们可以使用XPath技术在XML文档树状结构中进行快速检索和定位,这为处理XML文档带来比较大的方便。

  在C#中,我们可以很简单的使用DOM方式处理XML文档。我们首先实例化一个System.Xml.XmlDocument类型,调用它的Load方法既可加载XML文档并生成XML节点对象树状结构,然后我们就可以遍历这个对象树,新增修改和删除节点,而且其中的任意一个节点都可以使用SelectNodes或SelectSingleNode方法通过XPath相对路径快速查找其它的节点。

 在名称空间System.Xml下面大部分类型都是用来支持DOM处理模型的。其中很多类型配合起来共同组织成XMLDOM,XMLDOM是一种很典型的文档对象模型的应用。文档对象模型是一种比较高级的软件设计模式,我会在今后的课程中详细介绍文档对象模型这种软件设计模式。

C#发现之旅第一讲 C#-XML开发System.Xml名称空间下的支持DOM的类型主要有

  XmlNode 是DOM结构中的所有类型的基础类型,它定义了所有XML节点的通用属性和方法,是XMLDOM的基础。它具有一个ChildNodes属性,表示它所包含的子XML节点。

  XmlAttribute 表示XML属性,它只保存在XmlElement的Attributes 列表中。

  XmlDocument表示XML文档本身,是XMLDOM模型中的顶级对象,它用于对XML文档进行整体的控制,并且是其它程序访问XML文档对象树的唯一入口。

  XmlLinkedNode在XmlNode的基础上实现了访问前后同级节点的方法。

  XmlElement元素表示XML元素。是XMLDOM中使用最多的对象类型。它具有Attributes属性可以处理它所拥有的属性,可以使用ChildNodes属性获得它所有的子节点。并提供了一些添加和删除子节点的方法。

  XmlCharacterData表示XML文档中的字符数据的基础类型。字符文本数据是分布在各个XMLElement之间的纯文本数据。XmlAttribute中的文本数据是不属于XML文本块的。

  XmlCDataSection 表示XML文档中CData节,CData数据是采用”<![CDATA[   ]]>”包括起来的纯文本数据。由于XML采用尖括号进行标记,因此具有和HTML类似的转义字符,在一般的XML纯文本段中若遇到尖括号等特殊字符时需要使用转义字符,当文本段中包含大量的这类特殊字符时,手工书写和察看XML文档将比较困难,为了改善XML文档的可读性,在此可以使用CDATA节。在CDATA节中,所有的字符,包括特殊字符都不需要转义,这样察看和修改XML文档都比较方便。

  XmlComment表示一段注释,XML注释和HTML注释一样,使用一对”<!--  -->”来包含起来。

  XmlText表示一段纯文本数据。

  XmlWhitespace表示XML文档中一段纯粹由空白字符组成的文本块,空白字符包括空格,制表符,换行和回车符,全角空格不属于空白字符。XmlDocument在解析XML文档时会处理空白字符,当XmlDocument对象的PreserveWhiitespace属性为true时,会为XML文档中的纯空白文本块生成XmlWhitespace对象,若该属性为false时,则会忽略掉纯空白文本,不会生成XmlWhitespace对象,好像原始的XML文档中不存在这样的空白文本块一样。

  其它处理模型

  除了流式处理模型和DOM处理模型外,还存在一些比较另类的使用比较少的处理模型,在此简单介绍一下

  DBDOM

  DBDOM是一种基于数据库的XML文档处理模型,它是一个开源项目。它采用大量的存储过程和数据库操作,将一个个XML元素,XML属性等信息保存到数据库的字段中。使用关系型数据库来模拟实现XML的树状结构。我对这个模型也不甚了解,只是知道大概的原理。

  BinaryXML

  DOM方式处理XML文档是需要消耗大量的内存的,在处理大型XML文档时,DOM方式会比较大的影响应用系统的性能的。为此有人开始提出BinaryXML的处理模型。在这个模型中,XML文档是当作二进制数据加载到内存中,然后解析文档,使用大量的指针来指向XML文档中的关键位置,通过指针可以快速定位XML文档,能修改XML文档,并能提供类似DOM的编程接口。这种方式能大大节省内存,所消耗的内存仅比XML文件大小稍微大些。但实际运行效果我也不清楚。

  XML对WEB开发的意义

  XML技术对WEB开发具有重大意义。若要开发高水平的WEB系统,应当好好使用XML技术。

  XML和HTML

  XML和HTML都源自SGML,具有相同的来源,而且两者都是采用尖括号的标记语言,两者具有很大的相似性。使用XML完全可以模拟出HTML,而且W3C提出了现代WEB站点应当采用的XHTML标准就是XML和HTML的结合。

  在使用ASP.NET开发WEB系统中,除了使用ASP.NET控件展示数据外,还需要由程序拼凑出大量的HTML代码来展现数据。简单的进行字符串连接操作来生成HTML页面不是一种可持续性的软件开发和维护的过程。程序代码很容易杂乱无章,生成的HTML代码可读性不好。若在生成HTML代码的过程借鉴XML技术则有助于改善这种问题,从而能更好的控制WEB软件的开发过程,提高软件质量。

  XML和WebService

  WebService基础就是XML,WebService的原理是将编程对象序列化成一个XML文档,然后通过HTTP协议传递给客户端,客户端接受这个XML文档,通过反序列化重现编程对象。因此WebService的基础就是XML序列化技术。在开发和调试稍微复杂的WebService是需要一定的XML技术基础。

  Ajax技术的底层也是使用XML来传递数据的,可以看作一种特殊的WebService。可以这样比喻,WebService是WEB系统的公开方法,而Ajax则是私有方法。

  XML/XSLT提供一种全新的开发模式

  XML/XSLT两项技术的配合可以提供一种全新的WEB系统开发模式。在这种模式下,页面将需要显示的纯粹的数据组织生成一个XML文档,并配上XSL转换信息头,然后发送到客户端,在客户端IE浏览器接受解析XML文档,根据其中的XSL转换头信息再下载XSLT文档,执行XSLT转换,然后才显示转换的结果。此时WEB页面既能正常的使用指定的格式显示数据,而且本身就是一个可供其它程序调用的WebService。该页面的输出的源代码就是XML文档,而且只有IE等浏览器类型软件才处理XSLT转换信息头,其他程序是会忽略掉这个信息的。此时页面具有双重功能,便于代码的集成开发和维护。

posted on 2009-04-09 15:58  bluesky_lcj  阅读(788)  评论(0编辑  收藏  举报