XML - c++

XML 方言只是一組特殊的 XML 標記,以及一些關於如何組合這些標記的規則。目前,指定或定義 XML 方言的兩種主要方式是通過文檔類型定義(DTD)或 XML 模式。我將把這兩者都稱作 模式
您的項目域也許已經有了一個爲您設計的特定模式。如果沒有,您可以使用純文本編輯器創建自己的模式。更精細的方法是使用可以檢查語法的真正 方言設計器。(當以後嘗試使用錯誤的模式來驗證 XML 數據時,該模式不會起作用。)



目前,大多數程序員的文本編輯器 ― 尤其是在 IDE 中找到的文本編輯器 ― 擁有正規的宏和模板支持,可用於某些特性,如語法突出顯示和自動完成部分輸入的字或短語。因此,我省略了關於任何只執行語法突出顯示和自動完成的 XML 編輯器的討論。Microsoft Word 或 Emacs 宏就可以實現這些特性,因此“XML 編輯器”應該有更多特性。
表 1 中顯示的工具分爲三種類別:
  • IDE(集成開發環境,即瑞士軍刀方法)
  • 模式敏感的 XML 編輯器(補充在模式或 DTD 中找到的許可標記結構和屬性)
  • 模式設計器(用於編寫自己的模式或 DTD)
因爲表 1 中的所有工具都運行應用程序,所以它們適合於所有 XML 開發人員 ― 不僅是那些使用 C++ 的開發人員(與本文中其它表中列出的工具不同)。
產品 供應商 描述 許可證 平臺
Turbo XML TIBCO/Extensibility XML 模式/DTD 設計器和 IDE 商業 Java、Win32
Komodo Active State XML 編輯器和 IDE 商業 Linux、 Win32、其它
XML Spy Altova 用於 XML 編輯和模式設計的 IDE 商業 Win32
XML Notepad Microsoft XML 編輯器 免費 Win32
Morphon XML Lunatech Research 模式敏感的 XML 數據編輯器 商業 Java
XED 愛丁堡大學 模式敏感的 XML 數據編輯器 非商業 Win32、 Linux、Unix
Xeena IBM alphaWorks 模式敏感的 XML 數據編輯器 免費試用/商業 Mac、Unix、Win32
Visual XML Pierlou 模式敏感的 XML 數據編輯器 非商業 Java
Netpadd Phillip Lenssen Microsoft 的 XML Notepad 的替代品 非商業 Win32
XMetal Softquad DTD 敏感的 XML 編輯器 商業 Win32
Merlot Channelpoint 可視 XML 編輯器;支持 DTD 插件 非商業 Java
XML Validator ElCel Technologies 命令行 XML 驗證工具 非商業 Win32
XML Canon ElCel Technologies 通過將 XML 數據與 DTD 合併來生成規範的 XML 非商業 Win32



