1、按一下以編輯母片標題樣式,按一下以編輯母片,第二層,第三層,第四層,第五層,第6章:Web服务体系结构,*,Web Services 体系结构,孟博,计算机科学学院,XML基础,Web Services 体系结构,主要内容,XML简介,XML设计目的,XML特点,XML文档逻辑结构,XML文档规则,XML schema,XML 应用接口,XML简介,XML是 Extensible Markup Language(可扩展标记语言)的简称,是一种元语言(定义其它语言的系统),1996年,W3C(World Wide Web Consortium,互联网联合组织)为了克服,HTML的局限性,在,S
2、GML,的基础上创建XML,计算机产业界的需求:开发简单而又可扩展的、,结构化,和半结构化信息文本表示机制,XML简介,HTML是SGML的一个应用,XML是SGML的一个子集,并且已经成为Internet上事实的数据交换标准,1998年2月推出第一个正式的XML1.0版本;目前XML已经以,扩展巴科斯-诺尔范式 EBNF,(Extended Backus-Naur Form notation)的形式正式定义了下来,独立于平台,的,XML,是为,Web,开发的,这是它将最具影响的地方,.,HTML的局限性,可扩展性差,HTML的标记集是固定的,即HTML语法是不可扩展的,缺乏对信息含义的描述能
3、力,信息检索效率低,HTML是针对,人机交流,而设计的,标记几乎全都是用来设计网页的布局和外观的。检索信息时,需要对全部页面的所有内容扫描,并且检索质量往往极差,与应用程序的数据自动交换受限制,服务器端在HTML中嵌入动态数据是非常困难的,客户端应用程序也很难自动从HTML中获取所需的数据,HTML的局限性,描述能力有限,HTML语言不能描述矢量图形、数学公式、化学符号等特殊对象,链接功能有限,链路丢失后不能自动纠正,HTML不能维持文档间的任何历史和关系,因此如果页面的URL地址变化了,浏览这些页面时就会遇到烦人的404 URL地址未找到的信息。,链接方式是纯单向的,虽然链接文档知道它要链接
4、到的地法,但被链接的文档却无法知道它是从何处被链接的,而这一点对于开发者往往是很重要的信息。,SGML简介,是,标准通用标记语言,(Standard Generalized Markup Language)的简称,,,是一种用标记(tag)来描述文档资料的国际标准通用语言,Web发明之前就存在了,是HTML和XML的基础。,SGML中包含了一系列的,文档类型定义,(简称,DTD,),用于定义标记的含义,因而它的语法是可以扩展的,优点,:,SGML的语义标记有助于计算机分类和索引,并且可扩展成处理新数据格式的各种方法,缺点,:,SGML十分庞大,不易学,不易用,在计算机上尤其是web上实现也十分
5、困难。SGML 也代表“听起来很棒,但或许以后会用(,S,ounds,G,reat,M,aybe,L,ater)”,XML设计目的,其设计目的:,使得在Web上以现有的HTML方式提供、接收和处理通用的SGML成为可能,W3C建议的XML 1.0中对XML设计目标:,(1)应该可以在Internet上直接使用,(2)应该广泛的支持不同的应用,(3)与SGML兼容,(4)处理XML的文档应该容易编写,(5)可选特征应该尽可能少,最好为0,(6)XML文件要易读,清晰,(7)XML应易于设计。,(8)XML的设计应该正式而且简洁,XML的设计目的,(9)XML文档应易于创建。,(10)XML标记的
6、简洁性较为次要,此外,还有两个隐含目标:,可扩充性,语义与表现形式的分离,一个XML例子,标记,是左尖括号()之间的文本。有,开始标记,(例如)和,结束标记,(例如),元素,是开始标记、结束标记以及位于二者之间的所有内容。在上面的样本中,元素包含三个子元素:、和。,属性,是一个元素的开始标记中的名称-值对,属性间用空白符号隔开。在该示例中,province 是 元素的属性;,Teacher,bo,meng,mengscuec,wuhan,XML的特点,可扩展性,XML是一种,元标记,语言,它定义了一组用来形成,语义标记,的规则集,用户可以构造自己的标记.,已有化学标记语言CML、数学标记语言M
7、athML等,对文档内容具有自描述能力,支持智能代码和智能搜索,XML是一种语义化的标记语言,具有,自描述性,.XML文档本身,仅,包含描述文档内容的标记,并不描述文档的外观格式,应用程序更容易定位文档中的信息,结构化数据表达能力,结构化的数据指的是其内容,意义或应用被标记的数据,通过文档类型定义,DTD,或XML,Schema,,XML指定文档中的元素以及元素之间的关系.,XML的特点,XML还提供了一种将多个数据源数据集成为单个文档的客户端包括机制,数据位置也可以重排,根据用户的操作,部分数据还可以被隐藏/显示,良好的通用数据格式,跨平台以及语言独立,XML 允诺成为交换数据和文档的标准机
8、制,ASCII文本,和一些人们普遍使用的格式来编写的,ASCII文件抵抗破坏的能力很强,是计算机领域中最通用的数据格式,并没有定义数据文件中数据出现的具体规范,而是在数据中附加tag来表达数据的逻辑结构和含义。这使XML成为一种跨平台程序能自动理解的规范,XML的特点,强大的超链接功能,XLL代表XML的链接语言,由用于链接的,XLinks,和用于定位文档中某部分的,Xpointers,的两部分组成,XLL支持可扩展的链接和多方向的链接。它打破了HTML只支持超级文本概念下最简单的链接限制,能支持独立于地址的域名、双向链路、环路、多个源的集合链接等。,文档的表示形式多样化,通过将结构,内容和表
9、现分离,同一个,XML,源文档只写一次,可以用不同的方法表现出来,。数据表示是由层叠样式表,CSS,或可扩展样式语言,XSL,来实现的,XML的特点,用户可以根据具体需要为同一个XML文件编写多个样式文件,为文档中的元素设计不同的显示/打印样式。这将使网络的用户界面更趋于个性化、风格化,降低了对服务端的要求,XML,没有,SGML,那么复杂,它是设计用于有限带宽的网络的,如,Internet.,服务器只须发出同一个XML文件,而由客户根据自己的需求选择和制作,不同的应用程序,以,处理数据,.服务端可以集中精力尽可能完善、准确地将数据封装进XML文件中,使广泛、通用的分布式计算成为可能,XML的
10、特点,目前的不足,在强调了数据结构的同时,语义表达能力上略显不足,XML的有些技术,尚未形成统一的标准,,充分支持XML的应用处理程序很少,由于XML是元置标语言,任何个人、公司和组织都可以利用它定义新的标准,这些,标准间的通信,成为了巨大的问题,XML1.0及其相关规范可以被分为两大部分:,核心层:,Ref:,包含文档结构,元素,属性,注释,实体等多个部分内容的规定,加上相关标准(Unicode,ISO/IEC 10646字符集,Internet RFC 1766语言识别标记,ISO 639语言名编码,ISO 3166国名编码等),给出了创建规范的XML文档所需要的一切,XML的描述和验证:
11、DTD(Document Type Definition,文档类型定义),本身不使用XML语法,任何进行有效性验证的解析器都可以通过使用DTD来验证XML文档的有效性,带有一定的局限性,XML 模式表达能力强,可以设定为下面几个值:,另一方面,由于应用程序不以任何方式存储数据,所以,使用 SAX 时,不可能对数据进行更改,或者“返回”至数据流中前面的数据。,使用 DOM 时,数据以类树结构被装入内存中。,0表达式,也可是使用类似于SQL查询的表达,W3C建议的XML 1.,这个单一元素称为根元素,它包含文档中所有文本和所有其它元素。,有一个子集为XSLT(用于转换的XSL),1998年2月推
12、出第一个正式的XML1.,xmlns:addr=,注释不是文档字符数据的一部分,XML处理器不对中间的文本进行解析,有开始标记(例如)和结束标记(例如),Schema(模式),可以对数据进行更详细的控制,可以使用工具将DTD转换为Schema,其他模式,XDR,:XML-Data Reduced.,SOX:,Schema for Object-oriented XML.,Ref:,www.w3.org/TR/NOTE-SOX,XML正则表达语言,RELAX NG,(REgular LAnguage description for XML(Next Generation),Ref:,XML正则表
13、达式,TREX,(Tree Regular Expressions for XML),Ref:,Schematron,:依赖规则而不是基于语法,Ref:,XML命名空间(Namespaces),为了防止共享词汇表的时候发生名字冲突,在单一文档中使用多个词汇表,一种复合命名方法,是其他XML技术如Schema或Infoset关键组成部分,它们与,XML,解析器共同构成,XML,处理的第一层,语法,描述和验证,命名空间,应用程序支持层:,XML信息集合(XML Infoset),为XML文档设计一个查阅文档的摘要方式,至少包含一条,文档信息项,和一条,元素信息项,,还可以包含,属性信息项,等。每条
14、信息项有一组属性,分为,核心属性,和,一般属性,。,Ref:,www.w3.org/TR/xml-infoset,XML定位与链接:,XML Base规范,设置XML文档的基本URI,XPath(XML路径语言),用于对XML数据对象的特定部分进行编址,其表达式使用了一种压缩的非XML语法,可以在URI和属性内部使用,提供了一种查询数据的简单方法,XPointer(XML指针语言),基于XPath表达式,并扩展了XPath:,提供在XML数据中任意的点和范围的相对位置的编址,XML数据内部的字符串匹配,用其找到的位置可以作为链接目标,XLink(XML链接语言),定义了一些特殊元素,可以在XM
15、L数据中使用,以创建资源间链接,可以不用改变文档的内容而描述指向不同的XML文档的链接,不仅指定了链接的数据结构,也定义了一个简单的链接行为模型,可以被高级应用层扩展,XInclude(XML包含),为XML的通用包含提供了过程模式和语法,XFI(文档片断交换),用于对XML数据段进行描述和传递,可以使查看和编辑XML文件时不用发送整个数据对象,也不用使用显式定义的外部实体,XQuery(XML查询语言),XQuery是一种新的查询语言提案,是用非XML语法表达的,可以使用XPath2.0表达式,也可是使用类似于SQL查询的表达,XML转换:,CSS(Cascading Style Sheet
16、层叠样式表),被设计用于使数据作为网页表示,还有许多媒体方面的扩展功能,可以使数据的描述和表示分开,是XSL的一个有用的补充,XSL(eXtensible Style Language可扩展样式语言),有一个子集为XSLT(用于转换的XSL),是一种描述性语言,只需要陈述一些规则即可自动调用模板,XSL-FO(Formated Object格式化对象),是一个XML词汇表,目标是将XML数据精确显示和打印,象HTML一样描述了详细的格式化规范,但是格式模型更加复杂,支持真正的国际化文本,可以认为它在布局信息方面具有与PostScript和PDF等同的能力,XML文档逻辑结构,XML文档基本组成
17、部分概览:,序言(可选),XML声明,例:,DTD声明,例:,主体:,元素,命名空间声明,例:xmlns=,标记,开始标记,结束标记,空标记,属性,XML文档逻辑结构,可出现在任何部分的其他可选内容:,注释(注释不能出现在XML声明之前),例:,处理指令,例:,空白,空格,回车符,换行符,制表符,XML文档规则-XML 文档分类,三种 XML 文档,无效文档,(Invalid),没有遵守 XML 规范定义的语法规则,开发人员已经在 DTD 或模式中定义了文档能够包含什么,而某个文档没有遵守那些规则,有效文档,(Valid),遵守 XML 语法规则也遵守在其 DTD 或模式中定义的规则,格式良好
18、的文档,(Well-Formed),满足XML规范的语法要求,XML文档规则-字符,标记和字符数据,XML文档,是纯文本,由,标记或字符数据,组成,标记,描述了实体的逻辑结构,包括,起始标记,和,结束标记,空元素标记,实体引用,字符引用,注释,CDATA段定界符,文档类型声明DTD,操作指令,其他所有非标记的文本组成文档的,字符数据,和,&,不能作为字符出现,在字符数据中,XML文档规则-字符,XML中合法的字符包括,制表符,回车,换行,Unicode,和,ISO/IEC 10646,中定义的合法的图形字符,命名字符,命名必须以有效命名头字母开始:,任何Unicode字母字符,_(下划线),:
19、冒号),后跟有效命名字母:,有效命名头字母,任何Unicode数字字符,-(连字符),.(句号,终止符),名字中不能包含空格,XML文档规则-字符,XML 规范定义了五个可以用来替代不同的特殊字符的实体:,代表小于符号,代表大于符号,代表一个双引号,代表一个单引号(或撇号),代表一个“与”符号。,This is&,lt;greeting>,;element,为XML文档设计一个查阅文档的摘要方式,17 Lin,XML信息集合(XML Infoset),01?XML version=1.,与应用程序的数据自动交换受限制,11,有且仅有一个称为根(root)或文档元素的元素,它不出现在其他任
20、何元素的内容中;,bo,org/TR/xhtml1/DTD/xhtml1-transitional.,XML文档实例(学生信息),XLink(XML链接语言),10 ,开发人员已经在 DTD 或模式中定义了文档能够包含什么,而某个文档没有遵守那些规则,XML 规范定义了五个可以用来替代不同的特殊字符的实体:,wuhan,Hello,&world!,xmlns:xml=,XML文档规则-声明,XML 声明,向,解析器,提供了关于文档的基本信息,建议使用,不是必需的。如果有的话,那么它一定是文档的第一项,声明包含,名称-值,对,version,encoding,是该文档所使用的字符集。如没有指定
21、encoding,XML 解析器会假定字符在 UTF-8 字符集中,这是一个几乎支持世界上所有语言的字符和象形文字的 Unicode 标准。,在XML声明中添加encoding=GB2312属性,就可以在XML中使用简体中文,XML文档规则-注释,注释,结束。注释不是文档字符数据的一部分,XML处理器,不对,中间的文本进行解析,注释不能在结束部分以外包含双连字符(-),;除此之外,注释可以包含任何内容。最重要的是,注释内的任何标记都被忽略;,不能出现在XML声明之前,XML声明绝对是文档的第一项内容,不能放在任何一个标记中,示例:,XML文档规则-根元素,根元素,XML 文档必须包含在,一个单
22、一元素,中。这个单一元素称为,根元素,,它包含文档中所有文本和所有其它元素。,一个XML文档只能有一个根元素!,一个无效XML文档,sound of silence green sleeve,XML文档规则-元素不能重叠,元素不能重叠,在 一个 元素a中开始了另一个元素b,则必须在 a 元素中结束 b 元素,一个无效XML文档,I really love,XML.,XML文档规则-结束标记,结束标记是必需的,尽管这在 HTML(以及某些情况下在 SGML)中可以接受,但 XML 解析器将拒绝它,一个无效XML文档,I am sailing,I am sailing Home again acr
23、oss the sea I am sailing stormy watersto be with you to be free,XML文档规则,元素内容,元素起始标记和结束标记之间的一切是元素的内容,内容类型,只含子元素,只包含正文的元素常常被称为含有“数据”内容,混合,嵌套元素和文本的组合,空内容,XML文档规则-空元素,空元素规定,如果一个元素根本,不包含内容,,则称为,空元素,;,在 XML 文档的空元素中,可以把结束斜杠放在开始标记中,空元素示例,以字符串“”结束,对文档内容具有自描述能力,支持智能代码和智能搜索,同一个标记不能包含相同名称的两个属性,XML Schema Part 0
24、Primer,SAX 解析器在解析开始的时候就开始发送事件。,wuhan,应用程序将如何部署?如果您的应用程序将要作为 Java applet 部署,那么您会希望使要下载的代码数量最小,别忘了 SAX 解析器比 DOM 解析器小。,类似于HTML中的pre元素,命名必须以有效命名头字母开始:,有一个子集为XSLT(用于转换的XSL),XPath(XML路径语言),XInclude(XML包含),文档实例对应的DTD(学生信息),使用 DOM 时,数据以类树结构被装入内存中。,20 ,XML文档规则-区分大小写,元素是区分大小写的,在 HTML 中,和 是相同的;在 XML 中,它们是不同的,
25、XML文档示例,Elements are case sensitive,Elements are case sensitive,XML文档规则-属性,属性必须有用引号括起的值,属性必须有值,那些值必须用引号括起,可以使用单引号,也可以使用双引号,但要始终保持一致,同一个标记不能包含相同名称的两个属性,如果属性值包含单引号或双引号,则可以使用另一种引号来括起该值(如 name=“Dougs car”),或使用实体 代表单引号。,示例(前者可以被html接受,而XML拒绝):,XML文档规则-属性,两个特殊属性:,xml:lang,指定文档内容和属性值所使用的语言,这对于像Web搜索引擎这样软件相
26、当有用,可以设定为下面几个值:,双字符的语言代码,ISO 639标准 如“,en,”代表英国,已经在IAIN(Internet Assigned Numbers Authority)注册的语言标识,这种标识具有前缀,i-,(或,I-,),自定义标志符,以,x-,或者,X-,开头,允许使用语言子码,在语言编码后加上段横线和子码。用来指定方言与区域性语言等。,XML文档规则-属性,使用语言子码示例,The,colour,is red,The color is red,XML文档规则-属性,xml:space,用于指定应用程序,对空白的处理方法,而不依赖于应用程序的隐含行为,类似于HTML中的pre
27、元素,两个有效值:,preserve:应用程序应该保留指定元素中的所有空白,default:依赖应用程序的隐含行为来处理,XML文档规则-处理指令,处理指令,处理指令是为使用一段特殊代码而设计的标记,进程指令以应用程序的名字(即进程指令所要执行的操作)开头,后面是该指令的数据。,示例:Cocoon 是来自 Apache 软件基金会(Apache Software Foundation)的 XML 处理框架。当 Cocoon 处理 XML 文档时,它会寻找以 cocoon-process 开头的处理指令,然后相应地处理 XML 文档。在该示例中,type=“sql”属性告诉 Cocoon:XML
28、 文档包含一个 SQL 语句。,XML文档规则-CDATA段,CDATA段,以字符串“,”结束,XML将保留CDATA段中的,字符数据不被解析,,这样CDATA段中包括的、&或“无需使用实体引用来转义,CDATA段中唯一禁用的文本是关闭CDATA的标记,CDATA段不能嵌套,XML文档规则-命名空间,命名空间,为了区分,相同名字代表的不同含义,的元素,要使用名称空间,您要定义一个,名称空间前缀,,然后将它映射至一个特殊字符串,名称空间定义中的字符串仅仅是字符串,,要确保其唯一性,!,Mrs.,Lord of the Rings,NC2948-388-1983,XML文档规则-命名空间,xmln
29、s,并没有限定,在根元素中使用,它可以存在于子元素中,冒号不能出现在名称空间前缀中,xml和xmlns不能作为名称空间前缀,Mrs.,Lord of the Rings,NC2948-388-1983,XML文档规则-小结,一个格式良好的XML文档必须满足以下,基本条件,包含一个或多个元素;,有且仅有一个称为根(root)或文档元素的元素,它不出现在其他任何元素的内容中;,非空元素的开始标记和结束标记必须匹配;,元素可以嵌套,但是不能交叉,即应符合,树型结构,;,文档中直接或间接引用的每一个已析实体都是,格式良好的,例子:,定义文档内容,两种方法定义数据元素:,文档类型定义(Document
30、Type Definition)或简称 DTD,XML Schema,XML Schema特点:,XML模式使用XML语法,XML模式支持数据类型,XML模式可扩展,XML 模式表达能力强,XML Schema规范,XML Schema Part 0:Primer,提供入门知识,解释模式是什么?如何建立模式?,XML Schema Part 1:Structures,定义XML文档结构模式,XML Schema Part 2:Datatypes,定义了一组简单类型,XML Schema结构文档,注释,声明,元素声明,属性声明,表示法声明,类型定义,简单类型,复杂类型,属性组,模型组,DTD,X
31、ML文档实例(学生信息),文档实例对应的DTD(学生信息),DTD特征,元素定义方式是(元素,内容模型),在定义元素的同时,指定元素内容模型,DTD缺点,DTD,有自己的特殊的语法,其本身不是,XML,文档,DTD,只提供了有限的数据类型,DTD,不支持名域机制,01 ,11,12 ,13 Lin,14 20,15 ,16 ,17 Lin,18 ,19,记录某班学生信息的XML文档实例,返回,2 ,学生信息XML文档实例对应的DTD,返回,Schema,XML文档的Schema(学生信息),Schema特征,Schema,使用(元素,类型)模式描述文档的结构,Schema优点,本身是,XML,
32、文档,内建丰富的数据类型;可以方便地定义数据类型,支持名域,(namespace),学生信息XML文档的Schema:,01,03 ,09 ,10 ,11 ,12 ,13 ,14 ,15 ,16 ,17 ,18 ,19 ,20 ,21 ,22,小结,Schema,通过类型定义和元素声明,描述,XML,文档的结构。,应用程序接口API,DOM(document Object Model),SAX(simple APIs for XML),文档对象模型DOM,文档对象模型(通常称为 DOM)为 XML 文档的已解析版本定义了一组接口。解析器读入,整个,文档,然后构建一个驻留内存的,树结构,,然后您
33、的代码就可以使用 DOM 接口来操作这个树结构。您可以遍历树以了解原始文档包含了什么,您可以删除树的几个部分,还可以重新排列树和添加新的分支,等等。,DOM 和基于树的处理,使用 DOM 时,数据以类树结构被装入内存中。,同一文档将被表示为节点,如左边所示。,矩形框表示元素节点,椭圆形表示文本节点。,DOM 使用根节点和父子关系。例如,在本例中,samples 将是带有五个子节点的根节点:三个文本节点(空白)和两个元素节点 server 和 monitor。,DOM 问题,DOM 构建整个文档驻留内存的树。如果文档很大,就会要求有极大的内存。,DOM 创建表示原始文档中每个东西的对象,包括元素
34、文本、属性和空格。如果您只需关注原始文档的一小部分,那么创建那些永远不被使用的对象是极其浪费的。,DOM 解析器必须在您的代码取得控制权之前读取整个文档。对于非常大的文档,这会引起显著的延迟。,这些仅仅是由文档对象模型的设计引起的问题;撇开这些问题,,DOM API 是解析 XML 文档非常有用的方法,。,用于 XML 的简单 API,SAX 解析器向您的代码发送事件,。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,它会告诉您。您可以决定什么事件对您重要,而且可以决定要创建什么类型的数据结构以保存来自这些事件的数据。如果您没有显式地保存来自某个事件的数据,它就被丢弃。,SAX
35、解析器根本不创建任何对象,,它只是将事件传递给您的应用程序。如果希望基于那些事件创建对象,这将由您来完成。,SAX 解析器在解析开始的时候就开始发送事件,。当解析器发现文档开始、元素开始和文本等时,代码会收到一个事件。您的应用程序可以立即开始生成结果;您不必一直等到整个文档被解析完毕。更妙的是,如果您只查找文档中某些内容,代码一旦找到所要找的东西就可以抛出一个异常。该异常会停止 SAX 解析器,然后代码用它找到的数据做它需要做的任何事。,SAX 处理是如何工作的,SAX 分析经过其的 XML 流,考虑以下 XML 代码片断:,UNIX,color,SAX 处理涉及以下几步:,创建事件处理程序。
36、创建 SAX 解析器。,将事件处理程序分配给解析器。,对文档进行解析,将每个事件发送给处理程序。,SAX 问题,这种处理的好处非常象流介质的好处;可以立即开始分析,而不是必须等待所有要处理的数据。同样,由于应用程序简单地检查经过其的数据,所以不需要将数据存储在内存里。当遇到大文档时,这是一个突出的优势。一般来讲,SAX 还比其替代物“文档对象模型”快。,另一方面,由于应用程序不以任何方式存储数据,所以,使用 SAX 时,,不可能,对数据进行更改,或者“返回”至数据流中前面的数据。,在 SAX 与 DOM 之间如何选择,选择 DOM 还是 SAX,这取决于几个因素:,应用程序的目的,:如果必须
37、对数据进行更改,并且作为 XML 将它输出,则在大多数情况下,使用 DOM。与使用 XSL 转换来完成的简单结构更改不一样,如果是对数据本身进行更改,则尤其应该使用 DOM。,数据的数量,:对于大文件,SAX 是更好的选择。,将如何使用数据,:如果实际上只使用一小部分数据,则使用 SAX 将数据抽取到应用程序中,这种方法更好些。另一方面,如果知道将需要向后引用已经处理过的信息,则 SAX 可能不是正确的选择,需要速度,:通常,SAX 实现比 DOM 实现快。,SAX 和 DOM,不是互斥的,,这一点很重要。可以使用 DOM 来创建事件的 SAX 流,可以使用 SAX 来创建 DOM 树。事实上
38、大多数解析器实际常常使用 SAX 来创建 DOM 树!,选择合适的API,要用 Java 编写应用程序吗?,JAXP 使用 DOM、SAX 和 JDOM;如果您用 Java 编写代码,那么您应使用 JAXP 将您的代码与各种解析器实现的细节隔离。,应用程序将如何部署?,如果您的应用程序将要作为 Java applet 部署,那么您会希望使要下载的代码数量最小,别忘了 SAX 解析器比 DOM 解析器小。还要知道使用 JDOM 时,除了 SAX 或 DOM 解析器之外还要求编写少量的代码。,一旦解析了 XML 文档,还需要多次访问那些数据吗?,如果您需要回过头来访问 XML 文件的已解析版本,
39、DOM 可能是正确的选择。而 SAX 事件被触发时,如果您以后需要它,则由您(开发人员)自己决定以某种方式保存它。如果您需要访问不曾保存的事件,则必须再次解析该文件。而 DOM 自动保存所有的数据。,选择合适的API,只需要 XML 源文件的少量内容吗?,如果您只需要 XML 源文件的少量内容,那么 SAX 可能是正确的选择。SAX 不会为源文件中的每个东西创建对象;您要确定什么是重要的。使用 SAX,您要检查每个事件以了解它是否与您的需要有关,然后相应地处理它。更妙的是,一旦找到您正在寻找的东西,您的代码就会抛出一个异常来完全停止 SAX 解析器。,您正在一台内存很少的机器上工作吗?,若是的话,不管您可能考虑到的其它因素是什么,SAX 是您的最佳选择。,Web Services体系结构,谢 谢!,






