亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪(fǎng)問(wèn)板塊 發(fā)新帖
查看: 2767 | 回復(fù): 0
打印 上一主題 下一主題

Sun 的 Java 和 XML API:孰功孰過(guò)? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-01-27 15:21 |只看該作者 |倒序?yàn)g覽

[color="#996699"]Brett D. McLaughlin, Sr.
(
[email=brett@newInstance.com?subject=Sun%20%E7%9A%84%20Java%20%E5%92%8C%20XML%20API%EF%BC%9A%E5%AD%B0%E5%8A%9F%E5%AD%B0%E8%BF%87%EF%BC%9F&cc=dwxed@us.ibm.com][color="#5c81a7"]brett@newInstance.com[/email]
), 作家兼編輯, O'Reilly Media, Inc.
Brett
McLaughlin 從 Logo 時(shí)代就開(kāi)始使用計(jì)算機(jī)。(還記得那個(gè)小三角嗎?)近年來(lái)他已經(jīng)成為 Java 技術(shù)和 XML
社區(qū)最知名的作家和程序員之一。他曾經(jīng)在 Nextel Communications 實(shí)現(xiàn)過(guò)復(fù)雜的企業(yè)系統(tǒng),在 Lutris
Technologies 編寫(xiě)應(yīng)用程序服務(wù)器,最近在 O'Reilly Media, Inc. 繼續(xù)撰寫(xiě)和編輯這方面的圖書(shū)。在他的新書(shū)
Head Rush Ajax 中,Brett 與暢銷(xiāo)書(shū)作家 Eric 及 Beth Freeman 為 Ajax 帶來(lái)了獲獎(jiǎng)的創(chuàng)新方法
Head First。他的上一本書(shū) Java 1.5 Tiger: A Developer's Notebook 是第一本可獲得的關(guān)于最新版本 Java 技術(shù)的書(shū)籍,而他的經(jīng)典著作 Java and XML 仍然是在 Java 語(yǔ)言中使用 XML 技術(shù)的權(quán)威圖書(shū)。


回顧古老的 JAXP


對(duì)
于剛接觸 Java 和 XML 的程序員(或者通過(guò) Sun 和 J2SE 才接觸到 XML 的程序員)來(lái)說(shuō),都有必要簡(jiǎn)要回顧一下早期的
JAXP。那時(shí),JAXP 是 Java 和 XML 領(lǐng)域中排行第三的 API,風(fēng)靡程度僅次于 SAX(Simple API for XML)和
DOM(Document Object Model)。JAXP 的目標(biāo)非常簡(jiǎn)單:使 SAX 和 DOM 的使用更加簡(jiǎn)單,尤其是在供應(yīng)商中立領(lǐng)域。


JAXP 是一個(gè)包裝器 API


最初,JAXP 的目的僅僅是向 SAX 和 DOM 提供便利性和供應(yīng)商中立性。根據(jù)這一點(diǎn),JAXP 從未想過(guò)要替代 SAX 或 DOM;事實(shí)上,JAXP 在其早期版本中擁有一些方法,getXMLReader() 和 getDOMParser() 就是其中的兩個(gè)。 顯而易見(jiàn),這些方法的存在表明 JAXP 的作者希望 開(kāi)發(fā)人員使用 JAXP,然后操作底層的 SAX 和 DOM 實(shí)現(xiàn)類(lèi)。



有一點(diǎn)值得注意,雖然 JAXP
在這些年中不斷地加入大量的功能,但是這兩個(gè)方法從未修改過(guò)。有的人會(huì)說(shuō)這不過(guò)是出于向后兼容性的考慮,不過(guò)這確實(shí)反應(yīng)了 JAXP 從未打算將
SAX 或 DOM 取而代之。JAXP 只不過(guò)是將它們封裝起來(lái),這樣開(kāi)發(fā)人員就不必使用大量特定于供應(yīng)商的代碼來(lái)調(diào)用 SAX 或 DOM了。


JAXP 提供了供應(yīng)商中立性


在早期的 Java 和 XML 編程中,存在大量
的 XML 解析器(最初的 Xerces 和 XML4J,Sun 公司的 Crimson,Oracle 公司的 XML
解析器,以及一些如今人們從未聽(tīng)過(guò)的解析器。)當(dāng)我們編寫(xiě)一個(gè)與 XML 協(xié)作和交互的應(yīng)用程序時(shí),需要將 SAX 和 DOM API
連接到這些解析器實(shí)現(xiàn),通常所使用的方法是將解析器類(lèi)名告知 SAX 或 DOM,有點(diǎn)類(lèi)似如下的方式:


     
         
            
         
     
     
             Parser parser = new org.apache.xercers.parsers.SAXParser();
              
                 



注意:我有意使用了較舊的 SAX Parser 接口;它是舊的 SAX 1 解析類(lèi),在 JAXP 成為問(wèn)題的時(shí)期所有人都在使用它。