本文的其餘部分提供了通過軟件庫向 C/C++ 程序員添加 XML 功能的基礎。在本文的下一部分中,您將發現可以找到更多的命令行實用程序,軟件庫包含了它們作爲測試和/或樣本程序。例如,Transformiix 可以用作一個庫、Perl 模塊或命令行工具。
一旦您擁有了 DTD 或模式以及與其相配的 XML 文檔,就需要一個解析器來讀取並解釋該 XML 文檔。 表 2概述了 C/C++ 開發人員的解析器庫。可是,在開始研究表中的網格時,需要一點背景知識。
XML 解析器有兩種形式:驗證和非驗證。您需要哪一種呢?如果您不使用正式的 DTD 或模式,驗證特性對於您來說並不重要。如果您已經或者正在計劃使用 DTD 或模式,您也許會首選驗證解析器。(在這種情況下,我建議您還要學習如何閱讀和手工寫 DTD/模式,這樣當發生驗證問題時,您就可以處理錯誤。有時,錯誤在 DTD/模式中,因此您可以調試 DTD/模式文件和 XML 數據。)
用於將軟件與 XML 解析器結合的兩種常用 API 模型是:文檔模型和事件模型。文檔 API 模型對 XML 數據進行解析以生成一個對象。對象將文檔的內容抽象成樹結構。應用程序對這個樹結構對象進行操作。事件 API 模型使用回調機制嚮應用程序通報 XML 數據的結構。事件/回調通常在進行解析時發生。
一般解析器 API 模型已經被進一步改進成特定 API 標準。W3C 已經推薦 DOM(級別 1 和 2,級別 3 正在草擬中)作爲標準化文檔 API 模型。SAX 雖然不是 W3C 項目,但它已經佔有了事實上的標準事件 API 模型的地位。
當比較解析器和其它 XML 工具中的特性時,請尋找 W3C 推薦的和正在形成的規範的支持,如名稱空間、XPath、XLink、XInclude 和 XInfoset。請記住,XML 技術成熟得非常快,對第一級規範(如 DOM)的支持也許缺少了該規範第二級中引入的重要功能。如果最新規範形式的功能對於您的項目很重要,請相應地選擇工具。
在表 2 中,“事件”欄指定了支持一個推或事件模型 API(如 SAX)的解析器。“文檔”欄指定了支持拉或文檔模型 API(如 DOM)的解析器。與前面一樣,該表列出了商業和非商業工具(請參閱側欄 發放許可證以獲取關於軟件許可證的詳細信息)。
供應商 事件 文檔 特點 許可證
expat James Clark/expat 小組 本機與 SAX - 帶有本機 API 和 SAX 封裝器的、非常快速的推模型解析器。 LGPL(免費)
libxml Gnome SAX DOM 非常強壯;SAX 與 DOM 封裝器;執行 DTD 驗證 LGPL(免費)
MSXML Microsoft SAX DOM Win32 的 Microsoft XML 庫 EULA(免費)
Xerces Apache Software Foundation SAX DOM 執行 SAX 及 DOM 級別 1 和 2;DTD 驗證;增加的 XML 模式 Apache(免費)
XTL Vivid Creations SAX DOM 帶 SAX 和 DOM 的基於 STL 的 XML 工具箱 商業
RXP 愛丁堡大學 - 本機 驗證以 C 編寫的瞭解名稱空間的 XML 解析器 GPL(免費)
XML4C IBM alphaWorks SAX DOM IBM 發起的 Xerces 的變體 Apache(免費)
Oracle XDK 8i Oracle SAX DOM Oracle 主辦的用於 C++ 的 XML 工具箱 非商業
Pull Parser Extreme! Lab - 本機 印地安那大學發起的用於 C++ 的輕量型 XML 工具箱 非商業
XML Booster PhiDaNi Software - 本機 解析器發生器,生成 C 源碼解析器 商業
開放源碼前三名
三種最流行的開放源碼 XML 庫是 expat、libxml 和 Xerces。這三者都是跨平臺的,每一種都充當 XSLT 庫實現的基礎,一旦滿足了基本 XML 需要之後,它就會給您一條成長途徑。
  • expat 是 James Clark 創始的開放源碼面向事件的 XML 解析庫。他已經將該項目轉讓給了 SourceForge 中的一個小組。有一個 SAX 封裝器可供使用。在許多項目中都可以找到 expat 解析器,如開放源碼瀏覽器 Mozilla、XSLT 處理器 Transformiix 和 RDF 工具 repat。
  • libxml 爲類似於 SAX 和 DOM 的操作提供了雙重方式 API。它支持對 DTD 的驗證,並且在 Gnome 的 XSLT 處理器 libxslt中使用。libxml 經過重寫,已作爲 libxml(2) 發佈,也許還稱爲 libxml2。這個庫的用戶應該確保他們擁有了當前版本。
  • Xerces 是非常堅固的、擁有大量文檔的庫,它充當 IBM alphaWorks XML4C 庫的基礎。Xerces 還用於 Apache XSLT 處理器 Xalan 中。Xerces 支持 DOM、SAX,以及對 DTD 的驗證。最新版本讀取並解釋了部分“W3C XML 模式推薦”(打算到 2001 年底實現完整的 XML 模式支持)。
將這三種最流行的庫其中一種編譯並鏈接到您的項目毫不費力。大多數軟件包都包括了每個平臺的詳盡說明。這裏是一些樣本安裝說明。
在 Windows 上從頭構建 libxml是很簡單的四個步驟:
  1. 下載源 tarball 文件。
  2. 使用諸如 Winzip 之類的程序將內容解壓縮到一個目錄中。請確認指示瞭解壓縮實用程序保留 libxml可能需要的任何子目錄的路徑名。
  3. 定位 ./win32/dsp 子文件夾中的 libxml2.dsw 文件,並從 MS Developer Studio 中打開它。
  4. 從 DevStudio 中的頂部菜單選擇 Build All。這將構建所有樣本和測試程序,以及運行它們所需的 libxml DLL。
