IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  XML  >

XML 问题: TEI -- 文本编码规范

用于档案及复杂文档的XML方言

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

David Mertz 博士 (mertz@gnosis.cx), 编码问题专家, Gnosis Software,Inc.

2003 年 10 月 01 日

当前,XML 通常被看作是一种标记技术,程序员用它来进行面向计算机的数据编码。甚至是 DocBook 及与之类似的面向文档的 DTD 也着重于技术文档的准备。然而,XML 的真正根源存在于 SGML 社团当中,这个团体主要由出版商、档案管理人员、图书馆馆员以及学者们组成。在本文中,David 介绍了Text Encoding Initiative (TEI,文本编码规范)。这是一种致力于标记文学和语言文字的 XML 模式。TEI能够对源文档的排版特性进行有用的抽象,可以有效地检索、索引、比较和打印出版物——而对于用单纯的照片影像来存档的出版物来说,这些都是不可能实现的。

Text Encoding Initiative (TEI,文本编码规范)的出现比 XML 本身还要早十年,当然也早于其他常用的文档编码 XML 模式,比如 DocBook。更确切地说,TEI 是在1987年的时候,在最初的 SGML 组织中开发出来的,在 Internet 时代可真称得上是长生不老了。TEI除了年纪之外,它与我所知道的所有其他标记格式的作用层次都不一样。在特定类型的问题上,TEI依然是最佳的解决方案。

TEI的主要目标是对文学作品中所有的重要语义进行编码,这既包括在 XML 技术出现之前(更一般地讲,甚至是计算机出现之前)的作品,也包括最近的。当然对于散文或者诗歌的文字来说,单词本身是最重要的语义特性。但是纵观印刷技术或者一般写作的历史,文字中已经加入了其他的排版特征,以便对其含义的辅助方面进行编码。具体包括各式各样的着重号、缩进及页边空白、表格、页数标记、断行(比如在诗歌中)、图形、还有装饰画,所有这些表示性元素的使用,对书本、论文、手册、传单、票据、诗歌,以及所有其他形式的文字所要表达的含义,具有增强、修正和详细阐述的作用。

除此之外,纯粹的排版特性有时候也需要一番解释才能完全理解。让我们举一件微不足道的事情为例。很多图书用斜体字同时标识外语单词和其他书籍的标题。斜体字的语义依赖于文字的上下文,不过显然作者通常会将类似的标记用于多种截然不同的目的。TEI 的目标就是让对文字的标记方式能够完全区分所有这些含义。

TEI 实际上不仅仅是一种 XML 模式,它更像是一个完整的模式族,其中的模式都与总体目标相联系,但是在标签和属性使用的细节上有所不同。这些模式相互区别的部分原因是它们由不同的 DTD (或者 RELAX NG 模式)支持。比如,TEI-Lite 是一种大大简化了的 TEI,它着眼于支持“TEI 用户社区中90%用户的90%的需求”(摘自 TEI 网站)。当然其中也有一些针对特殊目标的定义。不过即便是有了实际的特殊需求,或者是完整 TEI 标签集的子集,大多数用户还是只用到了他们所使用的 TEI DTD 中的几个标签。不同的文档需要不同的标记,不同的项目允许使用的粒度也不同。

TEI功能示例

Gutenberg 项目(Project Gutenberg)致力于为普通受众提供免费版的文学历史著作。该项目的参与者转录并校验了数以千计的书籍。根据 Gutenberg 项目网站(请参阅 参考资料)的“History and Philosophy”页面所说,项目的目标是用 plain vanilla ASCII 格式生成文本。在 Gutenberg 的出版物中,任何形式的着重都是用大写来表示,段落之间通过空行分隔。读者可以重新构造 Gutenberg项目文档的很多常规特性,而 TEI 的目标在于显式地标识出这些特性。不过,TEI 读起来非常困难, 只有用某种转换工具表示成经过修饰的形式才能阅读。但是与此同时,使用自动化工具来处理和分析的话, TEI 就容易得多了。

让我们举个例子,Gutenberg 项目处理了莎士比亚的著作《李尔王》( King Lear),下面是这部喜剧经过转录之后的其中一小段:


清单 1. 经 Gutenberg 项目处理后的《李尔王》
Kent.
Now by Apollo, king,
Thou swear'st thy gods in vain.
Lear.
O vassal! miscreant!
[Laying his hand on his sword.]
Alb. and Corn.
Dear sir, forbear!
Kent.
Do;
Kill thy physician, and the fee bestow
Upon the foul disease. Revoke thy gift,
Or, whilst I can vent clamour from my throat,
I'll tell thee thou dost evil.

