注意: 雖然 JavaScript 對於本網站不是必需的,但您與內容的互動將受到限制。請啟用 JavaScript 以獲得完整體驗。

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