可以使用上述步驟在 Windows 上構建 Xerces。唯一的區別就是查找 ./c/samples/Projects/Win32/VC6 子文件夾中的 samples.dsw 工作空間文件。
expat 已經開始包括了 DSP 項目 makefile。請查看 libxmlwf 子文件夾。
對於在 Linux 或 Unix 上運行的項目,大多數情況下,您可以將源代碼解包(untar)到一個空目錄中,設置某些選項,然後輸入“make”來構建共享庫。Solaris 用戶:不要忘記使用 GNU 解包實用程序。在 Slackware Linux 下的 bash shell 中,我使用以下代碼:
			
			
tar -x 

MSXML 是 Microsoft 針對 Windows 系列操作系統提供的專利 XML,它被實現成一個可腳本化的 COM 對象集合,因此可以在其它語言環境中出色地工作,而且提供了大量文檔。這個庫支持 DOM,而且還有一個本機面向文檔的接口。它還支持 SAX 事件。
作爲 MSXML 的替代品,“Apache XML 項目”的 Xerces 庫附帶了一個 COM 封裝器,這可以使它在許多情況下充當 MSXML 的仿製品。Vivid Creations 在它的 XTL 庫中提供了 SAX 和 DOM API 的 COM 封裝器,該產品也是 MSXML 的替代品。



轉換是 XML 發展過程中從只是在元素和屬性級別處理 XML 數據向前進階的下一步。XML 轉換對進入 XML 數據進行操作,以產生 XML 輸出。轉換可以重新組織標記結構、添加/除去標記和屬性、進行過濾以放大 XML 數據的所選擇部分。
XQuery 文檔將轉換過程稱作查詢,但含義是一樣的。
XSLT 和 XQuery 是 XML 方言,用於指定如何對隨機 XML 數據執行這樣的操作。您可以編寫一個腳本文件,改用 XSLT 或 XQurey 來代替 XML,從而代替將一些 XML 數據裝入到 DOM 中,而且必須由程序操縱 DOM 版本來產生期望的結果。這種更通用的方法會產生更好的靈活性,並會縮短開發時間。現在,您的 Web 開發人員(他們不是 C/C++ 程序員)可以編寫自己的 XML 轉換,這可以讓 C++ 程序員來完成更復雜的工作。
供應商 特點 許可證
libxslt Gnome 構建在 libxml 之上 非商業
Xalan Apache 構建在 Xerces 解析器之上 Apache(免費)
Transformiix MITRE 構建在 expat 之上的 XSLT 處理器 非商業
xsltc Oliver Gerardin XSLT 編譯器,產生 C 代碼 非商業
sablotron Ginger Alliance XSL 引擎 非商業

對本文來說, 消息傳遞是指讓兩個軟件代理程序互相通信。這種消息傳遞有時稱作面向消息的中間件。(這不是類似於 AOL、MSN 或 ICQ 的消息傳遞,知道嗎?現在 一個尚處於未完成階段的基於 XML 的即時消息傳遞協議成果稱作 Jabber。我已經在 參考資料中包含了一個鏈接以滿足您的好奇心,但再次聲明,那並不是我要在這裏討論的東西。)
使用 XML 進行消息傳遞已經非常流行,以至於已經產生了兩個替代品:XML-RPC 和 SOAP。這些協議最顯著的特徵是根據開發人員用於實現的工具選擇,客戶機、服務器和同級設備可能會大相徑庭。雖然所有開發人員都習慣使用他們偏愛的語言、開發工具箱或軟件庫,但他們仍然可以合作。
(附帶說明:Gregor Purdy 已經用已提議的替代方法編寫了一篇出色的 XML-RPC 評論(請參閱 參考資料))。
表 4 包括了用於面向消息中間件類別的一些庫。這並不是一個此類別中資源的詳盡列表,有一些新的工具正在快速發展,但它是一個好的起點。
供應商 特點 許可證 平臺
4S4C SOAP 服務 Simon Fell 開放源碼 SOAP 成果 非商業 Linux、 Unix、Win32
SOAP 客戶機 SQL Data C++ SOAP 客戶機工具箱 商業 Win32
SOAP 組件 mozilla.org 可腳本化 XPCOM 組件 非商業 許多
XML-RPC for C/C++ First Peer C 語言編寫的 XML-RPC 庫 非商業 Linux、 Unix、Win32
XML-RPC 組件 mozilla.org 可腳本化 XPCOM 組件 非商業 許多
XML-RPC for C/C++ Epinions C 語言編寫的 XML-RPC 庫 非商業 Linux、 Unix、Win32

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章