HTML.4.01 的版本之一,已经符合 XML 的语法。词汇表没有变化(XHTML 使用的也是您所熟悉的标记,如
清单 2. index.xml (节选)
清单 3. index-transform.xml (节选)
清单 4. cleanup.xsl
<p>、
<b>
、和
<a>
),但是语法却是 XML 的,因此可以很好地融入 XML 的处理流程之中。
HTML 和 XHTML 之间的主要区别在于:
- XML 元素必须有开始和结束标记,而 HTML 对于很多元素都不要求有结束标记,如
当
<p>
是空元素的时候就不要求使用结束标记。 - 空元素遵循 XML 的规范。比如说,换行符写为
<br />
,而不是<br>
。 - 属性值一定要用引号引起来(比如说,要写成
<a href="http://www.marchal.com">
,而不能写成<a href=http://www.marchal.com>
)。
清单 2 是 HTML Tidy 对清单 1 所示的输入数据处理得到的文件。从中您可以看到,这是一个合法的 XML 文档,而且,为了生成它所做的工作是很少的。
清单 2. index.xml (节选)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta name="generator" content= "HTML Tidy for Mac OS X (vers 1st June 2003), see www.w3.org" /> <title>Journey to Windsor</title> </head> <body> <table> <tr> <td width="15"></td> <td><font size="3" face="Helvetica">Journey to Windsor<br /> Benoît Marchal<br /> July 2003<br /> <br /> <a href= "mailto:bmarchal@pineapplesoft.com">bmarchal@pineapplesoft.com</a></font></td> </tr> </table> <center> <table border="3"> <tr> <td><a href="pages/dscn0824.html"><img src= "thumbnails/dscn0824.jpg" border="0" alt="dscn0824" /></a><br /> <font size="3" face="Helvetica">dscn0824.jpg<br /> A bright, red mailbox inside the castle. It seems oddly familiar in an historic setting.<br /> Windsor Castle<br /> © 2003, Benoît Marchal</font></td> </tr> </table> </center> </body> </html> |
要是您觉得 XHTML 的词汇看起来不舒服,那该怎么办呢?请您接着往下读。
XHTML 文档是有效的 XML 文档,因此您可以将它们加入到 XML 的处理流程中。更确切地说,您可以用常规的 XML 工具(如 XSL、解析器,等等)再对这些文件进行处理。
事实上我并不是非常喜欢这个例子中用到的 XHTML 词汇表。因为 XHTML 是用于发布的词汇表,因此结构性很差,我希望通过清单 3 中所示的那种 XML 词汇表来维护我的照片库(这个词汇表最早是在我的技巧文章 Divide and conquer large XML documents 中介绍的)。为了阐明 XML 处理过程,我编写了一个简单的 XSL 样式表(见 清单 4),它可以从 XHTML 文档中获取标题、文件名、日期以及描述信息。这个样式表生成了一个更加结构化的文档,使得我们处理起来更加方便。
清单 3. index-transform.xml (节选)
<?xml version="1.0" encoding="MacRoman"?> <gl:gallery xmlns:gl="http://ananas.org/2003/tips/gallery"> <gl:title>Journey to Windsor</gl:title> <gl:photo> <gl:title>Windsor Castle</gl:title> <gl:date>July 2003</gl:date> <gl:image>dscn0824.jpg</gl:image> <gl:description>A bright, red mailbox inside the castle. It seems oddly familiar in an historic setting.</gl:description> </gl:photo> </gl:gallery> |
清单 4. cleanup.xsl
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:gl="http://ananas.org/2003/tips/gallery" xmlns:html="http://www.w3.org/1999/xhtml" exclude-result-prefixes="html"> <xsl:output method="xml" indent="yes" encoding="MacRoman"/> <xsl:template match="html:html"> <xsl:variable name="date" select="html:body/html:table/html:tr/html:td[2] /html:font/html:br[3] /preceding-sibling::text()[1]"/> <gl:gallery> <gl:title> <xsl:value-of select="html:head/html:title"/> </gl:title> <xsl:for-each select="html:body/html:center/html:table /html:tr/html:td"> <xsl:variable name="title" select="html:font/html:br[3] /preceding-sibling::text()[1]"/> <xsl:variable name="image" select="html:font/html:br[1] /preceding-sibling::text()[1]"/> <xsl:variable name="description" select="html:font/html:br[2] /preceding-sibling::text()[1]"/> <gl:photo> <gl:title><xsl:value-of select="normalize-space($title)"/></gl:title> <gl:date><xsl:value-of select="normalize-space($date)"/></gl:date> <gl:image><xsl:value-of select="normalize-space($image)"/></gl:image> <gl:description><xsl:value-of select="normalize-space($description)"/></gl:description> </gl:photo> </xsl:for-each> </gl:gallery> </xsl:template> </xsl:stylesheet> |
HTML Tidy 属于那种很灵巧的小工具,每一个网管的工具箱里都应该有一个。因为它可以输出 XHTML,因此对于那些使用 XML/XSL 的网管是格外有用的。至于其他的词汇表,则只是另一种样式表而已。
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文.
- 下载本文的 源代码,其中包括作者提供的照片库。
- 从 SourceForge 下载 HTML Tidy。它可以在 Windows、Linux、MacOS 以及其他一些平台上运行。同一个网站上还有它的图形化界面以及开发库,这有助于您将其嵌入处理流程中。您还可以下载到 Java 语言版的 JTidy。
- 请访问 Dave Raggett's Web site,这里是 HTML Tidy 最初的家,上面有大量的信息。
- 请阅读 Benoit Marchal 的 利用 XML 进行 Web 发布的基础知识 (developerWorks,2003 年 7 月),文中循序渐进地讲述了用 XML 和 XSL 进行 Web 发布的方法。
- 本文作者在 对大型 XML 文档分而治之一文介绍了如何用样式表发布在线图库( developerWorks,2003 年 6 月)
- W3C 的 HTML 主页上有关于 XHTML 的更多信息。
- 有关 XHTML 更深入的探讨,请阅读 Nicolas Chase 撰写的文章 Web 的未来:XHTML 2.0( developerWorks,2002 年 9 月)。
- 请到 developerWorks XML 专区上查找更多的 XML 资料。要获得到目前为止的所有的 XML 技巧文章,请访问 技巧专栏总结。
- IBM 的 DB2 数据库不仅支持关系数据库存储,也提供与 XML 有关的工具,比如可作为 XML 与关系系统之间桥梁的 DB2 XML Extender。要学习有关 DB2 的更多知识,请访问 DB2 开发者园地。
- 请了解如何成为一名 IBM 认证的 XML 及相关技术的开发人员。