而 TEI 可以向其中加入大量隐含的语义内容。如下所示:


清单 2. 经 TEI 处理后的《李尔王》
<sp><speaker>Kent</speaker>
<p>Now by Apollo, king,<lb/>
Thou swear'st thy gods in vain.<lb/></p></sp>
<sp><speaker>Lear</speaker>
<p>O vassal! miscreant!<lb/></p></sp>
<p><stage>Laying his hand on his sword.</stage><p>
<sp><speaker>Alb. and Corn.</speaker>
<p>Dear sir, forbear!<lb/></p></sp>
<sp><speaker>Kent.</speaker>
<p>Do;<lb/>
Kill thy physician, and the fee bestow<lb/>
Upon the foul disease. Revoke thy gift,<lb/>
Or, whilst I can vent clamour from my throat,<lb/>
I'll tell thee thou dost evil.<lb/></p></sp>

这样的标记与 David Seaman 在有关这一话题的一篇文章中建议的完全相同(请参阅 参考资料)。然而,这种风格从语义的角度来看依然不充分。 <lb/> 标签表示断行,而这只是一种排版特性,在印刷的时候才会渲染。这个标签类似于 HTML 的 <br/> 元素、DocBook的 <LiteralLayout> ,或者是 LaTeX 的 \newline 。但是如果您再考虑莎士比亚的诗句结构,TEI 就能更加明确地将其表示出来。例如:

用 TEI 显式标记过的《李尔王》
<sp><speaker>Kent.</speaker><lg>
<l part="Y">Do;</l>
<l part="N">Kill thy physician, and the fee bestow</l>
<l part="N">Upon the foul disease. Revoke thy gift,</l>
<l part="N">Or, whilst I can vent clamour from my throat,</l>
<l part="N">I'll tell thee thou dost evil.</l></lg></sp>

在这里,Kent 的演讲不是用简单的段落,而是用 line group 表示的。此外,其中的每一行还可以进行选择性的修饰——第一行的韵律不完整,其余几行韵律是完整的。这样的修饰是可以选择的,此外还存在 part 属性值。

这种程度的特征描述使得学者们可以通过自动化的手段来回答文学问题。比如,“莎士比亚戏剧中哪些人物倾向于说韵律不完整的句子(以及这是如何影响那些人物想要表达的感觉的)?”如果对简单的印刷版,或者标记格式(不管是单纯面向印刷的 LaTeX 或者 XSL-FO,还是 DocBook 或 HTML 或 plain vanilla ASCII 这种粗浅的语义描述)进行处理,都不会给这样的研究带来任何专门的帮助。TEI 使文学知识的很多领域实现一定程度的自动化。

除此之外,从文档准备的角度来看,您可以根据出版的需求,来自由选择是使用丰富的语义标记,还是忽略这些标记。让我们举一个简化的例子,假设有些版本的《新约圣经》(New Testament)将直接引用耶稣的语言用红色墨水标记出来。TEI 标记可以直接指示出说话人,然后在印刷过程中对这样的排版问题作出决定;这样,就没有必要在标记中使用显式的 color="red" 属性。其他的著作也可以这样来准备,用类似的规则在文本中标记出重要的元素。





回页首


TEI 的其他优点

显然,大多数作品即不是韵律也不是诗歌。但是 TEI 可以在每一个层次上提供不同程度的排版与语义标记选项。在这里有一点请务必理解,TEI 排版标记的重点主要不在于文本将来出版的时候该如何表现,而在于它 过去是如何表现的。比如,研究康德的《纯粹理性批判》(Critique of Pure Reason)的哲学家通常会引用版本“A”和版本“B”,也就是说,康德在第一版和第二版之间在概念上做了若干重大修改。这种习惯非常重要,因此大多数《批判》版本中都包含了指示 A 版和 B 版范围的旁注(现在这两个版本经常作为不同的章节一起出版)。这些旁注表示最初的(德文版)修订本在何处出现分段;通常现代的版本,特别是翻译版,与最初这些版本标记页数的方式很不一样。TEI 可能是广泛使用的标记约定中唯一足以用来对《批判》进行适当注释的。

从内嵌标记层面上看,TEI 同时包含排版和语义标记元素。在简单的排版标记方面,标签 <hi> 可以与可选的 rend 属性一起使用。比如, <hi rend="italics"> 表示指定单词或短语(应该)用斜体表示。但是,如果可以确定某个短语 为什么要用斜体表示(这样即明确,又可以提供充足的内容来对文本进行分析),您可以选择使用 <title><foreign> 、或者 <emph> 这样的标签,这样就能更加明确的描述出作者或者出版商将这个短语标为斜体的原因。此外,文本经过这样的标记,您就可以决定在下一个版本中用下划线来表示标题,而不用斜体。

