作为一种标记语言,HTML 在互联网中的广泛采用佐证了它在发布内容方面的实用性是无与伦比的。HTML 向结构内容提供各种标记,其中包括处于不同级的标题标记,例如从 <h1> 到 <h6>,或定义列表的标记,例如 <ul> 或 <ol>。HTML 文档是简单的文本文档,可以使用任何编辑器加以创建或从当前办公产品套件中导出的文档进行创建。HTML 缺乏对一些项目(例如章节、图、表格)交叉引用的真正支持。要是这些项目不被移动到不同的位置、被添加内容或完全被移除,对于此类项目维持有序的编码制加上确保对这些项目从文档中的任意其他位置引用保持最新超出了 HTML 的范围。然而,此类功能很容易获得,特别当在多文档间管理此类引用时尤为如此。本文将介绍一款名为 Xref 的 Java 工具,它提供此类功能以及其他一些功能。该工具演示了新的开发简易性功能(已经添加到即将发行的 J2SE 5.0 发行版“Tiger”中)的好处。本文所使用的主要功能有通用性、类型安全枚举和其他语言扩展,像为收集而提供的增强 for 循环。
我通常使用 HTML 文档来管理信息。这种页面描述语言的使用非常简单,将有用数据存储在 web 页面中非常方便 —— 在堆之间没有闲置的文档和文档丢失,这些情况再也不会出现了。假定更为复杂的 HTML 文档是有序的(<ol>)或无序的(<ul>),通常使用像从 <h1> 到 <h6> 的标题标记(尽管后面的标题标记不经常使用)或列表加以构造。此外,在文档中其他结构性元素之间还可能存在图或表格。通常像章节标题、表格和图这样的元素得到分配给能够引用它们的编号,例如:
......
3. 配置代理服务器
......
3.1 设置服务器
......
3.2 配置代理规则
......
在文本中的某些位置上我们可以找到类似
......
有关设置代理服务器的更多信息,请参见第 3.1 章。
......
使用图和表格的工作原理相同。此时,问题变得明朗了: 如果在现有结构之间插入某些内容,例如一个新的章节 3.1,所有后面的章节标题必须重新编号。除此之外,对章节编号的引用也必须修改。这显然既烦人 —— 更糟糕的是 —— 又容易发生错误,特别是如果此类编号和引用跨越多个构成实际文档的 HTML 文件,这种问题尤为突出。
在您办公套件中的日常文字处理程序提供了另一个宜人的功能: 自动创建目录或图列表和表格列表。在 HTML 中,此类列表必须手动创建和维护。这还不是我们通常乐于做的事情。
本文中描述的 Xref 工具对这些问题提供了一个简单的解决方案以及一些附加功能。除此之外,该工具还是如何高效利用一些 J2SE 5.0 新功能的有用示例。
当然 Xref 本身可以以多种方式简化 HTML 内容的创建,其主要目标是 web 创作区域,其中创建了跨越一个或多个 HTML 文档的文本。该区域在几种复杂性级别上受到支持。
在其应用程序的最简单形式中,使用 HTML 标题标记进行构造的现有文档可以被处理,且标题将被自动编号。这一结果在不进行任何更改的情况下获得。如果需要,带有指向所有章节的所有章节和超链接目录可以通过向文档简单添加一个新标记而生成。这是惟一的必要更改。
在 HTML 文档中,应用程序的更复杂形式要求多项更改: 通过添加新的 HTML 标记,对于其他像图或表格这样的对象可以获得另外的自动编号。再者,还支持列表(图列表或表格列表)的创建
完整的 Xref 功能通过使用引用功能实施。使用另一个新标记 (<ref>)对任何被添加标签对象(例如章节标题、图或表格)的引用可以在文档内创建,且将正确的编号插入在相同位置。除此之外,指向被引用的对象的超链接也将被创建。
所有在本文中描述的源代码和带有编译后的类的 JAR 文件可下载 —— 请参见 参考资料 部分。
尽管许多流行的浏览器还不支持本文中描述的一些功能,但它们还可以在 CSS2 中所指定的计数器基础上实现 (请参见 参考资料 部分)。这些计数器还可以被用于自动编号,例如章节标题的自动编号。在本文描述的工具更加专注于交叉引用任务,并提供除 CSS2 计数器之外的几项功能:
像图和表格(以及其他任意序列)这类项目的编号基于新的伪 HTML 标记,直接插入到文档内。
包括对被编号项目(像章节或图)的引用解析、针对目标的指定锚点的创建和 <a href> 这样的引用在内的自动交叉引用功能。
在文档中,包括对所引用项目的 <a href> 引用在内的交叉引用列表的自动生成。