曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
開發了一個基于事件的X M L解析的標準接口,即所謂的SAX 1.0: The Simple API for XML
(S A X),現在已經用J a v a、P e r l和P y t h o n實現,而且支持大量不同的X M L解析器。S A X是P e t e r
M u r r a y - R u s t將三個不同的X M L解析器(每個都有專用的A P I)集成到J U M B O的結果—他計劃
為解析X M L創造一個通用的、基于事件的Java API。他開始與Tim Bray和David Megginson進行
了設計上的討論,而后者在1 9 9 8年初用了近一個月的時間編寫了最初的J a v a實現。此后, S A X
通過許多人的努力得到了擴充,成為了一種強大的X M L數據處理辦法(大多數事件驅動的解析
器現在都支持/使用這種A P I)。我們將在第6章詳細討論S A X。
2.13.2 基于樹的解析器
軟件工程中使用最為廣泛的一種結構就是簡單的層次樹。所有格式正規的X M L數據都被定
義為類似的樹,這樣一來,不論是普通的還是成熟的算法都可以用來遍歷X M L文檔的節點、搜
索內容、編輯文檔樹。這些樹的算法得益于數年的理論研究和商業開發。使用這種方法的X M L
解析器通常遵守W 3 C的文檔對象模型(Document Object Model,D O M)。D O M是一種獨立于平
臺、語言的接口,它能夠對樹結構的文檔進行操作。另一方面, D O M樹在文檔能夠被操作之前
必需在內存中生成—所以高性能的虛擬內存支持對于大型文檔來說是非常必要的。一旦樹被生
成,應用程序就可以通過相關的A P I訪問D O M。我們將在第5章詳細討論D O M。許多這類解析器
事件都建立在事件驅動的X M L解析器的基礎之上,它們提供了為構建D O M樹需要的所有信息。
M i c r o s o f t曾經開發出一個被稱作M S X M L的基于J a v a的早期X M L解析器。之后, I n t e r n e t
Explorer 5(I E 5)包含了對X M L的支持,但使用的是另一套解析器。微軟推薦將D a t a C h a n n e l
(它吸收了I E 5的解析器的功能特性)提供的X J P a r s e r作為I E 4的更新組件。此外, M i c r o s o f t的
O ffice 2000還把X M L當作自己的數據交換格式使用,這極大地促進了X M L的推廣。同時,要明
確的是,雖然X M L的許多方面與推薦標準的最終要求還有一定差距,但M i c r o s o f t正在走到這些
標準的前面,而且在M i c r o s o f t的實現形式與正式的W 3 C標準之間存在不少差異。
N e t s c a p e承諾在下一代瀏覽器中將完全支持XML 1.0和X S L,這正在作為一個開放資源項目
由M o z i l l a組織著手進行。該瀏覽器當前的代號為“ S e a M o n k e y”(使用N G L a y o u t / G e c k o布局引
擎)。目前,它正在處于開發當中(尚未進入b e t a 測試階段),而且最近的公司變動也給
A O L / N e t s c a p e的瀏覽器的未來蒙上了陰影。
Fujitsu Laboratories曾經開發出一種高級S G M L / X M L瀏覽器H y B r i c k。它支持高級的鏈接和
格式功能,它使用的是D S S S L(ISO 10719)顯示法和X L i n k / X P o i n t e r引擎。該瀏覽器基于J a m e s
C l a r k的S P和J a d e,能夠處理有效的和格式正規的X M L文檔。大家可能想象得到,這個瀏覽器對
日文的處理和英文一樣優秀。
2.13.3 解析器基準測試
兩位開發者最近完成了X M L解析器的基準測試,它檢驗了L i n u x和S o l a r i s系統上幾種不同的解
46使用XML 高級編程
下載
析器。結果(可能正如大家預料的一樣)表明用C語言編寫的產品(尤其是James Clark的e x p a t)仍
然是最快的,然后是J a v a,最后是腳本語言(P e r l和P y t h o n,兩個實際上都是e x p a t解析器的變種)。
L i n u x基準測試是由Clark Cooper執行和匯總的,他測試了6種解析器:
• Expat(James Clark用C語言編寫)
• RXP(Richard To b i n用C語言編寫)
• XP(James Clark用J a v a語言編寫)
• XML4J(I B M用J a v a語言編寫)
• XML::Parser(Clark Cooper用P e r l編寫)
• Pyexpat(Jack Jansen用P y t h o n編寫)
S o l a r i s基準測試是由Steven Marcus執行和匯總的,它測試了上面除去R X P的所有產品,再
加上S u n的“x m l - t r 2”解析器(J a v a s o f t用J a v a寫成)。這些可以通過以下地址得到:
• Linux測試—h t t p : / / w w w. x m l . c o m / p u b / B e n c h m a r k / e x e c . h t m l
• Solaris測試—h t t p : / / w w w. a w a r e t e c h n o l o g i e s . c o m / X M L / x m l b e n c h / s o l a r i s . h t m l
下面我們看一看針對特定問題的X M L應用程序。
2.14 書籍目錄應用程序
書籍目錄應用程序是X M L如何用于傳統文檔標志和更為普通(和強大)的數據建模的簡單
例子。這個X M L詞匯表包括典型的書籍目錄元數據,也為向用戶的搜索要求發送結構化的價格
信息提供了基礎,它實現了在W W W上進行書籍交易,能夠為將書籍運送到商店生成包裝清單和
運送標簽,還可以在出版商和書店之間交換財務和訂單數據。我們將在下一章花費更多的時間
來分析這個應用程序,最終設計出一個能夠更加符合目錄需要的D T D。而現在,我們能夠以更
為簡單的方式來解決問題。
讓我們先從這個應用程序中的基本要素—書說起。根據本例的要求,我們忽略掉書本的
實際內容,但當然文本標記仍是S G M L和它的后繼者(比如X M L)的傳統用法。書籍包含一些
普通的目錄元數據,例如作者、出版商、出版日期、版權等等。
一旦我們開發出書籍的合理結構,我們就會在另一個層次—目錄對其進行修改。這一層
與其說是文本文檔,到更不如說它像傳統的數據庫,因此也包括了X M L數據的一些建模能力。
<Book>元素
首先,我們只使用簡單的子元素來創建< B o o k >元素:
程序清單2 - 1 4
第2章XML 語法使用47
下載
在上面的例子中有一個明顯的錯誤:所有合作作者都被匯總到了一個元素中。
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(20)