JAXP 引入了一個(gè) javax.xml.parsers.SAXParserFactory 系統(tǒng)屬性,它允許我們指定解析器工廠(chǎng)實(shí)現(xiàn)(工廠(chǎng)中提供了想要使用的解析器)?梢酝ㄟ^(guò)一個(gè) System.setProperty() 系統(tǒng)屬性指定工廠(chǎng),也可以通過(guò)某些位置下的 jaxp.properties 文件來(lái)指定(本質(zhì)上說(shuō),即應(yīng)用程序類(lèi)路徑中的任何位置)。


無(wú)論采用何種方式指定這一屬性 — 或者其對(duì)應(yīng)的 DOM 屬性 javax.xml.parsers.DocumentBuilderFactory — 都需要避免在解析代碼中出現(xiàn)任何類(lèi)名。這也是 JAXP 存在的首要原因:防止將此類(lèi)信息直接放入代碼。可以通過(guò)改變屬性值來(lái)方便地修改各種屬性,或者甚至建立多個(gè) jaxp.properties 文件用于不同的解析器實(shí)現(xiàn),并且在需要時(shí)對(duì)它們進(jìn)行切換。




     
         
            
         
     
   

   

     
         
            
         
     
   


            
                 
                     
                        
                        
                     
                 
               

   
                 



JAXP 現(xiàn)狀


對(duì)
于 Sun 公司推出 JAXP
的最初目的,您可以執(zhí)有自己的看法,甚至可以否定其價(jià)值,但是此時(shí)這已經(jīng)沒(méi)有什么實(shí)際意義了。真正具有現(xiàn)實(shí)意義且值得討論的是:JAXP
如今的角色是什么?以及人們正在如何使用它?如今,所有的 Java 發(fā)行版毫無(wú)例外的將 JAXP 囊入其中,顯然 Java EE(J2SE
and Java Platform, Enterprise Edition 5)、Java Platform 和 Java ME(Java
ME)不包括在內(nèi),大約 95% 的 Java 和 XML 開(kāi)發(fā)人員都在使用 JAXP。


JAXP 作為 SAX 和 DOM 的替代



著時(shí)間的推移,JAXP 已不再封裝 SAX 和 DOM,而是在逐步取代它們。現(xiàn)在我們需要記住,JAXP 本身并不是一個(gè)真的解析 API(在需要
SAX 或 DOM 解析器運(yùn)作的情況下)。因此 JAXP 永遠(yuǎn)都無(wú)法從功能上取代 SAX 或 DOM;然而,它可以在實(shí)際應(yīng)用中 取代它們,開(kāi)發(fā)人員完全可以停止使用 SAX 包(org.xml.sax)或 DOM 包(org.w3c.dom)中的方法或類(lèi)。



驗(yàn)證這點(diǎn),其中一個(gè)方法就是詢(xún)問(wèn)開(kāi)發(fā)人員。因?yàn)?Sun 公司在促銷(xiāo)(可以這樣理解)自己的 API,而且 JAXP 與當(dāng)前版本的 Java 技術(shù)
“綁” 在了一起,所以許多開(kāi)發(fā)人員都是通過(guò) JAXP 接觸 XML 的。自然而然,他們開(kāi)始學(xué)習(xí)使用 JAXP,甚至大多數(shù)已經(jīng)牢固掌握 SAX
和 DOM 的開(kāi)發(fā)人員也覺(jué)得 JAXP 更加好用。事實(shí)上,許多開(kāi)發(fā)人員都完全沒(méi)有意識(shí)到 SAX 和 DOM 是 JAXP 的基礎(chǔ)!


所有這些使 SAX 和 DOM 在 JAXP 的光彩下逐漸離開(kāi)人們的視線(xiàn)。對(duì) ContentHandler 和 DOMImplementation
的談?wù)撘殉闪俗蛉拯S花,或者至少是相當(dāng)高端的 Java 和 XML 程序員才會(huì)知道這些。這甚至與 5 年之前的相互抗衡的情形迥然不同,那時(shí)
JAXP 仍處于演化和起步階段,除了 JAXP 之外開(kāi)發(fā)人員通常至少會(huì)對(duì) SAX 和 DOM 中的一種偏愛(ài)有加(許多情況下是兩種)。


是添加了更多功能,還是維持原狀?


然而,比起相互抗衡更加重要的一點(diǎn)是:甚至有人
使用 JAXP — 而不是直接使用 SAX 和 DOM,或使用 JAXP 附帶的那些 API — 這極大地限制了 XML 編程和解析功能。因?yàn)?br /> JAXP 確實(shí)只是一個(gè)包裝器 API(無(wú)論人們?nèi)绾问褂盟,它無(wú)法使用 SAX 和 DOM 提供的任意選項(xiàng)。雖然我們可以在 JAXP
上設(shè)置解析器的特性和屬性,并能處理內(nèi)容和基本的錯(cuò)誤處理,不過(guò) SAX 尤其提供了大量的與語(yǔ)法相關(guān)的事件(DTD 和
模式)和更高級(jí)的詞法事件(如處理指令)。訪(fǎng)問(wèn)這些事件的惟一方式是直接操作 SAX XMLReader 接口。


