Can you summarize the following document?
        
  實現SAX了的解析器擁有事件驅動式的API,並像流讀取器那樣工作。由使用者定義回撥函式,解析時,若發生事件的話會被呼叫。SAX事件包括:  事件在遇到任一XML特性時觸發,以及遇到他們結尾時再次觸發。XML屬性也作為傳給元素事件資料的一部分。  SAX執行時是單向的;解析過的資料無法在不重新開始的情況下再次讀取。

  不像 DOM,對於SAX並沒有「正式的」規格。Java對於SAX的實現被認為是一種規範,在其他語言的實現嘗試遵循著該實現的程式,必要時根據語言差異而調整。

  SAX解析器在某些方面優於DOM風格解析器。SAX解析器的記憶體使用量一般遠低於DOM解析器使用量。DOM解析器在任何處理開始之前,必須把整棵樹放在記憶體,所以DOM解析器的記憶體使用量完全根據輸入資料的大小。相對來說,SAX解析器的記憶體內容,是隻基於XML檔案的最大深度(XML樹的最大深度)和單一XML專案上XML屬性儲存的最大資料。這兩個總是比整顆解析樹本身還小。  因為SAX事件驅動的本質,處理檔案通常會比DOM風格的解析器快。記憶體存取耗時,所以DOM較大的記憶體使用也是一個效能議題。  因為SAX的本質,從磁碟串流讀取是可行的。無法放入記憶體的XML檔案只可能使用SAX解析器(或另外的串流XML解析器)來處理。

  SAX事件驅動的模型對於XML解析很有用,但它確實有某些缺點。  某些種類的XML驗證需要存取整份檔案。例如,一個DTD IDREF屬性需要檔案內有專案使用指定字串當成DTD ID屬性。要在SAX解析器內驗證,必須追蹤每個之前遇過的ID和IDREF屬性,檢查是否有任何相符。更甚者,一個IDREF找不到對應的ID,使用者只會在整份檔案都解析完後才發現,若這種連結對於建立有效輸出是重要的,那用在處理整份檔案的時間只是浪費。  另外,某些XML處理僅要求存取整份檔案。舉例來說,XSLT及XPath需要能夠任何時間存取任何解析過的XML樹。當SAX以用來建構此樹時,DOM解析器在設計上已經是如此了。
Simple API for XML(簡稱SAX)是個循序存取XML的解析器API。SAX提供一個機制從XML檔案讀取資料。它是除了文件物件模型(DOM)的另外一種流行選擇。