8 August 2005
中级
如果已经安装了 Dreamweaver MX 2004 或更高版本,则您可以执行本文中的示例,或者也可以只阅读这些示例。您也可以使用任何其它文本编辑器来使用这些示例。但是,其它文本编辑器不包括 Dreamweaver 提供的本机 XML 支持。
无论是您的团队所承包的项目需要使用 XML,还是您想简单了解这种技术,您都可以通过本文章获得 XML 基础知识的简介。许多公司已经开始使用 XML 作为交换数据的方法。政府已将 XML 作为标准的数据交换格式,学会如何使用 XML 也正在成为对 Web 开发人员的要求。因此,您应该学习 XML 并提高您的技能。另外,近期将要发布的 Macromedia Dreamweaver 8 完全支持创建和编辑 XML 和 XSL 文档,您可以使用该工具执行客户端和服务器端的 XSL 转换。在本文中,我将为您介绍 XML,以使您可以在 Dreamweaver 8 产品推出后立刻开始使用。我将首先解释这项技术及其优缺点,并提供一些示例,用来说明在什么情况下使用它以及如何使用它。
现在,您可能已经知道 XML 是指可扩展标记语言 (EXtensible Markup Language)。与 HTML 类似,它也是一种使用标签的标记语言。但是它有何功能?您的客户为何要求使用它?其实 XML 并不能完成所有的工作。它只是简单地描述信息,并以独立于平台的格式进行分发。
由于不需要使用任何一种特定的语言,因此 XML 与平台无关。XML 标签不是预定义的,这意味着您可以编写自己的标签。随之带来的好处是 XML 只需要进行自我描述。
无论相信与否,您一直在使用 XML,只是没有注意到它。您直接在电子邮件客户端中阅读新闻标题时,或从移动电话访问 Web 页时,实际上正在使用着基于 XML 的技术。
首先,XML 不是 HTML 的替代者,它的用途完全不同。XML 旨在用来描述、存储和交换数据,而 HTML 则是用于以人可直接阅读的格式显示数据。HTML 使用一组固定的、预定义的元素(通常称为标签和属性)来定义文档的可视外观(例如页面布局、文本格式)以及加入文档或图像的链接。在 HTML 中,您只能使用这个有限的标签集,因此可显示的信息类型也是有限的。例如,使用 HTML 显示数学公式可能会很麻烦。而 XML 通过其可扩展性解决了此类问题:您可以“发明”您自己的标签和您自己的文档结构。您可以任意添加和删除元素,而不会影响整个文档结构。
<department>
<employee>
<name>John Doe</name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
<employee>
<name>Jane Fletcher</name>
<job>Designer</job>
<salary>2500</salary>
</employee>
</department>
您可以尝试在 Dreamweaver 中将此文本键入或复制到一个新的 XML 文档内,然后在浏览器中预览。要在 Dreamweaver MX 2004 中创建新的 XML 文档,请单击“文件”菜单,然后选择“新建”。在“新建文档”窗口中,选择“基本页”类别,然后从基本页列表中选择“XML”。
然后,单击“创建”按钮。Dreamweaver 将创建一个包括一行文字的文档,其中的内容与下面的内容类似:
<?xml version="1.0" encoding="iso-8859-1"?>
这是 XML 声明,在每个 XML 文档的开始处必须包含这段声明。它指定文档中使用的 XML 的版本和字符集。
在新 XML 文档第一行文本的后面键入上例中的文本。请注意,Dreamweaver 本身支持 XML 文档的语法颜色:
备注:大多数浏览器都默认支持 XML。要了解不同的浏览器显示和处理 XML 文档的方式,请访问 W3Schools 网站的此页。
单击每个标签旁的减号将折叠该元素。要展开某个元素,请单击该元素旁的加号。
同一个例子如果用 HTML 编写,则代码如下所示:
<table>
<tr>
<td>John Doe</td>
<td>Software Analyst</td>
<td>2000</td>
</tr>
<tr>
<td>Jane Fletcher</td>
<td>Designer</td>
<td>2500</td>
</tr>
</table>
如果在浏览器中加载该页,它看起来就像是传统的 HTML 表(为了便于查看,我添加了边框)。
上例中的标签是特别为描述公司雇员的信息而设计的。通过比较两个示例,您可以清楚地看出 XML 是内容驱动的,而 HTML 是格式驱动的。XML 标签名描述的是标签中的数据,而 HTML 标签描述的是标签中数据的表示方式。
上例说明了 XML 和 HTML 之间的某些主要区别。但是,您应该注意到 XML 不是作为 HTML 的替代者而设计的,并不是每个 XML 文档都可以转换为 HTML 文档。
到目前为止,事情看起来有一些琢磨不透,因为您需要理解所有这些新的术语。虽然 XHTML 不在本文的讨论范围之内,我也对它进行一下简要的介绍,以便更清楚地说明问题。
XHTML 是指可扩展超文本标记语言 Extensible Hyper Text Markup Language ,它是更为完善的基于 XML 的 HTML 版本。它是 HTML 的 更为严格的规范,是为最终替代 HTML 而设计的。XHTML 的大多数标签与 HTML 相同,但是为符合 XML 的语法规则而被重新编写,本文的后面将对其进行详细介绍。
因为 XML 存储并描述数据,因此它与数据库功能类似。您可能已经听说了与 XML 相关的术语“架构”或“查询语言”。XML 与典型的 DBMS(数据库管理系统)有何不同之处?
首先,XML 是可移植的。数据库需要依赖于在设计这些数据库时所针对的特定数据库语言才能被正确解释,而 XML 在其标签中就承载了它的意义。XML 是自描述语言,这表示它承载数据的结构及其语义,而数据库却仅仅定义数据的结构。
而且,正如上一部分中所看到的,XML 可以分层树形式显示数据。例如,在该 XML 树中,<employee> 元素是作为 <department> 元素的子元素而嵌入的。
当然,与数据库相比,XML 也有其缺点,但是这是正常的,因为它们是为了不同的目的而设计的。最明显的缺点是,XML 缺少了数据库特有的功能,例如触发器、多用户访问、有效存储、索引、安全、事务、数据完整性检查或跨文档查询。这是很正常的,因为 DBMS 设计用于以快捷和安全的方式处理、存储和检索数据,而 XML 则是设计用于跨平台交换数据。
因此,在 XML 文档中执行搜索的速度也很慢,这是因为缺少数据库中常有的索引和搜索优化功能。
而且,XML 更冗长,因为它需要为每个数据项添加一对标签和/或属性。
虽然,以数据为中心/以文档为中心进行划分已经有些过时了,但是对于了解 XML 技术背后的 XML 基本原理以及主要概念却是非常重要的。
下一部分将介绍 XML 的一些优缺点,并对适合使用 XML 的实际情况进行详细描述。
为了弄清楚应该在什么情况下使用 XML,您应记住它的主要优点。先前我简要介绍了它的某些优点。本部分将深入介绍 XML 区别于其它标记语言或类似技术的优点。
使用 XML 时,经常会有人忘记 X 表示“可扩展性”。可扩展性意味着您可以定义任意数量的附加标签,却不会破坏应用程序。例如,您可以为下面的元素添加子元素:
<employee>
<name>John Doe</name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
完成后的效果如下所示:
<employee>
<name>John Doe</name>
<job>Software Analyst
<responsibility>Write technical specifications</responsibility>
<responsibility>Translate client requirements into software requirements</responsibility>
</job>
<hire_date>Jun 25, 2005</hire_date>
<salary>2000</salary>
</employee>
读取此 XML 文档的应用程序仍然会知道所指的雇员。
可移植性在于您可以定义标签和属性。“读取”XML 文档无需特殊的库或应用程序服务器(尽管需要将开发环境配置为支持 XML,原因会在以后的文章中解释)。XML 文档是纯文本文件,因此不需要专用的软件对其进行解释,这一点与大多数二进制文件不同。这意味着您可以使用记事本程序打开和编辑 XML 文件。
因此,当需要在几种(不兼容的)硬件或软件平台或应用程序之间交换信息时,可以选择使用 XML。它促进了 XML 在通讯技术领域内的一些应用,包括常用的 WML(无线标记语言)和 WAP(无线应用协议)。WML 是一种基于 XML 的语言,用于标记诸如电话或 PDA 等手持设备的 Internet 应用程序。要了解有关 WML 的更多信息,请阅读 W3 联盟的此教程。
可移植性也经常用于企业对企业 B2B 应用程序,许多公司需要以独立于平台的方式交换大量的财务信息。不同的应用程序可以使用一种流行的基于 XML 的协议 SOAP(简单对象访问协议)通过 Internet 交换此类信息。这些基于 XML 的信息共享应用程序称为 Web 服务。
使用 XML 可以降低内容冗余的风险。您的客户端将会继续使用 HTML 和 CSS 来定义布局和表现形式,它不会受到对单独存储于 XML 文件中的底层信息所作更改的影响。
例如,内容管理系统可能为最终用户提供不同格式的文档:HTML、PDF 等。但是,没有必要为每种格式存储该文档的一个单独版本。否则内容就会出现重复并占用宝贵的磁盘空间,从而导致 CMS 充塞着多余的信息并降低使用速度。使用基于 XML 的引擎,内容可以只存储一次,然后按所需的格式提取和显示。
任何处理或格式设置要求都应该由单独的 XSL(可扩展样式表语言)文档进行处理。XSL 样式表用于指定包含在 XML 文件中的数据的表示方法。在输出时 XML 和 XSL 将结合起来,以便将所需的格式应用于数据,其方式和使用层叠样式表 CSS 定义 HTML 样式的方式相同。
我将在下一篇文章中详细讨论 XSL,并将介绍如何同时使用 XSL 和 XML 以使您的应用程序生成具有特定格式的输出。Dreamweaver 8 使您能够以快速的可视化方法为自定义的 XML 文件创建您自己的 XSL 样式表。您将会了解到,在站点中导入 RSS 源以及为访问者提供最新的新闻或更新是多么地简单。
如果您了解了 XML 的三个重要优点,您就会立即知道在什么情况下应该使用 XML:
XML 已广泛用于在不同的数据库应用程序之间传输数据。大多数 DBMS(包括 Microsoft Access 或 phpMyAdmin)已经允许将数据库表导出为 XML 文件。
RSS(真正简单的聚合)是最常用的 XML 应用之一。RSS 只是另一种 XML 文档格式,用于收集新闻和类似新闻的内容。基于 RSS 的常用网站包括社区站点,如 Wired 和 Slashdot 或个人 Blog。Macromedia 已经以 RSS 源 方式发布了开发人员中心的文章。RSS 的主要优点在于人们可以按照他们需要的格式阅读您的内容,并将内容导入到他们自己的网站。我将在以后的某篇文章中介绍如何使用 Dreamweaver 8 收集 RSS 源。
通过了解 XML 的一些缺点,可以很容易知道在什么情况不应使用 XML。
如果您按照前面的示例执行,就会对 XML 文档的概况有所了解。它的语法非常简单易懂,而且它的规则非常清晰和简单。XML 文档由一个 XML 声明和包含一些嵌套元素的一个根元素或标签构成。首先,我将简要展示最重要的语法规则:
所有的 XML 文档的开始处必须有 XML 声明。如果您使用 Dreamweaver 来创建 XML 文档,则会自动添加 XML 声明。调用 XML 文档的应用程序将使用 XML 声明正确读取并解释信息。默认情况下,Dreamweaver 创建的是符合 1.0 规范 的 XML 文档,并使用 iso-8859-1(Latin-1/西欧)字符集。XML 声明不是元素,并且不作为 XML 文档的一部分。
接下来,文档中应该包括一个根元素。在前面的示例中,根元素是 <department>。但是,我们假设该公司有多个部门。那么,如何将第二个 <department> 元素添加到文档中?是按照如下所示的方法吗?
<?xml version="1.0" encoding="iso-8859-1"?>
<department> </department>
<department> </department>
不对。在这种情况下,您需要定义一个新的根元素:<company>。这样,新的根元素可以有任意多个子元素,即部门:
<company>
<department>
<employee>
<name>John Doe</name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
<employee>
<name>Jane Fletcher</name>
<job>Designer</job>
<salary>2500</salary>
</employee>
</department>
<department>
<employee>
</employee>
</department>
</company>
所有其它子元素必须包含在根标签内。
虽然在 HTML 中允许象 <hr> 或 <br> 这样的单标签元素,但是 XML 中所有元素都必须有一个结束标签。如果省略了结束标签,您的浏览器将产生一个如下所示的错误:
The following tags were not closed:department.Error processing resource 'http://www.domain.org/company.xml'.(以下标签没有结束标签:department。处理资源“http://www.domain.org/company.xml”时出错。)
Dreamweaver 8 的新功能之一是默认代码完成,此功能也可用于 XML 文件。如果输入了以下代码:
<company>
<department>
<employees>
则在键入 </ 时,Dreamweaver 8 将自动完成正确的结束标签。在上面的示例中,当第一次键入 </ 时,Dreamweaver 将插入 </item>。再次键入 </ 时,Dreamweaver 将插入 </items>。而第三次键入 </ 时,Dreamweaver 将插入 </root>。Dreamweaver 8 会分析您在页面中的位置,并相应地添加结束标签。代码完成功能有助于您生成格式完善的 XML 文档,特别是当您尚未精通编码时。
此外,标签名是区分大小写的,这意味着 <Department> 与 <department> 或 <DEPARTMENT> 是完全不同的元素。当然,同一个元素的开始标签和结束标签必须采用相同的大小写。下面的示例是 XML 中一对非法标签:
<JOB>Software Analyst </job>
正如我以前提到的,XML 元素是通过父子关系进行关联的。在上面的示例中,<code><employee></code> 是 <code><department></code> 的子元素,而 <code><department></code> 则是唯一的根元素 <code><company></code> 的子元素。为保持这些关系,元素必须正确进行嵌套。虽然 HTML 允许标签交叉,如下例所示,但是在 XML 中,所有元素必须在彼此之间正确嵌套。
<b>This text is <i> emphasized </b> and italic</i>.
对于 HTML 它是完全合法的,在浏览器中显示如下:
在 XML 中,内容或实际信息由元素和/或其属性承载。元素可包含简单的文本、其它元素,或者简单文本和元素都包含。例如,下面的元素:
<employee>
<name>John Doe</name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
可以重写为:
<employee>
John Doe
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
这意味着元素 employee 包含混合内容:简单文本和其它元素。
还允许使用空元素。下一个元素可理解为“我们有一个职位空缺,仍正在寻找合适的人员”:
<employee></employee>
可以使用属性对同一个元素进行重写:
<employee job="Software Analyst">
John Doe
<salary>2000</salary>
</employee>
XML 中的属性就是元素的属性。XML 中的属性描述元素的特性。 您可以使用单引号 (' ') 或双引号 (" ") 标记属性值。正如您在一系列示例中所看到的,同一数据可以存储为子元素,也可存储为属性。那么那种方法更好呢?理想情况是,只有在指定关于数据的额外信息时(即,当您需要元数据时),才应该使用属性。例如:
<employee id="31">
<name>John Doe</name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
在本例中,雇员 ID 与实际数据无关。但是,XML 处理软件使用此 ID 可更快地识别相应的雇员。此类信息称为元数据,即有关数据的数据。
使用属性代替元素也有一些缺点。XML 文档的整体结构不够清晰并缺少扩展性。而且,属性不能有多个值,处理时比较困难。假设如果将雇员的信息按以下方式进行存储:
<employee name="John Doe" job="Software Analyst" salary="2000"></employee>
这将会破坏 XML 文档的全部用途 - 使信息结构清晰并易于交换。
到目前为止,您可能很自然地想到一个问题:“好吧,如果我可以定义自己的标签,我是否能够真正地将任何字符用作元素?”答案是既可以也不可以。您可以使用任何字符作为元素名称,因为在 XML 中没有保留字,但是您必须遵守以下简单的命名规则:
元素名中可以使用“.”和“-”字符,但是不建议这样使用。处理 XML 文件的应用程序可能将这些符号解释为运算符。如果需要使用较长的元素名,可以使用“_”字符代替这些符号,如下例所示:
<employee>
<first_name>John</first_name>
<last_name>Doe</last_name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
是的,基本上任何字符都可以。而且还支持非英语字符,但需确保您设置了正确的字符集,并且处理 XML 文档的客户端应用程序也要支持非英语的内容。并且,内容中的空格将保留,这一点与 HTML 不同。这意味着您可以编写多个连续的空格,它们不会被去掉或删除。
所有标记或编程语言都允许注释。XML 也一样!注释的语法与 HTML 相同:
<!-- This employee deserves a raise. -->
在本文前面的内容中,已经提到过作为 XML 应用之一的 RSS。下一个示例将显示“Macromedia 开发人员中心”源的一个简化版本,用以说明 XML 文档的结构以及所应用的语法规则。
<?xml version="1.0" encoding="utf-8"?>
<rss version="1.0">
<channel>
<title>Macromedia Developer Center RSS Feed June 27, 2005</title>
<link>http://www.macromedia.com/devnet/</link>
<description>Macromedia Developer Center is your center for the tutorials, articles, and sample applications you need to master Macromedia products.</description>
<item>
<title>Creating a Dynamic Playlist for Progressive Flash Video</title>
<link>http://www.macromedia.com/devnet/flash/articles/prog_download.html</link>
<description>Learn how to create an XML-driven playlist for viewing progressive FLV files.</description>
</item>
<item>
<title>Chatting Through IM Gateways in ColdFusion MX 7</title>
<link>http://www.macromedia.com/devnet/coldfusion/articles/imgateway.html</link>
<description>Learn the fundamentals of gateway apps as you build a sample chat application that monitors your ColdFusion server status</description>
</item>
</channel>
</rss>
请注意 RSS 传输面向列表的信息(项或文章)的方法。当然,RSS 是为交换大量相似项而设计的,但为了简单起见,我在上面的示例中只加入了两个项。这些项组成了信息的“通道”,它是通过标题、链接和描述来进行区分的。每一项代表开发人员中心上发表的一篇文章,并具有以下子元素:文章标题、文章链接和简短的描述。另外,还可以为作者、出版日期和每篇文章的主题添加元素,您将在我的下一篇文章中了解这些内容。在本文的主题中,我已经介绍了 XML 保持正确的格式所必需的条件,这意味着这些规则可保证 XML 的语法是正确的。在熟悉 XML 之后,您还会了解到 XML 文档类型定义 DTD 和 XML 的架构,这些都是为您创建和使用基于 XML 的语言而制订的规则。DTD 用于指定 XML 文档中可以使用的合法元素。要了解有关根据 DTD 验证 XML 文档的更多信息,请阅读 W3School 的此教程。XML 架构只是基于 XML 的 DTD 版本。
本文的目的是向您介绍 XML。它绝对不是针对技术的综合描述,也不是基于 XML 的应用程序的开发指南。相反,我建议您补充 XML 的相关知识,并通过访问下列资源探索将 XML 用于 Web 开发的其它方法:
如果您已经开始使用 XML,W3 Schools 的此 XML 验证程序 可以验证 XML 文档的格式是否正确。
我的下一篇文章将为您介绍 XSL,它是一种用于定义 XML 的格式并显示 XML 数据的语言。可从此处阅读该文章。另外,您还将会看到我即将完成的有关使用 Dreamweaver 8 中新的 XML 和 XSL 功能的文章。在这些文章中将讲述如何使用 Dreamweaver 8 在您的站点中收集 RSS 源以及如何配置您的服务器以执行服务器端 XSL 转换。请耐心等候。Dreamweaver 8 已经可以预订。如果您通过 Macromedia Affiliate Program from InterAKT Online 订购,您还将获得 免费的 ImpAKT。
Tutorials and samples |
Dreamweaver user forum |
More |
| 04/23/2012 | Resolution/Compatibility/liquid layout |
|---|---|
| 04/20/2012 | using local/testing server with cs5 inserting images look fine in the split screen but do not show |
| 04/18/2012 | Ap Div help |
| 04/23/2012 | Updating |
Dreamweaver Cookbook |
More |