• 沒有找到結果。

XML的處理

在文檔中 XML文件搜尋引擎的研究 (頁 13-16)

二、 背景

2.1 XML

2.1.2 XML的處理

XML 文件,如同前面提到的特性,具備跨平台以及利用自訂標籤來達到資料 描述的能力,如果單純以普通文字編輯器開啟 XML 文件,XML 文件本質上是一個 內容包含許多特殊標籤的文字檔。因此,利用 XML 文件的特性來處理資料時,

就必須依賴一些工具的協助,才能從這個單純的文字檔中取出相關的資訊,也 才 能 發 揮 XML 文 件 的 功 能 。 這 類 的 工 具 一 般 稱 為 XML 文 件 的 解 析 器

(Parser),主要有兩種介面,其中一種是由 W3C 所制定的介面(Interface)

規格開發而成的文件物件模型(Document Object Model,DOM)[6],另一種稱 為簡單 XML 應用程式介面(Simple API for XML,SAX)[7]。SAX 和 DOM 兩者都 提供程式設計師處理 XML 文件資訊。以下將就這兩個主要的文件處理介面提出 說明。

2.1.2.1 文件物件模型(Document Object Model,DOM)

圖3 表示 XML 文件、剖析器、DOM 物件樹和應用程式之間的關係。從圖中我 們可以清楚的看到XML 文件經由剖析器(Parser)剖析之後,形成一個 DOM 樹狀結構,如圖 2,此一樹狀結構將文件中的元素、屬性、資料...等以階層式節 點方式加以儲存,應用程式則藉由存取樹中的節點而讀出資料或寫入資料。

圖 3 DOM 介面運作模式

資料來源:http://msdn.Microsoft.com 使用 DOM 的優點如下:

z 可以任意擷取節點資訊 z 做 XSL 轉換比較容易 缺點如下:

z 需要額外記憶體,不利於大文件的解析

z 處理速度較慢,因為要預先在記憶體建構解析樹

2.1.2.2 簡單 XML 應用程式介面(Simple API for XML,SAX)

SAX 的全名是 Simple API for XML,不像 DOM 是 W3C 所制定出來的一個標 準,而是由一個名為 XML-DEV 的非正式團體所發表。SAX 不僅不會在記憶體中特 地根據 XML 文件的元素內容來建立樹狀結構,還可以為應用程式提供最有效率 的資料儲存方式。

圖 4 中以事件為基礎的解析程式會將事件傳送給應用程式。這裡的事件和 使用者介面所產生的事件(如視窗程式中按鈕的 onClick 事件)很類似。事件 的功用是通知應用程式發生了某些狀況,應用程式則必須加以回應。在瀏覽器 中,事件通常是為了回應使用者的動作而產生的,例如當使用者按下按鈕時,

就會引發 ONCLICK 事件。

圖 4 SAX 介面運作模式

資料來源:http://msdn.Microsoft.com

但在處理 XML 解析程式時,事件和使用者介面無關,而是與從 XML 文件中 讀取的元素有關。在此會出現的幾個主要事件包括:

„ 文件的起始(startDocument())

„ 文件的結束(endDocument())

„ 元素的起始標記(startElement())

„ 元素的結尾標記(endElement())

„ 元素內容(characters())

„ 解析錯誤(warning(),error()及 fatalError())

圖 5 所示為 SAX 解析程式的事件觸發順序。

當解析程式每遇到一個元素節點就會觸發一次 startElement(),所以圖 5 中遇到 school 節點時,觸發 startElement()事件。同樣地接下來的 student,

name 以及 fname 都跟 school 一樣,觸發 startElement()事件,直到 John 這個 Text 節點,解析程式會觸發 characters()事件,然後接下來 fname 以及 lname 兩個結束標籤,解析程式會依序觸發兩次 endElement()事件。如此週而復始在 整 個 文 件 中 , 不 斷 觸 發 一 系 列 的 startElement() , endElement() 以 及 charactres(),直到文件結束最後會觸發唯一的事件 endDocument()為整個解析 過程的結束。

圖 5 SAX 解析程式的事件觸發順序 使用 SAX 的優點如下:

z 速度快

z 不需額外的記憶體,可以處理較大檔案 缺點如下:

z 無法隨意取得節點資訊

z 需要額外的物件維持解析過程中的節點資訊

基於以上優點本論文採用 SAX 解析程式,做為 XML 文件編碼過程的主要工 具。

在文檔中 XML文件搜尋引擎的研究 (頁 13-16)

相關文件