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,並擔任執行長。
