已經開發出了許多 xml 插件,新的插件也不斷得以創建。本文主要討論名為 XMLBuddy 的插件,因為它豐富的功能集合包含 XML 文檔開發所需的大多數功能。我們也會提到其它插件,這些插件能為特定任務提供更豐富的用戶選項集。本文將使您熟悉基本的 XML 編輯功能,但要記住:Eclipse 是一個可以讓無數工具和功能為您所用的動態框架集。
Eclipse XML 編輯器
Eclipse 已經包括一個非常簡單的 XML 編輯器的源代碼,這個編輯器只提供 XML 語法的突出顯示。它繼續 org.eclipse.ui.editors 包中包括的類,這個包為 Eclipse 平臺提供一個標準文本編輯器和基于文件的文檔提供程序。這個簡單的 XML 編輯器起著代碼示例的作用,您可以把它作為自己的 Eclipse XML 插件的基礎。它的源代碼只能通過 Eclipse 項目向導生成,您需要按下面所描述的自己編譯它。
要構建這個基本 XML 編輯器,轉至菜單 File => New,然后選擇 Project。在項目向導中,選擇 Plug-in Development => Plug-in PRoject。
單擊 Next。給項目命名(如 org.my.eclipse.xmleditor),單擊 Next,然后接受屏幕 Plug-in Project StrUCture 上的缺省值。接下來選擇 Create a plug-in project using a code generation 向導,然后選擇 Plug-in with an editor 選項。向導會自動生成該 XML 編輯器的源代碼。
使用 XML 文檔的主要困難在于檢查其內部有效性(文檔邏輯的內聚性)。需要執行語法檢查以了解是否所有的標記和定義都是正確的并且被正確地調用。只有語法檢查通過之 后,才能確認 XML 文檔格式良好并可以解析文檔的邏輯結構。XML 文檔由 XML 解析器驗證。
所有以下描述的 Eclipse XML 插件都能夠執行 XML 驗證,指出代碼中的警告和錯誤。假如試圖打開一個 XML 文檔,XML 解析器可能會生成一個錯誤??梢詸z索精確的錯誤代碼、錯誤文本甚至導致錯誤的那一行。可以在需要時驗證 XML 文檔,或在保存文檔時自動驗證??梢詫Ⅱ炞C錯誤任務作為一組進行清除。XMLBuddy 插件使用系統范圍的 XML 解析器,不過,請記住 Eclipse 平臺帶有最好的 XML 解析器之一:Xerces(XML4J)。但并不限于 Xerces 或系統解析器,因為可使用 Run => External Tools => Configure 指向其它 XML 解析器。
另一個重要的 XMLBuddy 功能是支持不同的字符編碼。這遲早會有用,例如,當需要使用以不同語言(如波蘭語和英語)編寫的 XML 可移植文檔時。這不是一項簡單的任務,因為編碼波蘭語字符主要有三種方法:其一是由 Windows 9x/2000 使用的 Windows Latin-2(CP1250);其二是在因特網中使用以及由 UNIX 與類 UNIX 系統(如 linux)使用的 ISO Latin-2(ISO8859-2);其三是 MacOS 和 MacOS X,它們對波蘭語使用不同的字符編碼標準。
通常,XMLBuddy 為字符編碼提供兩種解決方案:根據文件內容自動檢測 XML 文檔編碼,或將其設置為缺省的編碼。缺省的編碼可以在工作空間范圍,也可特定于資源。要打開 XML 編碼首選項,可選擇 Window => Preferences => XML => Encoding。
這些針對字符編碼的解決方案的問題在于:對 XML 而言,一種編碼(每個工作臺一種)不能適應全部情況。XML 文檔可能來自世界各地任意數量的來源。在許多情況下,用戶不能控制其他人對文檔的編碼,而且可能沒有辦法按編碼界限劃分工作。同一編碼首選項將很難同時適合(比方說) Java 源文件和 XML 文檔。當一組全局首選項不能滿足需要時,XMLBuddy 為每個文檔提供屬性。指定項目中每個文件的屬性是一項繁重的任務。但是,當要處理的某一文檔使用了不常用的編碼(不能自動檢測該編碼,并且沒有在文檔中指定)時,則屬性是唯一的解決方案。要打開特定文件的編碼屬性,可在文件上單擊鼠標右鍵并選擇 Properties = > XML => Encoding。
DTD vs. XML Schema
XML Schema 指定 XML Schema 定義語言,該語言提供了描述 XML 1.0 文檔結構和限制其內容的工具,其中包括那些利用 XML Namespace 的工具。模式語言自身用 XML 1.0 表示并使用名稱空間,它在很大程度上重構了 XML 1.0 DTD 具有的能力,并在一定程度上擴展了這些能力。請記住 DTD 有許多局限:
□ XML Schema 比較復雜;只需要偶然使用 XML 的程序員可能覺得它難得有些過頭。 □ XML Schema 不能請求特定的根元素(因此,即使驗證最簡單的文檔也要求額外的信息)。 □ 當描述混合內容時,根本無法約束字符數據。 □ 內容和屬性聲明不能依靠屬性或元素上下文(這也是 DTD 的主要問題)。 □ 不能離開聲明指定缺省值。 □ 元素缺省值只能是字符數據(不包含標記)。
XMLBuddy 對 DTD 和 Schema 都提供了足夠的支持,但假如您需要真正優秀的 XML Schema 支持,應該使用 XSD-XML Infoset Browser for java 插件。它是按照 W3C XML Schema 規范中描述的那樣實現 XML Schema Infoset Model 的 Java 參考庫。它對于任何檢查、創建或修改 XML Schema 的代碼都非常有用。XML Infoset Browser 提供操作 XML Schema 組件的 API,以及操作以一系列 XML 文檔的 XML Schema 的(DOM 可訪問的)表示的 API。XML Infoset 基本上答應兩個或兩個以上的程序員同時使用 Java 和 XML,因此提供了識別和創建基于 XML 的模式的標準方法。
XML Infoset Browser 的必要補充是 IBM XML Schema Quality Checker,簡稱 SQC。SQC 是 Java 程序,它獲取以 W3C XML 模式語言編寫的 XML Schema 作為輸入,然后診斷 Schema 語言不正確的使用。SQC 讀取符合最新 XML Schema 規范的 Schema,并嘗試確定它們在應用于 Schema 的各種約束下是否有效。當 SQC 碰到不符合規范的元素時,它給出診斷消息,其中可能包含關于如何修正問題的建議。對于由許多 Schema 文檔(這些文檔間通過 、 或 元素信息項連接)組成的 Schema,執行完整的 Schema 檢查。SQC 還可以以批處理方式運行,通過一次運行檢查多個 XML 模式。
其它 Eclipse XML 插件
其它有用的 XML 插件有 Transclipse 和 Eclipse Tidy。Transclipse 是 XML 轉換插件。它用任何符合 JAXP 的 XSL 樣式表處理器通過 XSLT 處理 XML 文檔,并使用 Apache 格式化對象處理器(Formatting Objects Processor,FOP)處理 XSL-FO 文檔。Transclipse 是 j2h(Java 至 Html,Java to HTML)插件的一部分,j2h 將 Java 源代碼轉換成帶語法突出顯示的 HTML、XHTML 和 LaTeX。Eclipse Tidy 項目提供了格式化和打印 XML/HTML 文檔的插件。