Firefox 是一種相對較新的 Web 浏覽器,目前是基於 Mozilla 平台的最流行的浏覽器。您可能聽說過它,因為它的成長速度異常快速,並且它是開放源碼軟件取得成功的代表。也許您像我一樣,已經選擇它作為自己的 Web 浏覽器。今年年初,IBM 傳出了鼓勵員工使用 Firefox 的新聞,並在它的企業服務台中標准化 Firefox 支持。IBM 也在整個產品線(包括 Lotus® Domino®)中增強了 Firefox 支持。其他企業受到像這樣重量級 IT 企業對其所抱信心的影響,也把它們的內部標准轉向 Firefox。
Firefox 的一個優點是從 Mozilla 繼承了很多 XML 特性。對於其中很多特性,Mozilla(以及 Firefox)曾經部分或嘗試性地提供過,但是下一個 Firefox 主要版本,即正式的 Version 1.5(開發代號為 Deer Park),在 XML 特性的數量和質量上都跨了一大步。Firefox 1.5 承諾為 XML 開發人員提供完善的 Web 浏覽器,幫助推動在 Web 上發展緩慢的客戶端 XML 特性的采用。必須要記住,目前很多 Web 技術的發展,包括 Firefox 浏覽器特性的發展,都使得 Web 浏覽器逐漸發展為完整的專用應用程序開發平台,而不再是簡單的 Internet 浏覽工具。XML 通常在這些技術發展中起著重要的作用,有些評論家稱之為 Web 2.0。
本系列教程將介紹當前的 Firefox 1.0 和即將出現的 Firefox 1.5 中提供的各種 XML 特性。本文將簡要介紹這些特性。
概述
從最初的 Web 浏覽器 NCSA Mosaic 出現開始,浏覽器的角色就是檢索組成網頁的各種文件,組織起來顯示給用戶。這些文件最常用的格式一直是 Html 和各種二進制圖像格式。XML 最初的目的是作為 Web 上的 SGML,它的出現帶來了各種各樣的基於 XML 的新格式,Web 浏覽器必須正確地解析和顯示這些格式。支持 XML 的浏覽器最基本的任務是能夠區分不同格式的重要性,而 Firefox Deer Park 在這個方面毫無遜色。
XML
Mozilla(以及 Firefox)能夠在非驗證模式下解析普通 XML(包括名稱空間)已經有多年了。默認情況下僅僅是顯示 XML,告訴用戶:
此 XML 文件沒有任何相關的樣式信息。文檔樹如下所示。
可以在 XML 中嵌入可移植的 XML:stylesheet 處理指令,告訴 Firefox 加載 CSS 樣式表或 XSLT 轉換(後面都將討論),自動向用戶顯示處理後的結果而不是原始 XML。這種情況下,浏覽器的“查看源代碼”特性將顯示原始 XML。Mozilla 的一個缺點是在把數據傳遞給呈現引擎之前要完全解析大型的 XML 文檔,這意味著文檔加載可能很慢。幾年來,Mozilla 開發人員一直討論增加漸進式 XML 加載支持。如果最終得以在 Firefox 1.5 中實現就太好了,但是沒有跡象表明會如此。Firefox 不支持 DTD 驗證或其他任何驗證技術,如 W3C XML Schema (WXS) 或 RELAX NG。對 XLink 的支持很充分(只允許簡單鏈接),允許在 XML 中表示與 Html 中類似的鏈接。Firefox 也支持 XML Base,該規范允許設置基准 URI 來解析 XLink 中的相對 URI。使用 W3C XPointer 的 FIXPtr 變體或者 XPointer 舊草案的一個子集,鏈接可以指向文檔片段。
XHtml
Mozilla Firefox 1.0 支持 XHTML 1.0 Strict、Transitional 和 Frameset,以及基於 XHTML 1.0 Strict 模塊化的 XHTML 1.1。XHTML 2.0 仍然處在工作草案階段,在 Firefox 1.5 發布之前該規范可能不會完成。一些開發人員可能擔心 XHML 2.0 的采用,因為它對 HTML 和 XHTML 1.x 作了大量改動。我建議 Web 開發人員將 Firefox 用於 XHTML 1.1(比如用於嵌入式應用程序)。不幸的是,此建議對於面向一般 Web 的開發人員可能無效。我不想在本系列文章中討論 XHTML,不過我為 DeveloperWorks 網站撰寫了一個完整的 XHtml 1.1 教程。
我的同事 Kurt Cagle 提供了他對 XHtml 支持的看法:
與 HTML 相比,Gecko 中的 XHTML 布局模型有一些微妙的區別,其中包括應用於文檔體的 CSS 僅包括文檔邊界內的區域,如果要設置整個頁面的背景,必須將 CSS 分配給 <HTML> 元素本身。[此外],Firefox XHTML 支持復合文檔的子部分,比方說在集成 Html 和 SVG 內容時很有用。
級聯樣式表(CSS)
級聯樣式表是在 Web 浏覽器中呈現 XML 的最盛行的方式。當然,CSS 也廣泛用於設置 Html 樣式,該技術在 Firefox(與多數浏覽器一樣)中得到了強大的支持。CSS 2.0 是一個完整的 W3C 推薦標准,Firefox 1.0 支持該規范的大部分內容。CSS 2.1 工作草案對 2.0 作了相對較小的修訂。CSS 2.0 和 2.1 合起來稱為 CSS2。Deer Park 改進了對 CSS2 的支持,並增加了對 CSS3 的更多支持,CSS3 目前仍處在 W3c 工作草案階段。已經存在對 CSS3 的初步采用,因為它解決了 Web 開發人員迫切需要解決的很多問題,包括對 XML 結構更好的支持。此後的文章中將討論 CSS,但是也建議您閱讀我關於在 XML 中使用 CSS 的系列教程。這些參考資料還通過實際的例子說明了 Firefox CSS2 支持的一些局限,大部分在 Deer Park 中修正了。
可縮放向量圖形(SVG)
SVG 是提供基於 XML 的圖像格式的 W3C 規范。SVG 圖像是可移植的,與分辨率無關,而且雖然用 XML 表示卻驚人的緊湊(幾方面 XML 設計折衷的結果)。支持的特性包括內嵌轉換、剪裁路徑、alpha 蒙板、光柵過濾效果、模板對象和(理所當然)可擴展性。SVG 還通過 Synchronized Multimedia Integration Language(同步多媒體集成語言,SMIL)模塊支持動畫、縮放和轉換視角、各種圖形基本處理、分組、腳本、超鏈接、結構化元數據,並且很容易嵌入其他 XML 文檔。SVG 可在其他 XML 和 Web 相關技術如 CSS 和文檔對象模型(DOM)中使用。Mozilla 在很長時間內具有可選的、粗略的 SVG 支持,但是沒有人努力使其完善和作為默認的內置特性。Firefox Deer Park 現在提供了開箱即用的本機 SVG 支持,特別是 SVG 1.1 Full 的一個子集。當前的 Deer Park 快照中忽略了一些特性,包括聲明性的 SMIL 動畫、過濾器、文本路徑、蒙板、范式和 CVG 定義的字體,到真正發布 1.5 時可能會提供。Deer Park 透明地顯示作為 SVG 提供給 MIME 類型 image/svg+XML 的資源,而不需要專門的插件;包括內嵌在 object 元素中的 SVG 圖像。
MathML
MathML 是表示數學信息的 W3C XML 詞匯表。它允許用主要與抽象數學含義有關的形式(內容標記)或主要與顯示有關的形式(表示標記)來表達數學公式。該規范目前是 2.0 版,Firefox 支持這個版本,可獨立使用,也可嵌入到 XHtml 中。但是要注意,用戶可能需要在系統中增加某些字體才能查看 MathML 文檔。
畫布
畫布(canvas)是一個元素,作為可腳本編程的、繪制位圖的表面,它的用途無處不在:游戲、花哨的商業表示圖像、特殊的表單控件、模擬、復雜的數據可視化,等等不一而足。首先在元素本身中定義畫布的固定大小,然後利用使用 canvas API 在畫布上創建可視化對象的腳本來實際繪畫。canvas 最初是由 Apple 為其 Safari 浏覽器開發的,作為復雜圖形設施如 SVG 支持的基礎。Mozilla 接受了這種思想,canvas 現在已成浏覽器供應商 WhatWG 聯盟的一種規范。Mozilla 的 canvas 目前僅支持二維圖形,但是如果 Mozilla 平台得到 OpenGL 設施的支持也可繪制 3D。
處理文檔模型
Web 浏覽器很久以前就提供動態特性了,所以開發人員可以不只是提供簡單的靜態頁面。隨著朝復雜 Web 應用程序的發展,這些特性越來越復雜,很多是以某種方式建立在 XML 的基礎上的。JavaScript(或者其內部標准形式 ECMAScript)是一種強大的動態語言,構成了 Web 浏覽器中多數動態特性的基礎。
ECMAScript for XML (E4X)
E4X 是一個草案標准,為 ECMAScript 語言增加了原生 XML 數據類型,為常見的 XML 操作提供了運算符。E4X 規范主頁中指出:
E4X 為 ECMAScript 語言增加了基本的 XML 數據類型,擴展了人們所熟悉的 ECMAScript 運算符的語義來操縱 XML 對象,為常用 XML 操作增加了少量的新運算符,如搜索和篩選。還增加了對 XML 文字、名稱空間、限定名和其他機制的支持以促進 XML 處理。
E4X 最主要的應用可能是把 XML 解析成易於操縱的 ECMAScript 對象。這確實造成了一些難以解決的問題,因為直接使用 XML 語法意味著嵌入到其他基於標記的格式中時可能引起一些混亂。事實上,在最新的 Deer Park alpha 版中,對 Html 網頁默認禁用了 E4X,因為與從非兼容浏覽器中隱藏腳本的傳統方式有沖突。但是,網頁作者可以在任何 script 元素中通過使用形如 type="text/Javascript; e4x=1" 的屬性來啟用該功能。
XSLT
Mozilla 支持 XSLT 將近五年了,最近幾年這種支持已經相當可靠了,包括從 ECMAScript 中調用 XSLT 轉換的能力。Deer Park 對於 XSLT 在 Mozilla 中的處理沒有作很大修改。如果能夠支持 EXSLT 就更好了,但是還沒有提上日程,雖然曾經是討論的主題和一種將來的可能性。
XForms
XForms 是 XML 數據處理的 Web 表單規范,可通過不同媒介用於各種平台。XForms 的目標是把表單的用途和表示,即表單的功能和外觀分離開來。可用於開發處理 XML 內容的表單 UI 的一種 XML 詞匯表。XForms 作為 XHTML 2.0 的表單模塊,但它是獨立的 W3C 推薦標准。它比大家熟悉的 Html 表單元素更復雜,但是可用於生成更復雜和可移植的表單。由於它的復雜性,XForms 在 Mozilla 中的支持遇到了一些阻力,但是到 2004 年 8 月,IBM 和 Novell 提供了資源,Mozilla Foundation 啟動了在 Mozilla 中實現 XForms 的一個項目。此項目的成果作為一組擴展出現在 Deer Park 中。Deer Park 還增加了與 XForms 有關的 XML Events 的支持,這個 W3C 規范監聽與 XML 對象操縱有關的事件並處理這些事件。比如,用戶改變基於 XForms 的文本輸入字段中的文本時就會引發一個 XML 事件。
eXtensible Tag Framework (XTF)
XTF 是 Mozilla 專有的技術,允許擴展的作者使用 ECMAScript 或 C++ 編寫的代碼(從技術上說,可使用 Mozilla 組件系統 XPCOM 支持的任何語言),在 Mozilla 中創建新的 XML 名稱空間。事實上,Mozilla XForms Project 就是使用了 XTF 在 XForms 名稱空間中添加對元素的支持。XTF 被認為是一種強大的機制,可以為 Mozilla 增加各種 XML 技術而不必等到核心對這些技術的支持。
Web 服務
Mozilla 允許從 ECMAScript 中訪問 XML Web 服務。存在用於 SOAP 1.1、WSDL 1.1 和 XML-RPC 的組件。這樣,就可以增加處理來自遠程服務提供者的消息的功能。
Firefox:完整的基於 XML 的浏覽器參考基准
對於有些人來說,Mozilla XML 處理能力中皇冠上的珠寶是 XML User Interface Language(XML 用戶接口語言,XUL),即一種用於描述跨平台用戶接口的標記語言。XUL 是為 Mozilla 平台設計的,但目標更為廣泛。最好的辦法是將 XUL 看作 Web 浏覽器中出現的各種零碎東西:主呈現區域、菜單、圖標和按鈕、URL 欄、標題欄、狀態欄、工具條、對話框,等等。XUL 允許您創建、安排和激活所有這些成分。事實上,整個 Mozilla Web 浏覽器就是作為一個 XUL 應用程序編寫的(但 Firefox 並非如此)。用 XML 指定了一個 XUL 應用程序,定義了每種組件。Deer Park 對 XUL 作了一些重要的改進,包括動態覆蓋和透明背景,增強了在結合及表示 XUL 組件方面的靈活性。XUL 和另一種基於 XML 的聲明性語言 Extensible Binding Language(可擴展綁定語言,XBL)密切結合,允許指定用 XUL 表示的組件的特殊行為。Mozilla 還使用資源描述框架(RDF)管理 XUL 中使用的半結構化數據。RDF 是一個具有 Web XML 序列化的元數據系統,即用於描述 Web 資源形式化陳述集合的模型。
結束語
可以看到 Firefox 對 XML 的支持是廣泛而深入的。本文概要介紹了這些特性。後面的文章將更詳細地描述這一領域,並提供 Firefox 1.0 或 Deer Park 的代碼片段。對於 XML 開發人員來說這是激動人心的一刻,因為 XML 正推動下一代 Web 技術的發展,Firefox 用戶將泰然自若地利用這些進展。