java开发者xml基础,part 1
原作者:patrick niemeyer and jonathan knudsen
翻译:stone gump of matrix stonegump@163.com
这是learning java(第二版)一书中java开发者xml基础系列书摘的第一部分。
xml介绍
常常会出现这种情况,新思想产生之后,人们回过头来往往觉得其非常简单并且理所应当,以至于每个人都奇怪竟然以前不是这样。这种情况往往表明所谓的新思想毕竟不是真正的全新的思想。java这一革新性的语言就是吸取之前的所有程序语言的思想才得以出现的。就象java源于之前的程序语言一样,现在出现了xml——可扩展标记语言(the extensible markup language)。xml是一种方便人们描述数据的轻量语言。
xml为标记结构性信息如文本提供了一种简单而通用的格式。xml承继了html这一通用文本表示格式并将之推广,从而可处理任何类型的数据。在此过程中,xml不仅重铸了html并且正影响着商业业务关于其自身信息的考虑。在世界越来越被文档和数据交换驱策的情况下,xml时代来临了。
一点背景知识
xml和html之所以被称为标记语言(markup languages)是因为xml用象征结构和意义的标签来包裹文本部分,从而为纯文本文档添加结构信息,这一点和人们用钢笔来标识句子、添加注释很相似。然而html定义了一系列的标签和标签结构,而xml没有预先定义这些,xml的创建者可以定义标签、规则以及它们的含义。
xml和html都源自标准通用标记语言sgml。sgml(standard generalized markup language)是所有标记语言的始祖,在出版业(包括o'reilly)广泛应用多年。但是直到web通行,它才通过html流传开来。html起自sgml的一个小小应用,如果html无所不能的话,这说明简单胜过一切。
然而尽管html曾经颇为风行,但最终结果表明它还大有局限。使用html的文档把结构信息(如<head>和 <body>)和描述信息(举个尤其过分的例子:<blink>)不恰当地混在一起。这种把模型和用户界面搅在一块儿的方式对html作为数据交互格式带来了限制,因为计算机难以理解这种方式。xml文档完全由结构组成,应用含义取决于文档读者。本章我们将看到,有几种相关语言用于解释和转换xml以利于其显示和后续处理。
文本还是二进制
tim berners-lee二十世纪八十年代后期在欧洲粒子物理研究所(cern)开始试运行web时,他想用超文本组织规划信息。由于web需要一种协议,http——一种基于文本的简单客户端-服务器协议创建出来。纯文本方式到底有什么过人之处呢?比如说,tim为什么不采用微软的word格式做为web文档的基础呢?基于二进制的、人类不易阅读的格式和协议难道不是效率更高吗?既然从web诞生到现在有数以百万亿计的http事务,让它们用英文单词“get”和“post”,这真的个好主意吗?
答案是“是”,如我们现在看到的一样。开发人员显然更容易和人类可读的东西打交道。尽管可以在时间和空间上对其进行高度优化,但由于它已被普遍接受并且可轻易跨越多个平台,简单和透明显得更为重要。这是xml的首要基本原则。
通用解析器
使用文本交换数据不仅仅是一种新思想;从历史上看,必须为每个新文档格式写一个新的解析器。解析器是读取文档并能理解格式规则的应用程序,它常要求文档内容符合某些规则。比如,java中的properties类是专门处理标准属性文件格式(第十章)的解析器。在第十七章的简单电子制表程序中,我们构造了一个能理解基本数学表达式的解析器。我们看到,随着复杂度的增加,解析可能变得非常棘手。
xml状态
本章我们要讨论的api非常强大而且已经很好地测试过,如今它们已被广泛应用于企业级系统。遗憾的是,现在和java绑定的xml工具只能部分解除开发者的负担。
尽管我们已经从低级的字符串处理跨越到公共的结构化文档格式,但标准工具通常仍然要求开发人员编写低级代码来遍历文本内容,手工解析字符串数据。这样的程序难免有点不太稳定,而且其中的大部分工作单调乏味。下一步(下章我们将简要讨论)我们将使用生成工具读取xml文档描述(xml dtd或xml schema)并生成相应的java类,或者将已经存在的类自动绑定到xml数据上。
xml api
java1.4自带所有和xml协同工作的基本api,包括javax.xml标准扩展包,该包处理用于xml的简单api(simple api for xml,sax)和文档对象模型(document object model,dom)以及扩展的风格表单语言(extensible stylesheet language,xsl)转换。如果您使用的是java1.4之前的版本,您仍然可以使用所有这些工具,但您必须从http://java.sun.com/xml/.上下载各个相应程序包。
xml和web浏览器
微软公司的ie网页浏览器是第一个显式支持xml的浏览器。如果您在ie5.0或以上版本中载入xml文件,文件将使用特殊的样式菜单显示为一棵树的形式。通过使用动态html,该样式菜单允许查看文档的时候收缩和展开树节点。ie也支持在浏览器中直接进行基本的xsl转换。我们将在本章末些时候讨论xsl。
.netscape 6.x 和 最新的 mozilla也能理解xml内容并支持通过xsl显示文档。然而到本章写作的时候为止,它们缺省状况仍不能提供友好的阅读工具。您可以通过使用“查看源文件”选项来使xml以较好形式显示。但一般而言,如果您通过以上这些浏览器或其它不显式转换xml的浏览器加载xml文档,这些浏览器只是简单地显示剥除所有标签(结构信息)之后的文档文本。这是它们作用于xml的预定方式。
xml基础
xml的基本语法相当简单。如果您有html的相关经验,那您实际上对xml也有所了解。象html一样,xml将信息表示为使用标签添加结构的文本。标签以夹在小于号(<)和大于号(>)之间的名字开始。和html不同的是,xml的标签必须匹配。换言之,开始标签之后必须有相应的结束标签。结束标签很象开始标签,但它以小于号和斜杠(</)打头。开始标签、结束标签以及开始标签和结束标签之间的所有内容合起来被称为xml文档的元素(element)。元素中可以包含其它元素,但它们必须正确嵌套,所有元素内的开始标签必须在元素本身结束前用结束标签结束。元素可以包含纯文本和文本和元素的混合物。注释放置于标记“<!—”和“ -->”之间。下面是几个例子。
<!-- simple -->
<sentence>this is text.</sentence>
<!-- element -->
<paragraph><sentence>this is text.</sentence></paragraph>
<!-- mixed -->
<paragraph>
<sentence>this <verb>is</verb> text.</sentence>
</paragraph>
<!-- empty -->
<pagebreak></pagebreak>
<pagebreak/>
<document type="legal" id="42">...</document>
<image name="truffle.jpg"/>
<?xml version="1.0" encoding="utf-8"?>
<mydocument>
</mydocument>
entity
encodes
&
& (ampersand)
<
< (less than)
>
> (greater than)
"
" (quotation mark)
'
' (apostrophe)
<![cdata[ learning java, o'reilly & associates ]]>
<element xmlns="namespaceuri">
<body xmlns="http://funeral-procedures.org/">
<funeral xmlns:fun="http://funeral-procedures.org/">
<html><head></head><body>
<fun:body>corpse #42</fun:body>
</funeral>
<fun:funeral xmlns:fun="http://funeral-procedures.org/">
factory.setnamespaceaware(true);
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器