我所举到的例子只是涉及了 TEI 标签的一小部分功能。TEI 中的标签也许比任何一个人一下子能想出来的全部标签都多得多。不过好在一般来说,TEI 的设计可以为特定的任务选择一个子集。对于某个目标或者项目来说,最好的策略就是事先决定您要用哪几个 TEI 标签。不论是开发人员、作者,或是档案管理员,只要付出适当的努力就可以学会这样一个很小的子集。





回页首


工具与 TEI

从一般意义上讲,任何能够处理 XML 的工具都可以处理 TEI。有几个 TEI 变种有可用的 DTD,还有另外一些种类具有 XSLT 样式表。自然地,您可以从 TEI 网站上找到用于在 Emacs、Framemaker 和 MS-Word 中处理 TEI 的定制工具。在那儿您还可以下载到 XMetal 定制工具。

这项规范还提供了一个有用的在线工具,使您能够定制 XSLT 样式表来生成您需要的 HTML 输出。您可以通过一个 Web 表单选择多个不同的选项,然后得到一个能够反映您的定制的样式表(请参阅 参考资料)。

您还可以得到一些脚本和工具,用来将 TDI 格式的文档转换成更接近最终打印输出的文档。这些大体上都以 LaTeX 或者 XSL-FO作为中间格式。这两者都是文字处理程序员已经习惯的命令行工具链。

有一种基于 Java 的 XML 编辑器,名叫 oXygen,我从中获得了很多乐趣。我是过去试用这个产品的,从那以后它还在不断变得更加出色。oXygen 不仅是第一个加入对 RELAX NG 支持的 XML 编辑器,它的最新版本现在还包含了一组很好的 TEI 模板——您可以从中选择一个模板,oXygen 就可以为您创建文档骨架(并在您下面的工作中协助您进行验证和标签输入)。但是除了这些,还有给人印象最深的东西,那就是其中还捆绑了 可以用的 XSL-FO 样式表。我用它从我的 TEI 测试文件输出了几个很好看的 PDF,而没有在配置工具链和阅读晦涩难懂的文档上面花费几个小时的时间。



参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.

  • 请在 论坛讨论上参与本文的讨论。(您也可以单击文章顶部或底部的 讨论来访问论坛。)


  • 有关文本编码规范的更多信息,请访问 TEI 主页。在那个网站上您将找到一些参考资料,其中包括有关 Bare Bones 元素子集的有趣讨论。



  • TEI 软件的主页提供一些软件的链接,您可以用这些软件来创建、管理和处理 SGML 或 XML格式的 TEI 文档。



  • 请学习这个有关 TEI Lite 的教程,它比 Bare Bones TEI 要稍微复杂一些。



  • 请参考精妙绝伦的 Gutenberg 项目,它自1971年以来就将文学的历史用电子的形式免费提供给读者。上面有大量以简单的 ASCII“etexts” 编码的公共文学著作。其中一部就是我在本专栏中举过的例子,莎士比亚的 《李尔王》



  • 您可以参考有关 Gutenberg 项目的 历史与哲学的更多信息。



  • 请您阅读 David Seaman 有关 《李尔王》 这个例子的有益讨论。



  • 您可以用在线的 XSL TEI HTML 样式表参数定制工具开发定制的 HTML 输出。



  • 请您试用基于 Java 的 oXygen XML 编辑器,其中包含一组很好的 TEI 模板。



  • developerWorks XML 专区 中可以找到更多有关 XML 的资料。您还可以从 专栏汇总页面中找到 David 的 XML 问题专栏以前的所有文章。



  • IBM DB2 数据库提供的不仅是关系数据库存储,也提供与 XML 相关的工具。比如 DB2 XML Extender,它为 XML 和关系系统之间建立了桥梁。有关 DB2 的更多信息请访问 DB2 开发者园地



  • 请关注如何才能成为 IBM 认证的 XML 及相关技术开发人员




关于作者

Author photo

David Mertz 希望一切都变得美好。可以通过 mertz@gnosis.cx 与 David 联系;在 http://gnosis.cx/publish/ 上详细介绍了他的生活。 欢迎对过去的、这一篇和以后的专栏文章提出意见和建议。也请您关注David的新书 Text Processing in Python .




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款