2023年7月28日发(作者:)
译 者 序
XML让Web应用程序焕然一新!
在开发者逐步趋向使用浏览器作为Web应用程序的通用客户端之后,浏览器所承担的任务的复杂性也在不断升级。与此同时,Web应用程序相对于传统专用客户端应用程序而言,其用户使用体验的不足也一直为人所诟病。基于浏览器的Web应用程序的发展一直面临着两方面的问题:一是如何使其更适合于实现更为复杂的较大规模的应用;二是如何给用户提供更好的使用体验。
在上述两个方面,XML都发挥了极其重要且不可替代的作用。在程序的结构方面,XML成功地扮演了“胶水”和“信使”的角色,这使程序的层次划分更为清晰而自然。这种结构层次的细化以及层次间耦合度的降低,使Web应用程序成功地进入了更广泛的应用领域,并显示了实现更为复杂的应用逻辑的强大能力。而在提高用户体验方面,由于各种基于XML的相关Web词汇的出现和应用,尤其是以XML为重要基础的Ajax技术和方法的日益普及,使浏览器表现出了毫不逊色于传统专用客户端的表现和交互能力。
可以肯定地说,今天的Web应用程序已经完全离不开XML。熟悉XML的概念和规则,并将其完美地应用于各种技术,已经成为对Web开发者非常重要的基本要求。本书对于XML的讲解全面而深入,并且收集了大量对开发工作非常有价值的资源。对于有志于从事Web开发的人们来说,本书既是一本优秀的XML教材,同时也是一本较全面的XML参考手册。
许劲松
2007年春
本章将介绍XML(可扩展标记语言),并解释它的一些基本概念。如果你对XML还比较陌生,这将是一个理想的起点。这里介绍的概念将在本书后续部分做更详细的阐述。 Web开发者往往对XHTML(可扩展超文本标记语言)很熟悉,但却经常搞不清它与XML的关系,也不清楚自己为什么需要同时学习XML。但是可以肯定的是,对于开发者来说,这两种技术都是重要的。
XML是用来编写其他语言(称为XML词汇)的元语言。XHTML是这些词汇中的一种,所以如果理解了XML,你也就能理解作为XHTML基础的一些规则。XHTML是遵循XML规则的HTML语言,后面我们将会介绍更多有关的内容。
XHTML有很多的局限性。虽然它擅长于组织Web浏览器中的信息并进行显示,但它的主要任务并不是对数据进行标记。XHTML无法提供一些高级功能,如不能对内容进行排序和过滤等。描述XHTML文档内容的标签不能自己进行定义。XHTML的标签是固定的,它们通常无法与其所包含内容的类型进行关联。例如,段落标签是可用于任何类型的内容的通用容器。
XML解决了这些HTML常见的局限性问题。它比HTML灵活性更高,因为它可以与其他一些支持表现、组织、转换和导航的标准一起工作。XML文档是自描述的,在它们的文档结构中可使用可描述的标签对其所标记的内容进行识别。
本章将更详细地讨论这些问题,对XML做更多的解释并说明为什么需要在你的工作中使用XML。本章将包含以下内容:
l XML的定义及其简史;
l 如何编写XML文档;
l 如何处理XML内容。
本章将首先介绍XML到底是什么,以及它适合于Web开发的哪些领域。
1.1 XML是什么
对XML第一点也是最重要的一点认识就是,它本身并不是一个编程语言,而是一个用于构造其他语言也就是所谓词汇的元语言。XML描述了创造这些词汇的规则。每种语言都互不相同,但都使用标签来标记内容。标签的名称和结构可自由选择。对于认同标准XML词汇的组织来说,这是通用的,这样他们就可对信息进行共享。 XML语言的一个例子就是XHTML。XHTML描述了一套标准的标签,这些标签只能以一种特定的方式使用。每个XHTML页面包含两个部分,分别使用
和标签描述。每个部分都只能包含特定的标签。例如,不能将标签置于部分中。世界各地的Web开发者都有一个共同的标准方法,这样浏览器就知道如何来呈现XHTML标签了。XML是W3C(万维网联盟)的推荐标准,这意味着它是可以免费使用的。W3C在它的术语表(/TR/DOM-Level-2-Core/)中提供了一个关于XML的更正式的定义,内容如下:
XML(可扩展标记语言)是SGML中的一个简单子集。它的目标是使通用的SGML可以如同当前的HTML一样,在网络上进行服务、接收和处理。XML设计得非常便于实现,且与SGML和HTML都具有互操作性。
1.1.1 XML简史
XML于1998年问世,它是基于SGML(标准通用标记语言)的。SGML是一个国际标准,可以将其理解为是定义其他文档标记语言的语言。HTML是基于SGML的。SGML最主要的问题是它难于使用,而XML的目标就是要变得更简单。
XML也从HTML中获益良多。HTML专注于内容的显示;你不能用它来完成诸如排序和过滤等更高级的功能。HTML不是一个非常精确的语言,它不区分大小写。即使不正确的HTML内容也可能被某个浏览器正确地进行显示。
XML纠正了HTML中的很多缺陷。1999年,HTML被使用XML语言构造规则改写为XHTML。XHTML文档的构造规则比HTML的要精确得多。这些规则的严格程度取决于在XHTML页面中所指定的文档类型声明(DOCTYPE)。第3章将对DOCTYPE进行更多的讨论。
从1998年起,XML已明显成为管理信息的一个强有力的方法。XML文档使数据易于共享。一系列相关的W3C推荐标准解决了在XML文档内进行转换、显示和导航的问题。第2章将会详细介绍这些推荐标准。
XML的要点总结如下:
l XML不是一个语言,它的规则用来构造其他语言; l XML创建了用来标记内容的基于标签的语言;
l XHTML是由XML创建的语言的一种,也是对HTML的重新构造;
l XML是基于SGML的。
1.1.2 XML的目标
SGML的异常复杂使W3C非常清楚地看到XML所要达到的目标。这些目标可参见/TR/REC-xml/#sec-origin-goals:
(1) XML应该在因特网上易用;
(2) XML应支持多种不同的应用;
(3) XML应与SGML兼容;
(4) 处理XML文档的程序应易于编写;
(5) XML中的可选特性将减到最小,理想状态为零;
(6) XML文档应是清晰、易读的;
(7) XML的设计应该比较快捷;
(8) XML的设计应该是形式化而精练的;
(9) XML文档应该易于创建;
(10) XML不追求标记的简洁。
这些目标中有几点值得注意。第一,W3C希望XML是非常简单的;实际上,好几个目标都包含了“容易”和“清晰”的含义。
第二,W3C赋予了XML两个目标:供人阅读和供XML处理程序处理。XML处理程序或者解析器是用来处理XML文档的软件包。处理程序可以识别XML文档的内容,也可以读、写或修改已存在的文档,或是直接创建新的文档。
其目的是通过保持开发的简单性来打开XML处理程序的市场。严格的构造规则意味着所需要进行的处理会比较少。因而也意味着XML文档可应用于移动设备,诸如手机和PDA。
通过使文档可供人阅读,你可以更方便地使用数据,也可以更容易地开发和调试应用程序。Unicode的应用程序开发者可以使用很多不同的语言创建XML文档。然而,其产生的问题是XML文档可能变得比较罗嗦,用XML来描述数据也会比采用其他方式更冗长。
Unicode
XML支持Unicode字符集以保证对多语言的支持。Unicode提供对231字符的支持。它包含了你可能需要的每一个字符,同时也有很多是你永远也用不上的。
可以使用8位Unicode转换格式(UTF-8)来编码Unicode字符,从而使得这些字符与它们在ASCII中的编码保持一致。显然,这提供了与老系统更好的兼容性。中文和日语这样的语言需要UTF-16编码。可以在中了解更多关于Unicode的内容。
第三,请注意术语XML文档(document)。这个术语的含义比传统意义上的物理文档更为丰富。一些XML文档以物理形式存在,但另一些是作为遵循XML构造规则的信息流的形式创建的。例如,Web 服务以及内容以XML形式返回的数据库调用结果。
在理解了XML是什么以后,现在来深入地研究XML语言的构造规则。
1.2 XML语法
XML语言使用标签来标记文本。作为Web开发者,你应该很熟悉标记文本的含义:
上面一行是XHTML,同时也是XML。在XHTML中,
标签表示一段文本。XHTML中的所有标签都有预先定义好的含义。
XML允许你创建自己的标签,因而你可以将原先的标记改写为:
在本例中,
1.2.1 合式的文档
XML文档如果满足下列条件就是合式的:
l 该文档包含一个或多个元素;
l 该文档只包含一个文档元素,用于包含其他元素;
l 每个元素都应正确地结束;
l 元素都是区分大小写的;
l 属性值都括于引号中并且不为空。
本章将讨论所有这些条件。现在有必要强调其中的一些要点。XML是区分大小写的,这就意味着
所有的XML标签都需要一个对应的以同样大小写书写的结束标签。因此
标签就添加一个段落。
在XML中,标签的顺序是重要的。最先开始的标签必须最后结束:
HTML页面没有这样的要求。下面的例子在HTML中是正确的,但是在XML中却是不可接受的:
在XML中,属性中的值总是用引号括起来的:
使用单引号或双引号都没有关系,但是必须使用引号。这在HTML中并不是必需的。同样地,一些HTML属性,例如
这种形式的标签书写方式在XML中是不行的。必须将它换成如下所示的样子:
1.2.2 标签和元素的不同
你可能已注意到,我在谈论XML文档时使用了标签(tag)和元素(element)这些术语。乍一看,它们似乎是可以互换的,但其实二者之间是有些不同的。
元素描述的是一个开始标签和一个结束标签以及其中的内容;而标签则是元素的一部分。标签以一个左尖括号开始,以一个右尖括号结束。元素通常包含开始标签和结束标签以及二者之间的内容。
下一行表示一个包含
在理解了构造规则后,下面认识一下完整的XML文档。
上一页 首页 下一页
1.3 查看完整的XML文档
一段完整的XML称为文档。不管是用于标记文本的XML,或者是从服务器端请求回来的信息,再或是从数据库返回的记录,所有这些都是文档。
每个XML文档都是由标记和字符数据组成的。总地来说,字符数据包含开始标签和结束标签之间的文本,其他的都是标记。而标记可以进一步划分为元素、属性、文本、实体、注释、CDATA和处理指令。 下面的文档列举了XML文档的不同组成部分。该文件和其他资源文件可以从Apress网站()的源代码区中下载。这个文档名为,它描述了一个小型DVD库的内容:
下面来浏览这个文档。首先,它由XML声明开始:
该声明是可选的,它包含一些属性,稍后会加以介绍。
这个XML文档还包含一个注释以说明它的用途:
这个注释是为所有阅读文档的读者提供的指南。对于XHTML来说,开发人员通常使用注释来添加一些说明。
文档元素(或称根元素)起名为
文档元素包含几个
文档节点
每个
通过标签的名字可以很容易地理解该文档的结构和内容。很显然,即使不用注释也能明白该文档描述的是一组DVD,而且也很容易推断出文档中各元素之间的关系。
1.3.1 XML文档的结构
每个XML文档都分为两个部分:序言(prolog)和文档元素(或称根元素)。序言出现在XML文档的顶部,其中包含关于该文档的一些信息。它有点像XHTML文档中的
部分。在上面的XML文档中,序言包含了一个XML声明和一个注释。它也可以包含其他的元素,如处理指令或是DTD(文档类型定义),详细内容可参见1.3.3节的“处理指令”和“DTD和XML模式”部分。合式的XML文档必须有一个文档元素用以包含可能有的其他内容。XML文档中的所有内容都应该出现在文档元素或根元素的内部。在XML文档示例中,文档元素就是
你可能对在XML文档中为元素所起的名字感到疑惑。在遵守XML命名规则的前提下,可以为元素和属性选择任何名字。
图1-1显示了XML文档的结构。 1.3.2 XML的命名规则
在XML文档中,元素、属性和一些其他结构是有名字的。名字是由一个起始字符加上名字字符组成。别忘了XML名字是区分大小写的。
起始字符必须是一个字母或下划线,不能是数字。而名字字符可以是除了空格和冒号以外的所有字符。冒号在XML中表示命名空间,所以不能将之用于名字中。第2章将更详细介绍命名空间。为了确保使用合法的字符,最好严格使用罗马字母(大小写均可)、数字和标点,冒号除外。
在自己书写而不是自动产生XML的内容时,最好采用标准的命名规范,而且应该使用具有描述性的名字。
我习惯以CamelCase方式命名并且以小写字母开始,除非在有些情况下元素名字通常就是大写的:
通常我会避免在名字中使用下划线字符,因为我觉得这会让名字更难读。 使用具有描述性的名字可以使人更易于理解。想像一下读到下面内容时你会遇到的困惑:
下面来总结一下XML的命名规则:
l XML名字不能以数字或标点符号开头;
l XML名字不能包含空格;
l 如果不是表示命名空间,就不要在名字中包含冒号;
l XML名字是区分大小写的。
下面将更详细地描述XML文档的内容。首先从可能出现在序言中的元素开始。
1.3.3 XML文档序言
XML文档的序言里包含了关于文档本身的元信息,而不是文档的内容。它可能包含XML声明、处理指令、注释以及嵌入的DTD或模式。
1.XML声明
XML文档通常都以一个XML声明开始,虽然这并不是必需的:
在XML文档中,包含一个声明是好的做法,因为它可以告诉应用程序或人随后的是一段XML内容。它还能向处理程序提供关于该文档的额外信息,比如它的字符编码类型。
如果在XML中包含声明,就必须将它置于文档的第一行。任何内容都不能放在XML声明前面,空格也不行。如果你不小心在声明前面放了一个空格,XML处理程序就将无法正确解析文档的内容,并且会产生错误消息。
XML声明中还可以包含一些属性,这些属性提供关于版本、编码以及文档是否独立的信息:
在本书的写作期间,XML的最新版本是1.1。然而,很多处理程序还不支持这个版本,所以最好还是坚持将版本声明为1.0以保持向后兼容。 声明中的encoding属性描述的是XML文档的字符集。如果没有包含encoding属性,则文档会被认为使用UTF-8编码。
声明中的standalone属性的值只能为yes或no。这个值表示要正确处理当前的文档是否还需要外部文件。
XML声明中的每个属性都是可选的,但是它们的顺序很重要。如果需要包含encoding属性,那它必须出现在version属性的后面。而standalone属性只能是声明中的最后一个属性。
2.处理指令
序言中还可包含处理指令(processing instruction,PI),它们将关于XML文档的信息传递给其他应用程序。XML处理程序并不处理PI,而是将它们原封不动地传递给应用程序。
PI以结束。它们通常会在序言中出现,虽然它们也可出现在XML文档内的其他地方。
注解 XML声明也以
下面的PI指定了一个到XSL样式表的引用:
PI中的第一项是一个名字,称为PI目标。上面的PI的名字是xml-stylesheet。以xml开头的名字被保留为XML专用PI的名字。这个PI还有一段文本字符type="text/xsl" href= ""。虽然看起来像是两个属性,但是这段内容却并不是这么处理的。在第6章和第7章中还会有更多样式表PI的例子。
3.注释
注释几乎可以出现在XML文档的任何地方。上面的XML文档例子中在序言里包含了一段注释,所以我们在了解其他序言内容时也看一看注释。
XML注释看起来与XHTML注释一样。它们以结束:
注释并不影响XML文档的处理,通常是为了便于阅读和理解的。在添加注释时需要遵循以下规则:
l 注释里不能包含文本-->;
l 注释不能包含于标签内部;
l 元素中的开始标签或结束标签不能被注释掉;
l 虽然大多数XML处理程序都会把注释传递给应用程序,但并不一定必须这么做。
4.DTD和XML模式
DTD和XML模式提供关于XML文档内的元素和属性如何出现的规则。也就是说,它们确定哪些元素和属性是有效的,哪些是必需的或可选的。
序言中可以包含关于XML文档的声明,也可以包含一个到外部DTD或模式的引用,或是两者都包括。第2章将详细介绍DTD和模式。
1.3.4 XML文档元素中的段
XML文档中的数据存储在文档元素或根元素内。这个元素包含文档中的所有其他的元素、属性、文本和CDATA,同时也可包含实体和注释。
1.元素
在XML文档中,元素有很多作用,它们
l 可以标记内容;
l 为它们标记的内容提供一些描述;
l 为数据的顺序和相对重要性提供信息;
l 展示数据之间的关系。
元素包括一个开始标签、一个结束标签和内容。内容可以是文本、子元素或是二者都有。元素的开始标签中也可包含属性。在元素内部可以放置注释。
在前面的例子中,可以看到
开始标签
在前面说过,必须按照正确的顺序打开和关闭标签。下面的写法是错误的:
一共有四类元素:
l 空元素;
l 仅含文本的元素;
l 仅含子元素的元素;
l 含子元素、文本或混合元素的元素。
第2章关于XML模式的内容将介绍区分这些不同类型的元素是多么重要。
q 空元素
如果元素中不包含任何文本,那么它就是个空元素,可以以两种方式书写。下列两段代码是完全相同的:
第二行的标签使用一种省略的写法,即在结束标签的尖括号前面加上一个正斜杠。XHTML中
标签也是空元素的一个例子。使用空元素写法可以减小文件的大小并使文档更清晰易读。
q 仅含文本的元素
有些元素仅含文本内容。从前面的例子中可以看到,
q 含其他元素的元素
一个元素可以仅包含其他的元素。容器元素称为父(parent),被包含的元素称为子(child)。
q 混合元素
混合元素既含有文本也含有子元素。上面DVD的例子并没有包含这种类型的元素。下面的代码片段显示了一个混合元素:
综上所述,元素有以下条件:
l 元素必须含有开始标签和结束标签。在没有内容的情况下,才可以使用省略写法;
l 标签名称必须符合XML命名规则;
l 元素必须正确地嵌套。
2.属性
在XML文档中,提供信息的另一种方法就是在元素的开始标签中使用属性。属性通常为它们所修饰的元素提供额外的信息。一个元素中可以出现的属性的数量是没有限制的。
属性由名称/值对组成,其中值是包含于单引号或双引号中的:
属性为元素提供额外的信息:
在这个例子中,数据Introduction to XML封装在
元素内部。此元素告诉Web浏览器另起一段显示信息。而style属性提供了如何显示数据的额外信息。这里是告诉浏览器将文本置中。
属性的两种通常用法是转换信息格式和指定特定的格式或编码。例如,可以这样转换日期格式: 或者指出使用国际标准化组织(ISO)的日期格式,如下所示:
当元素包含属性时,常称为复合类型(complex type)元素。后面将会看到,这在书写XML模式文档时是很重要的。
在同一个元素内,可以为不同的属性分别使用双引号或单引号,如:
请注意,不要在同一个属性中分别使用单引号和双引号,否则文档就不是合式的了。
注意 从文字处理文档中剪切属性粘贴到XML文档中时要十分小心。文字处理软件通常使用小引号,而这会在XML文档中引起错误。
还可以将属性改写为嵌套的子元素。例如
可改写为:
关于哪种写法更好并没有一个明确的规则。两种写法都是可接受的。
现在总结一下与属性相关的规则:
l 属性由名称/值对组成;
l 属性值必须封装在单引号或双引号中;
l 属性中不能含有XML标签;
l 属性名称必须遵循XML命名规则。
3.文本 所有XML文档内部的文本都包含于开始标签和结束标签内部。除非该文本被标记为CDATA,那么它将会被认为是XML,从而做相应的处理。也就是说,左尖括号会被认为是某个XML标签的一部分。
如果希望在文本中使用保留的字符,那么必须将它们写为字符实体。例如,可以将左尖括号<写作<。保留字符也可以嵌入到CDATA中。
4.CDATA段
CDATA可以对文本块进行标记,这样它们就不会被当作XML进行处理。前面曾提到过,这对于包含XML保留字符的文本来说是非常有用的。
此CDATA段以
CDATA段可用于在XML文档中嵌入代码,如JavaScript代码,或者加入不需要处理的内容。例如,当一个应用程序从数据库里读取数据并且将它标记在XML文档中时,它可能将所有的内容都嵌入到CDATA段中,以避免对那些保留字一个一个地进行处理。第3章会介绍一个关于JavaScript的使用CDATA的例子。
5.实体
字符实体是表示单一字符的符号。在XHTML中,字符实体被用于表示一些特殊的符号,如与号&(&)和不间断空格( )。
在XML文档中,可以用字符实体替代保留字符。因为所有的标签都以左尖括号开始,所以在一个元素的文本中是无法包含这个字符的:
如果需要处理这个元素,文本25前面的左尖括号就会引起一个处理错误。这种情况下,应该以实体<来替代这个符号,如:
以下这些保留符号是需要注意的:
l <,表明一个标签的开始; l &,表明一个实体的第一个字符;
l xml,保留为用于对XML语言其他部分的引用,如xml-stylesheet。
表1-1总结了常用的字符实体。
表1-1 XML文档中使用的字符实体
字 符
&
'
>
<
"
实 体
&
'
>
<
"
有时一些字符是不能加入到XML文档中的,也许因为这些字符不在键盘上或者它是图形字符。在这种情况下,可以使用Unicode或十六进制数字将它们以字符实体的形式加入。比如,可以将版权符号ã编码成©或©。
以开始并以分号结束的引用都是字符引用。中间的数字是所需字符的Unicode编码。如果编码写成十六进制形式,那么它的前面有一个x作为前缀。
实体也可以自己定义。比如,可以将Copyright 2006 Apress定义为©right;。每次需要在XML文档中包含这段文字时,都可以使用实体引用©right;。这使文本更容易管理和更新。
现在继续了解XML文档的处理。
1.4 XML的处理模型
XML推荐标准假设XML文档是以一种特定方式处理的。下面这个模型说明XML处理程序将XML文档的内容和结构都传递给应用程序。XML处理程序通常也称为XML解析器,因为它们对XML文档进行解析,如图1-2所示。 图1-2 XML文档处理模型
常见的XML处理程序有微软的XML Parser(MSXML)、Apache Xerces2和Oracle XML parser,可以在应用程序中使用任意一种。一些XML解析器也可以以软件包的形式自动安装。用于在Web浏览器中显示XML的XSLT(可扩展样式表语言转换)处理器就是这种类型。MSXML包含了XML解析器和XSLT处理器,它即是一个XML处理器也是一个应用程序。它随IE和其他微软的软件一起自动安装。
1.4.1 XML处理方式
XML有两种处理方式:基于树的和基于事件的。很多XML解析器,包括MSXML的最新版本,对两种模型都支持。基于树的解析器通常也称为DOM(文档对象模型)解析器,而基于事件的解析器通常被称为SAX(XML简单应用编程接口)解析器。二者都是以它们支持的规则命名的。
DOM是W3C推荐的XML文档应用编程接口(API)的标准。所有的应用程序都可以使用这个API来操作XML、读取信息、添加节点以及编辑当前的内容。关于这个推荐标准可以在/TR/REC-DOM-Level-1/中了解到更多内容。
SAX并不是W3C的推荐标准,但也得到了大大小小软件公司的支持。基于SAX的解析器顺序地读取XML文档,当它遇到文档中的重要部分时会触发事件,比如在元素的起始或结束位置。在/中可以了解到其更多内容。 1.4.2 DOM解析
图1-3表示的是前面所述文档的树型结构。
以这种方式显示文档进一步强调了在族谱中元素之间的关系。
图1-3 以树型结构显示的文档
DOM解析允许通过编程语言或是脚本语言(如JavaScript)访问这些元素以及它们的值,还可访问文档中的所有其他部分。
1.4.3 SAX解析
基于SAX的解析器以一串事件的形式展现XML文档。必须对每个事件编写处理程序,这样当事件触发处理程序时会产生相应的结果。
这种形式的解析对于有良好事件处理机制的语言非常适用。例如,SAX解析在Java中很常用。它对于网络上经常采用的脚本语言不太适用,因此这里就不详细讨论了。
1.4.4 为什么有两种处理模型
两种处理模型都有其优点。基于DOM的解析提供了对XML文档的完整的读写访问,并且可以通过遍历文档树对文档内的节点进行访问。它还可以对照DTD或XML模式来判断一个文档是否有效。 然而,基于DOM的解析必须将XML文档整个读入内存中,所以当遇到较大的XML文档时,DOM解析可能会变得较慢而且比较消耗内存。很难准确判断何种XML文档才是过大的,因为处理时间会根据处理能力、内存、可用时间以及是否在单用户或多用户环境下工作(比如Web服务器)而变化。一般而言,大多数系统可以处理大至几十兆的文件,但是对于更大的文件就需要十分小心了。
另一方面,基于SAX的模型是串行操作的。一个节点被处理后就被丢弃了,并且不会再被处理。整个文档并不一次性地读入内存,这样就避免了由较大的XML文档而引起的处理问题。这种处理方法将由用户负责保存XML文档中的可供后续使用的信息。
举例来说,对于一个通信系统的中间路由程序来说,SAX是理想的。一个读入的XML文档通常只有一个很小的路由首部信息,但却有需要发送到终点的较大文档。使用SAX模型时,路由设备可以仅读取路由信息而忽略掉整个文档,因为文档与传送并无关系。然而,基于DOM的解析器却需要在读取整个文档后才可以将之传送到终点。
1.5 一些XML工具
开发者通常都希望了解有哪些工具可以用于操作XML文档。可用的工具有很多,有免费的也有需要购买的,这里不可能将它们都汇总起来。对工具的选择可能更取决于个人的喜好。
总地来说,XML开发工具分为几类:
l 现有编程IDE的扩展;
l XML专用的IDE;
l 独立工具。
诸如Microsoft Visual Studio(/vstudio/)的开发工具就属于第一类。它们有专门针对开发者的对XML的良好支持。在本书写作时,它的最新版本是Visual Studio 2005,主要具有以下特性:
l 它可以帮助建立和编辑XML文档,并且可以检查文档是否是合式的; l 提供对XML模式的支持,包括可以从文档实例、文档有效性和DTD中推导模式;
l 提供对XSLT的支持,包括可以查看转换的结果。
专用的XML IDE大多具有相似的基础功能,而在支持程度和用户界面上差别较大。大多数这些工具都有一个XML编辑器、用于创建DTD和XML模式的工具以及对XSLT开发的支持。这样的工具有不少,以下是其中常见的一小部分:
l Altova的XML组件:/;
l TIBCO Software的XML工具组件:/software/business_integration/xml_ ;
l DataDirect Technology的Stylus Studio:/。
上面提到的这些组件大多都包含编辑XML文档的工具。其中有:
l Altova的XMLSpy:/products_;
l Blast Radius 的XMetal:/index.x?products/xmetal/;
l SyncRO Soft的
除此之外,还有很多非常好的工具。你可以在因特网上搜索,也可以加入到一些邮件列表中,比如XML-DEV(/xml/xmldev/shtml)。
1.6 小结
本章介绍了一些与XML相关的基本概念,对某些语法做了较详细的讲解,演示了XML给Web开发者带来的好处,还介绍了一些用于XML文档的工具。
第2章会介绍一些相关的XML推荐标准,以及如何使用DTD和XML模式。另外,还会简单介绍一下XSLT、XPath、XLinks和XPointer。
上一章介绍了XML文档及其构造规则。XML是万维网联盟(W3C)制订的一系列相关推荐标准中的一个。本章将介绍在开发XML应用程序时可能会用到的一些推荐标准。具体而言包括:
l 命名空间在XML中的作用;
l 使用DTD和XML模式来定义XML词汇;
l 使用XSLT显示XML; l 使用XPath在XML文档中导航;
l 使用XLink和XPointer链接到XML文档。
本章使用的文件可以从Apress网站()的源代码区下载。现在,首先看看使用XML文档时命名空间的重要性。
2.1 XML命名空间的作用
XML文档可以创建自定义的元素和属性词汇来描述数据。当XML文档较为复杂或是需要从别的地方取得内容时,一个文档中有可能会需要不止一个词汇,这样就会产生名称相同而含义不同的元素出现在不同词汇中的情况。
例如,如果需要建立一个含有XHTML信息的家具目录:
在这个XML文档中,同样名为
如果希望体验一下XSLT的强大功能,可以试着自己修改样式表来改变排序方式,也可以对内容进行过滤以显示特定的记录。这些都将在第6章和第7章中介绍。
2.XSLT小结
本节介绍了XSLT的一些功能,以下要点是需要牢记的:
l CSS根据文档树的当前结构对XML文档添加样式。这种形式称为推模型;
l XSLT可以将源XML文档转换成可序列化为XML、HTML或文本的任意合式的XML文档;
l XSLT样式表可以产生与源树顺序不同的结果树;
l XSLT可以在转换的过程中添加文本和标记; l XSLT是基于模板的,因此它主要是声明性语言;
l XSLT可以进一步应用XPath定位源树中的节点。
这里讨论XSLT时涉及了XPath,因此有必要对之稍微详细地予以进一步讨论。
2.4 XPath
前面提到,XSLT样式表在定位源XML文档树的特定部分时很大程度上要依赖于XPath的使用。一些其他的推荐标准,如XPointer,也依赖于XPath规范,因此有必要先对其进行基本的了解。重要的一点是,XPath并不使用XML规则来构造表达式。
使用XPath时要根据XML文档树编写相应的表达式。对一个文档使用XPath会得到以下几种结果:
l 一个单独的节点;
l 一组节点;
l 一个布尔值;
l 一个浮点数;
l 一个字符串。
XPath表达式不能在文档中定位XML声明,因为XML声明不是文档树的一部分。它们也不能定位嵌入的DTD声明或CDATA块。
XPath将XML文档看作由节点构成的层次树。每棵树包括:
l 元素节点;
l 属性节点;
l 文本节点;
l 处理指令;
l 注释;
l 命名空间。
根节点是XML文档树的起始点,并且在XML文档中只有一个根节点。XML文档本身就是树中的一个节点,它也是根节点的一个子节点。根节点还包括位于文
发布者:admin,转转请注明出处:http://www.yc00.com/web/1690510710a361594.html
评论列表(0条)