级别: 初级 David Mertz,Ph.D. (mertz@gnosis.cx), Luddist, Gnosis Software,Inc.
2002 年 1 月 01 日 developerWorks 正朝向将定制的 XML 方言(Dialect)作为出现在网站上的文章的源文件格式发展。然而,对于人们来说,编写 XML 总是很难的(但是,对于机器却很容易)。一种解决“人机界面”问题的方法是作者 David Mertz 用于他自己文章的公共域 txt2dw 实用程序。
存在着许多原因使许多组织可能改编 XML 方言以适应许多文档的需要。由于同样的原因,developerWorks 已经为文章开发了自己的 XML DTD。一旦您有一个 XML 源文件 ― 类似 DocBook 的共享标准或者内部的方言 ― 将源文件转变成任意目标格式(HTML、PDF、其它 XML 等)是很容易的。此外,根据 DTD 的验证可以很好地检查一个文档是否包含所需的所有部分,是否带有部分之间的正确关系。另外,与那些由专用(或者甚至是开放源码)字处理程序和发布应用程序使用的格式相比,XML 有很强的平台和工具无关性。
源文件格式和人机界面
然而,XML 的问题是它确实是一个很差的人机界面。即使 XML 只是 ASCII 字节,将元素标记输入文本编辑器也需要许多额外击键。除了打字员输入时要到处插入尖括号和标点扰乱了打字员的正常击键顺序之外,很难确保每个标记都按照您的输入次序正常关闭。我们又有多少人能充分理解即使不太复杂的 DTD 以清楚地记得在文档的每一处允许使用什么元素和属性呢?最糟糕的是,这么多的 XML 标记使得用眼睛扫描文档变得非常困难。
方便作者
至少有两种方法可以减轻使用文本编辑器来编辑 XML 文档的痛苦。一种方法是使用高级工具来编辑。一种支持 XML 的编辑器可以自动适应 DTD,其中一些编辑器甚至可以隐藏或者突出显示 XML 标记以使可视扫描更方便。某些 developerWorks 作者(包括我自己)特别喜爱 XMetaL,但是还存在许多优秀程序。然而,所有这些程序都在特定平台上运行;它们每个都有自己的一套特点(与喜爱的文本编辑器的特点不同);并且其中许多程序将使您花一大笔钱。
第二种方法是 txt2dw 采用的方法:让作者使用不妨碍他们的工具进行编写。然后,让计算机考虑需要如何格式化这些文档。字处理程序尝试采用这种方法,但是从字处理程序进入到 XML 的工具现在还处于不完善的状态。我个人倾向于使用“智能 ASCII”标记格式,它非正式地包含在电子邮件、Usenet 以及开放源码软件项目的项目文档中。可以让它更正规化一些,而不妨碍作者(同时有助于转换器)。
使用 txt2dw
很难简化 txt2dw 的使用。从 STDIN 读入一些“智能 ASCII”输入,然后将一些有效的 XML 写入 STDOUT。例如:
% txt2dw.py < MyArticle.txt > MyArticle.xml
|
此时,人们可以得到 XML 格式的文档。最终目标很可能与 XML 不同。在我自己的例子中 ― 对于许多作者也是如此 ― 最终目标格式实际上并不太需要关心(即,它是由编辑和出版商考虑的并按需要更改)。真正关键的是根据 article.dtd,XML 版本是有效的。
但是,
有些人想将 XML 转换成其它东西。XSLT 是一种通用转换技术,对于它 developerWorks 使用定制样式表 article-html.xsl。假设您需要 developerWorks 将使用的 HTML 版本,只需要运行类似下列命令:
% xslt article-html.xsl < MyArticle.xml > MyArticle.html
|
精确的详细信息将随各人使用的 XSLT 引擎不同而变化,但是思想是相同的。
智能 ASCII 格式
对于大多数情况,如果您使用电子邮件和 Usenet,则您已经使用“智能 ASCII”许多年了。大部分详细信息编写在脚本顶部。星号围住了
粗体或
重度强调短语;破折号围着
斜体或
轻度强调短语;下划线引入
书籍或
系列标题。我已经采用了单引号来分隔
appnames 和
filenames (通常以等宽字体显示),以及方括号表示
libraries 和
modules 。请在
参考资料中查看本篇技巧文章的 ASCII 版本,以获取这些功能是如何启动的信息。这些约定并不是很通用,但是对于读者来说也并不陌生。可以很快输入它们。
任何外观类似 URL 的东西都被自动转为链接。一种相当简单的带有花括号和冒号前 ALT 文本的特殊格式是用来插入图像的,例如,图表和图形。
在段落层次上,允许有几种类型的段落,并且由缩排层次表示。标题不缩进。另外,剥去任何只包含一行破折号的标题行(这有助于美化 ASCII 原始代码)。常规文本段落缩进两格。块引用缩进四格。代码样本缩进六格(或者更多)。如果代码样本的头一行包含 # 号、一些破折号、一个标题、更多破折号,然后还有一个 # 号,则将该行视为代码样本标签(在许多编程语言中,它将是一个注释行)。如果不是,也没有坏处。
我觉得 txt2dw 的几个功能过于严格。对非常严格的格式 article.dtd 作了一些让步。另一方面,这些严格的约束也正是我采用的约定,因此遵守它们并不困难。另外,它们不会显得奇怪或不自然(但是,您仍然需要记住使用这些功能或者创建完成该任务的模板)。当遇到 ALLCAPS 节时,会进行一些适度的智能更改。这里有一个很有用的模板:
txt2dw“智能 ASCII”源代码的模板
SERIES: Main Title
Subtitle
Author Name
Title, Affiliation
Date
Abstract of the article (block quote indented)...
FIRST SECTION
----------------------------------------------------------
Regular paragraph...
#----- Title of code sample -----#
Sample code line 1
[...]
Regular paragraph...
MORE SECTIONS...
----------------------------------------------------------
[...]
{Picture of Author: http://mysite/mypic.png}
Author blurb...
|
有时,出于好的技术原因而选择的计算机工具会强制用户象计算机一样思维。XML 标记可能有这样的特点。程序员不需要花很多时间考虑格式,但是应该允许他们把精力集中在内容上。在任何正在进行的文档过程中,值得做一些额外的前沿编程工作以允许程序员少考虑一些格式编排和标记的过于基础的内容。txt2dw 是一种让计算机和程序员各行其道的工具,它让计算机考虑有关计算机的问题,而让程序员考虑文字问题。
参考资料
关于作者  | 
|  | David Mertz 非常欢迎反馈以讨论和改进 txt2dw 或者任何他的公共域实用程序。可以通过 mertz@gnosis.cx 与 David 联系;可以从 http://gnosis.cx/publish/ 了解他的生活。 |
对本文的评价
|