XIST:一个 XML 转换引擎
总结
XIST 是一个完全用 Python 编写的 XML 转换引擎,由 LivingLogic AG 开发。LivingLogic AG 是一家专门从事网络技术的软件开发公司。XIST 的设计旨在简化创建和维护大型网站的任务。
背景
早在 1994 年我们开始创建网页后不久,手工编写 HTML 文件就显得冗长乏味,于是我们开始寻找工具来简化重复的 HTML 生成任务。
很早,我们就发现并开始使用一个名为 hsc 的 HTML 预处理器。这个工具通过定义新的标记标签并控制这些标签如何转换为 HTML 来支持从模板生成页面,有点像现在 XML/XSL 的做法。
不幸的是,hsc 有一些限制:它不支持局部变量,除了条件语句之外没有控制结构。甚至连算术运算都无法实现。我们用这个系统开发的第一个网站由 hsc 宏和生成 hsc 源文件的 Perl 脚本混合组成。
1998 年,hsc 的作者停止了进一步开发,我们便积极寻找替代方案。起初我们决定自行继续开发 hsc,并计划使其与当时开始流行的 XML 兼容。但事实证明,扩展用 C 编写的 hsc 相当困难。例如,添加 Unicode 支持需要重写整个 I/O 系统。很明显,我们需要为我们的 Web 开发寻找另一套工具。
XIST 诞生
大约在这个时候,我们发现了 Python,并认为它可能是一个完全重写 hsc 的好方法。Python 包含 XML 解析功能,我们认为可以将其用作我们工作的基础:我们可以编写 XML,而不是在 hsc 中编写宏,然后通过将 XML 元素类型简单映射到 Python 类来处理它。
在这种方法中,XIST 在解析每个 XML 文件时生成一个扩展的文档对象模型 (DOM)。文件中每个元素定义的类在 DOM 生成时被实例化,并且类的方法用于在页面生成期间执行必要的 XML 转换。这使我们能够以面向对象脚本语言的全部能力来实现我们的 Web 模板。
在实现过程中,我们发现 hsc 的所有关键功能都可以在 Python 中轻松支持
- 自动计算图像大小?Python Imaging Library 轻松搞定。
- 解析 XML 文件?Python 中有多种 XML 解析器可用。
- 从数据库加载和存储 XML?Python DB-API 是标准化的,并且存在用于 MySQL、Postgres、Interbase、Oracle、ODBC、Sybase 和其他数据库的模块。
- 从网络获取 XML?Python 的 urlparse 和 urllib 标准库就是为此而生。
- 处理 Unicode?Python 2.0 完全开箱即用地支持 Unicode。
实现第一个原型版本花费了几周的业余时间编程,结果非常成功。Python 提供了一条比我们使用过的任何其他编程语言都短的从概念到实现的路径。XIST 就这样诞生了。
XIST 的开发在 Python 中继续进行,如今 XIST 是一家成功公司的基础,该公司拥有 15 名员工。XIST 现在已应用于 LivingLogic AG 的所有 Web 项目中。
用 Python 和 JSP 进行内容管理
在 XIST 之上,LivingLogic 开发了一个名为 XIST4C 的内容管理系统(4C 代表内容、社区、协作和商业)。该系统结合了 XIST 抽象页面布局的优点和页面模板预编译为 Java Server Pages 的功能,后者最终用于向网络提供内容。
通过使用 XIST 标签库而不是 JSP 标签库,我们能够构建优化的 Java Server Pages,其运行速度比其 JSP 标签库对应的版本快得多,而无需对 JSP 文件进行任何更改。这种性能提升的原因是 XIST 预处理器处理了许多计算密集型操作,这些操作可能需要动态类型自省、字符串处理等,并且会在页面加载期间由 Java 标签库代码执行。
快速开发与低硬件要求相结合,使得 XIST4C 特别适合中小型企业。这使我们能够获得独特的竞争优势,并以更低的成本实现项目。
用 Python 原型化 Java 系统
2000 年,LivingLogic 承接了一项开发业务流程工作流建模和自动化业务流程产品的任务。受我们早期 XIST 成功的启发,我们决定开发一个 Python 原型。做出这个决定,尽管我们的合同要求我们交付一个基于 Java 的原型给一大批开发人员,他们将把其转化为一个可销售的产品。
在原型开发早期使用 Python 的方法使我们几乎从项目一开始就能够使用可运行的代码来研究概念。尽管我们不得不将 Python 原型用 Java 重写,但原型开发的总时间比我们其他仅使用 Java 的项目要少。
结论
Python 易于学习和使用,可生成可维护的代码,并且功能强大,足以成为许多应用领域和项目规模的合适选择。
我们最喜欢 Python 的一些特性包括
- Python 广泛的标准库和大量可用的第三方包支持许多应用领域的开发。
- 出乎意料的语法以及少量基本概念(如命名空间)的广泛而一致的使用,有助于使 Python 代码可读且可维护。
- 广泛且易于使用的自省功能使 Python 易于通过从命令行发现其功能(包括文档)来交互式学习。
- Python 很容易用 C 或 C++ 扩展,因此将非 Python 模块集成到应用程序中很容易。
Python 在 LivingLogic AG 的成功中发挥了重要作用,并将继续成为我们大多数软件开发工作的基础。
关于作者
在 2000 年获得博士学位之前,Walter Dörwald 博士在 BITÖK(拜罗伊特森林生态系统研究所)研究森林生长模拟和人工生命,并开发了一个用于模拟和可视化的庞大 C++ 框架。2000 年,他共同创立了 LivingLogic AG,并从那时起一直负责公司的基础工具和技术。
1990 年获得数学博士学位后,Alois Kastner-Maresch 博士领导了 BITÖK 的森林生态系统模拟研究团队。2000 年,他共同创立了 LivingLogic AG,并担任首席执行官。
