XML 文件和樣式是彼此互補的。因為 XML 並不是專門為了呈現資料而設計的語言,所以大部分的 XML 文件包含了沒有特 定的呈現指令的資料。 XML 的強大威力並不是著墨於資料的呈現能力,而是在於將資料封裝成可以被驗證與輕鬆移動的格式。 如果我們想要在瀏覽器中呈現 XML 的資料,那麼將這些 XML 資料轉成另一種專為資料呈現並且利用 XML 格式的語言,像是 XHTML,將會比較有意義。XSL(Extensible Stylesheet Language)就是為了將 XML 轉換成 XHTML 與其他 XML 格式,好讓 XML 可以呈現於瀏覽器中所設計。目前,XSL 主要是將 XML 轉換成 XHTML。而在將來,我們可以預期 XSL 會將 XML 轉換成普通語 言或其他格式。而 CSS 是為了能夠將一致的外觀應用到屬於 Web 網站的所有文件上而設計的。
4.1 認識 CSS
CSS (Cascading Style Sheets)主要是將“格式資訊”從文件主體中抽離出來,將它分開儲存在STYLE元素或另一個獨立的 文件中。雖然在內部的樣式,使用STYLE屬性來表示實際元素的格式,但它的效果仍然不變。
CSS 文件可以為任何的 HTML 元素定義其樣式。因此,我們可以將 h1 元素定義成綠色、字型大小為 5。然後這個樣式就 可以應用到網站上的每一個 h1 元素。 CSS 文件可以將整個網站中的文件定義一致的樣式,而不用個別為了每一份網頁中的每 一個 h1 元素輸入相關資訊。如果必須為某個 h1 元素更改樣式,則只需在 CSS 文件中進行更改即可。如果必須為特定網頁的 某個或多個 h1 元素覆蓋掉定義於 CSS 文件中的樣式,以上述的做法即可達成。
使用 CSS 最大問題之一就是並非每一種瀏覽器都有支援 CSS。目前 Microsoft Internet Explorer 5 對 XML 加 CSS 的 支援還不夠完善,如果在 IE 5 中想把美化過的XML文件印出來,唯一的辦法是用 XSL 先轉 HTML。用 CSS 設定外觀的 XML 文 件在 IE 5 中只能在螢幕上看,無法印出。
如果你想建立 XHTML文件,你可以使用 CSS 文件來定義 XHTML 資訊的呈現方式。雖然 CSS 能夠作用於 XHTML 文件, 但是它們卻無法為不含呈現相關資訊的 XML 文件提供任何服務。對於不含呈現相關資訊的 XML 文件,你必須使用 XSL 文件。
下面為 XML 搭配 CSS 的例子,來看看 CSS 到底能作哪些事。我們將 CSS 定義的樣式獨立儲存成一個檔案, 然後在 XML 文件指定使用 CSS 樣式檔案。指定的方法是在程式一開始,在宣告 XML 的版本後,加上一行指定的文字,文字如 下:
<?xml-stylesheet type="text/css" href="xml-css.css"?>
"href" 就是指定 CSS 樣式檔案的檔名,下面是此例子的 XML與 CSS 的原始碼,而在這裡可以看到<結果的顯示>。
4.2 認識 XSL
XSL 是專門為 XML 設計的樣規語,也是在 CSS 之外,另一個替 XML 穿戴打扮的選擇,它提供與 CSS 一樣的格式化能力 與彈性(甚至更多),但是它使用的是不同的處理方式。XSL 建立在樣板(template)的想法上。 XSL 本身便是一項 XML 的應用, 直接架構在 XML 的語法之上。它一共分做兩部分:第一部分負責將 XML 原始碼轉換為另一種格式,而第二部分(稱做“FO” ﹝Formatting Object﹞;打樣物件)則提供了大量的打樣指令,可用來配合印刷或螢幕顯像,精確地設定外觀式樣(譬如字的 大小、擺放的位置等),是一種所謂“device-independent”的格式。第一部分的轉換語法,可以用來為第二部分服務,將 XML 語言變形為打樣指令。
但是因為種種的原因,使得 FO 的部分已變得不再重要,所以在 1999 年 4 月,W3C 正式將 XSL 標準的前半部,關於轉 換語法的敘述,從 XSL 中分出來,並為它取了一個新名字,叫 XSLT (Extensible Style Language for Transformation) 也 就是「轉換」、「變形」的意思。XSL 打從一開始,就是 XSLT 這部分比較發燒,所以若是提到 XSL,指的就是 XSLT。
下列我們可以看到在目前的條件下,XSLT 能透過哪幾種方式來替我們的網站效勞。依 XSLT 轉換動作發生的地點來分析, 可分為:
(A) Server 端 XML 文件在下載到瀏覽器之前,先以 XSLT 轉成 HTML;依轉換動作發生的時間,又可分為:
(1)動態及時產生 在瀏覽器向 server 送請求的當下,以 XSLT 處理器軟體將 XML 立即轉換為 HTML,即刻送出。當網頁中 有動態性資料要及時插入、或當 XML 是從資料庫及時取得的場合下,最適合這種運作方式。負責輸出 XML 的資料庫軟體, 則很可能存在於另一台機器上,以 XML 來向負責 XML → HTML 轉換的 server 傳遞資料。這是現在最熱門的三層式、n 層 式(3-tier,n-tier)的 server 構築方式。大型資料庫網站,或大企業的 internet、extranet 網站,較適合這種模式。
(2)批次產生 如果 XML 文件事先都已寫妥,一一存放在檔案裡,而非及時取得,或隨時不斷更新,我們便可用批次轉換的做 法,事先將 HTML 檔準備好。轉換的工作則可依實際需要,在固定的時段自動化的執行。這麼做的好處是,server資源可獲 得最大的節約,更不需要使用高性能的 server 機,任何能跑 XML 解析器和 XSLT 程式的電腦都行,甚至可以在個人家中的 PC上來做,轉換好了以後再把 HTML 檔上傳到 server 即可。
(B) Client 端如果瀏覽器直接支援 XML 與 XSLT,XML 原始碼和 XSLT 樣規便可以向圖檔一樣,讓瀏覽器直接下載下去,一切 轉換工作由瀏覽器代勞。這是最理想的狀況,但目前唯一支援 XSLT 的瀏覽器是 IE5,而不使用 IE5 的人大有人在;更何 況,IE5 對 XSLT 的支援本來就不完整,有些部分更以過時,因此讓瀏覽器直接轉換的做法就目前而言實用性仍相當有限。
(C) 雙管齊下 融合以上 server 與 client 端兩種運作模式,根據瀏覽器的身分即時決定是否將 XML 先轉換為 HTML,或直接 交由支援 XSLT 的瀏覽器下載。server 甚至可以更進一步,按照各個 client 軟體的特性,產生不同性質的 HTML,讓訪 客享受最效佳的閱讀效果,譬如支援 CSS 的瀏覽器,便可以配合下載美美的 CSS 樣規;如果碰到不支援 CSS 的瀏覽器, 就給它含有 <font> 標籤的網頁。如同第一種運作模式(即時轉換),這種做法需要較高的技術水準,甚至需要重金 添購專業軟體,更少不了高檔的硬體做後盾。
下面是 XML 搭配 XSL 的例子,從這個例子可以看出XSL與CSS的差別。由 XML 的原始碼可以看到,此檔案包含許多的 標籤,但是以瀏覽器來看的結果又不太一樣,結果只秀出其中兩項標籤的內容而已。會造成此項結果的原因在XSL的檔案中,只 有指定秀出此一標籤的內容值,其餘的都沒有指定。依據 XSL 的設定不同,看到的結果也會不一樣。
下面是此例子的 XML 與 XSL 原始碼 <結果的顯示> <註四:若看不到結果顯示的請看這邊>
<註四> 建議執行環境:
1. 作業系統:win2000。
2. 瀏覽器:IE 5.50.4807.2300 (SP2)以上的版本。
3. MS parser: update to 3.0 version。
若要看到執行的結果,就必須安裝parser才可以,在這邊建議安裝MSXML parser,安裝方法如下:
1. 連到http://msdn.microsoft.com/downloads/default.asp。
2. 搜尋msxml。
3. 下載 MSXML Parser 3.0 Service Pack。
4.3 CSS 和 XSL 相同的地方
XSL 和 CSS 都屬於樣規的一種。樣規是用來設計外觀的,它並不影響原來的 XML 原始碼。 XSL 雖然用的是轉換的方式, 但「轉換」並不代表原始碼會遭到竄改。通常 XSL 轉換後的輸出碼,是存到另一個新的檔案、或暫存在瀏覽器的記憶體中,原 來的 XML 檔案內容則保持不變。
4.4 CSS 和 XSL 不同的地方
XSL 採用的是轉換的方式,將一種格式的 XML,轉換為另一種。就好比將 Big5 碼繁體中文,轉換為 UTF-8 碼一樣。CSS 則來自完全不同的理念:它不含任何轉換的動作,只針對 XML 文件中各個成份的外觀屬性,一一加以設定。瀏覽器便按照 CSS 樣規裡的指示,將 XML 文件呈現設定的式樣。整個過程中,沒有任何新碼產生。
XML 配上 CSS、ECMAScript 和 DOM 可以營造出類似 DHTML 般的動態效果。XSL 轉換則是死的,沒有互動性。另一個區 別是: XSL 樣規都是 XML 文件,完全照 XML 的語法來;相對地,CSS 在語法上自成一格,和 XML 的寫法大相逕庭。
CSS 只對 XHTML 元素定義排版上的樣式,而定義於 XSL 文件中的樣式則可以適用於整份 XML 文件。此外,XSL 文件可 以利用 CSS 中所指定的樣式來從 XML 資料產生輸出的程式碼。 XSL 文件必須與參照它的檔案放置在同一部 Web Server上。
沒有留言:
張貼留言