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