請(qǐng)記住,我并不提倡將 JAXP 一棒子打死。我們可以將 JAXP 用作它的原始目的 — 訪(fǎng)問(wèn)解析器,而不必直接處理代碼中的供應(yīng)商解析器類(lèi) — 然后使用 JAXP 的 getXMLReader() 訪(fǎng)問(wèn)獲取 SAX XMLReader 接口。這樣,便可以輕松地直接操作 SAX — 但是所有這些需要我們首先了解如何操作 XMLReader 接口。



有這些,我們可以看出 JAXP 表面是添加了一些功能 — 供應(yīng)商中立性,一些便利性和幫助器方法 —
但是實(shí)際上可以移除這些內(nèi)容。如果開(kāi)發(fā)人員過(guò)分依賴(lài)于 JAXP(這已經(jīng)成為了目前的問(wèn)題),那么他們將非常容易忘記或甚至沒(méi)有意識(shí)到 JAXP
并未公開(kāi) SAX 和 DOM 中的大量功能。因此,雖然 JAXP 本來(lái)是用于提供功能,但是它實(shí)際上減少了 Java 和 XML 程序員的工具。


開(kāi)放源碼問(wèn)題?



將這個(gè)問(wèn)題留在最后討論,其主要原因是它涉及到道德、合法性和各種會(huì)讓大多數(shù)程序員覺(jué)得枯燥和無(wú)聊的內(nèi)容。而且這似乎還不夠,開(kāi)放源碼還將哲學(xué)牽扯進(jìn)來(lái)。
總之,我想知道 Sun — 雖然一直將法律放在首位 — 是否沒(méi)有違反法律精神(開(kāi)放源碼和社區(qū)方面)。當(dāng)他們將 SAX API
作為基石,然后開(kāi)始在 JAXP 中添加功能,我想知道他們?yōu)槭裁礇](méi)有將這些功能融入到 SAX 中去?在 JAXP
中添加方法調(diào)用這些新功能(就是他們的大多數(shù) API)也是完全可行的。但是這些功能就不能作為整體提交給 SAX API 嗎?



實(shí)上,如果 JAXP 的實(shí)用性是與 Sun
希望我們相信的那樣(說(shuō)實(shí)話(huà),我沒(méi)有必要討論其實(shí)用性),那么為什么他們不將這些功能提供給我們。我們至少有時(shí)會(huì)傾向于單獨(dú)使用 SAX,而不需要
JAXP。為了避免任何可能的混亂,我們?nèi)匀粫?huì)選擇使用 Java 技術(shù),因此 Sun 公司通過(guò) SAX(而不僅僅是
JAXP)將這些功能提供出來(lái)并不會(huì)失去任何業(yè)務(wù)(這甚至是一個(gè)笑話(huà),就像 Sun 不再賣(mài) Java
技術(shù))。還有,這個(gè)問(wèn)題雖然相當(dāng)細(xì)微,但是卻值得思考:如果 JAXP 提供了如此巨大的價(jià)值,難道其中一些價(jià)值就不能分給底層的 API
嗎?JAXP 將仍然受益于在 SAX 和 DOM 之間輕易轉(zhuǎn)換,不過(guò)對(duì)于 XML 社區(qū)來(lái)說(shuō)將會(huì)是一個(gè)很大的欣喜。




     
         
            
         
     
   

   

     
         
            
         
     
   


            
                 
                     
                        
                        
                     
                 
               

   
                 



結(jié)束語(yǔ)


我并不想在這里發(fā)表激昂的言論(不過(guò)我不會(huì)介意一些讀者在
[color="#5c81a7"]討論論壇
上這樣做),但是我仍然要質(zhì)疑 JAXP — 和其他一些同一性質(zhì)的 Sun API — 以及它從一個(gè)包裝器 API 演化成為 “全能” 解析器
API。我認(rèn)為 JAXP 埋沒(méi)了 SAX 和 DOM 自身的價(jià)值,卻沒(méi)有換回任何有意義的價(jià)值。我很樂(lè)意 Sun 將 JAXP
作為針對(duì)供應(yīng)商中立的一個(gè)封裝層,并將解析方法和行為穩(wěn)固地留在 XML 解析器和 API 供應(yīng)商的領(lǐng)土中。


     
         
            
            
         
     
   

?   

當(dāng)
然,Sun 公司并未向我致電征求我的意見(jiàn),而且 Scott McNealy 肯定也從未聽(tīng)過(guò)我的名字,因此對(duì)于 Sun 的做法我們也無(wú)能為力
。然而,設(shè)想如果您是一名 Java 和 XML 程序員,這至少會(huì)讓您對(duì) JAXP 的使用產(chǎn)生疑問(wèn) —
這就是他們的意圖。如果程序員還要(重新)學(xué)習(xí) SAX 和 DOM 的話(huà),我們就會(huì)明智地開(kāi)始使用
JAXP,事實(shí)上是為了更好地編寫(xiě)應(yīng)用程序,因?yàn)槲覀兡軌蛟谳^低等級(jí)操作 XML 文檔,而且能夠更加游刃有余。然后,甚至連 Scott
都會(huì)注意到我們所編寫(xiě)的優(yōu)秀應(yīng)用程序,難道不是嗎?因此您告訴我:這有什么意義嗎?
               
               
               

本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u3/110548/showart_2162197.html
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP