Mongoose House

          Technical Edition

          統(tǒng)計(jì)

          留言簿(4)

          積分與排名

          閱讀排行榜

          2006年8月23日 #

          使用Apache的mod_authn_dbd和PostgreSQL實(shí)施HTTP Basic登錄認(rèn)證

               摘要: 使用Apache的mod_authn_dbd和PostgreSQL實(shí)施HTTP Basic登錄認(rèn)證,同時(shí)做了到Tomcat的轉(zhuǎn)發(fā)。這樣,所有對(duì)Apache Http Server的請(qǐng)求都會(huì)轉(zhuǎn)發(fā)給Tomcat,而Apache Http Server就作為一個(gè)前端認(rèn)證的服務(wù)器使用。另外,在Tomcat的JSP中,使用request.getRemoteUser還可以取到登錄的用戶名。  閱讀全文

          posted @ 2011-03-26 20:33 Mongoose 閱讀(2196) | 評(píng)論 (0)編輯 收藏

          一段測(cè)試DiskIO的代碼

               摘要: 可以使用C標(biāo)準(zhǔn)庫(kù)(Windows-Based & Unix-Based兩方)的time函數(shù)取得精度為秒的時(shí)間,在Unix-Based系統(tǒng)中,使用gettimeofday函數(shù)取得更小精度的時(shí)間。
            閱讀全文

          posted @ 2011-03-26 20:16 Mongoose 閱讀(213) | 評(píng)論 (0)編輯 收藏

          Hadoop試用小記

               摘要: 最近嘗試在Windows環(huán)境下安裝了Hadoop,遇到一些困難,在此記錄一下以備忘。   閱讀全文

          posted @ 2010-07-07 10:05 Mongoose 閱讀(395) | 評(píng)論 (0)編輯 收藏

          云計(jì)算的NIST定義

               摘要: 美國(guó)國(guó)家標(biāo)準(zhǔn)及技術(shù)研究所信息技術(shù)實(shí)驗(yàn)室對(duì)云計(jì)算(Cloud Computing)的定義。  閱讀全文

          posted @ 2010-07-06 13:20 Mongoose 閱讀(910) | 評(píng)論 (0)編輯 收藏

          PHP安裝小記

               摘要: 安裝PHP的一些小的注意點(diǎn)。  閱讀全文

          posted @ 2010-07-05 15:19 Mongoose 閱讀(314) | 評(píng)論 (0)編輯 收藏

          Java應(yīng)用系統(tǒng)亂碼問題分析

               摘要: 本文章主要討論了在Java web系統(tǒng)中亂碼產(chǎn)生的內(nèi)在原理, 是認(rèn)識(shí)和解決亂碼問題的基礎(chǔ). 如果您對(duì)亂碼問題還沒有一個(gè)清晰的概念, 請(qǐng)嘗試閱讀本文. 另外, 本文也討論了最近流行的Ajax技術(shù)中的亂碼問題, 如果您在使用Ajax技術(shù)中遇到了亂碼, 本文對(duì)您也有一定的參考價(jià)值.  閱讀全文

          posted @ 2009-08-27 11:04 Mongoose 閱讀(1578) | 評(píng)論 (0)編輯 收藏

          Eclipse使用技巧之插件管理

               摘要: 新下載的插件PlugIn一定不要都放在原始的Eclipse目錄下去,一大堆,累死你:(  閱讀全文

          posted @ 2006-10-09 09:11 Mongoose 閱讀(413) | 評(píng)論 (0)編輯 收藏

          哪一種開發(fā)語(yǔ)言的薪水最高?

               摘要: 比較當(dāng)前幾種流行的開發(fā)語(yǔ)言的薪資水平  閱讀全文

          posted @ 2006-09-29 10:23 Mongoose 閱讀(1224) | 評(píng)論 (2)編輯 收藏

          并行程序測(cè)試

               摘要: 測(cè)試并行程序尤其困難。這是因?yàn)椴⑿袦y(cè)試程序本身就是并行程序,這種程序即難寫而且比順序執(zhí)行程序更容易發(fā)生不確定的問題。
          在這篇文章中將討論一些關(guān)于測(cè)試并行類的話題,提供一些構(gòu)建并行程序的技術(shù),這些技術(shù)使并行程序更容易被測(cè)試。  閱讀全文

          posted @ 2006-09-28 12:17 Mongoose 閱讀(1325) | 評(píng)論 (1)編輯 收藏

          修改Oracle字符集(character set)

               摘要: 本方法適用于Oracle9i, 10g以及XE. 在10.2.0.1.0下測(cè)試無(wú)錯(cuò). 需要注意的是, 使用此方法會(huì)破壞數(shù)據(jù)庫(kù)中的原有雙字節(jié)字符. 一種辦法是先將數(shù)據(jù)庫(kù)導(dǎo)出, 修改完字符集后再導(dǎo)入; 另一種辦法就是不管他, 就那樣使用. 一般如果是一個(gè)測(cè)試環(huán)境, 像方法二那樣就可以了, 但是可能某些表無(wú)法讀取, 需要注意.  閱讀全文

          posted @ 2006-09-25 15:02 Mongoose 閱讀(12623) | 評(píng)論 (2)編輯 收藏

          Unicode網(wǎng)頁(yè)中上傳下載文件時(shí)發(fā)生文件名亂碼的問題

               摘要: 最近有一個(gè)需要支持unicode的項(xiàng)目在上傳和下載文件時(shí)遇到文件名亂碼問題. 項(xiàng)目背景, 這個(gè)項(xiàng)目關(guān)鍵之處在于需要支持unicode以及支持Micorosoft Internet Explorer和Netscape Navigator兩種瀏覽器. 為了解決這個(gè)問題, 我對(duì)IE, NC另外加上Firefox進(jìn)行上傳和下載的文件名編碼的測(cè)試.  閱讀全文

          posted @ 2006-09-14 20:43 Mongoose 閱讀(10715) | 評(píng)論 (3)編輯 收藏

          Write Boring Code

               摘要: Tom Ball, Sun Microsystems公司的技術(shù)主管說(shuō)如何寫出更好的代碼.  閱讀全文

          posted @ 2006-09-13 10:13 Mongoose 閱讀(1505) | 評(píng)論 (7)編輯 收藏

          安裝weblogic petstore時(shí)發(fā)生的undocumented problem的解決辦法

          BEA公司為weblogic server準(zhǔn)備了petstore for weblogic供開發(fā)者安裝, 因?yàn)樽罱鼫y(cè)試Hyperic-HQ, 所以進(jìn)行了petstore for weblogic的安裝.

          首先, 需要下載Sun的petstore和在bea.com下載petstore for weblogic. 對(duì)應(yīng)weblogic 8.1服務(wù)器的petstore版本是1.3.2.

          下載后, 按照下載包中的readme.txt文件的提示一步一步安裝, 沒有什么問題, readme上說(shuō)得非常清楚. 但是到Step1的第12步和Step2的第7步卻無(wú)法啟動(dòng)weblogic服務(wù)器. 現(xiàn)象為, 啟動(dòng)后拋出如下異常.

          <2006/09/06?9時(shí)13分08秒?CST>?<Critical>?<WebLogicServer>?<BEA-000364>?<Server?failed?during?initialization.?Exception:weblogic.security.spi.ProviderInitializationException:?[Security:090314]Entitlement?Engine?unable?to?connect?to?the?embedded?LDAP?server
          netscape.ldap.LDAPException:?error?result?(
          50)
          weblogic.security.spi.ProviderInitializationException:?[Security:
          090314]Entitlement?Engine?unable?to?connect?to?the?embedded?LDAP?server
          netscape.ldap.LDAPException:?error?result?(
          50)
          ????????at?weblogic.security.providers.authorization.DefaultAuthorizationUtils.getEngine(DefaultAuthorizationUtils.java:
          130)
          ????????at?weblogic.security.providers.authorization.DefaultRoleMapperProviderImpl.initialize(DefaultRoleMapperProviderImpl.java:
          104)
          ????????at?weblogic.security.service.SecurityServiceManagerDelegateImpl.createSecurityProvider(SecurityServiceManagerDelegateImpl.java:
          242)
          ????????at?weblogic.security.service.SecurityServiceManager.createSecurityProvider(SecurityServiceManager.java:
          957)
          ????????at?weblogic.security.service.RoleManager.initialize(RoleManager.java:
          152)
          ????????at?weblogic.security.service.RoleManager.
          <init>(RoleManager.java:98)
          ????????at?weblogic.security.service.SecurityServiceManagerDelegateImpl.doRole(SecurityServiceManagerDelegateImpl.java:
          513)
          ????????at?weblogic.security.service.SecurityServiceManagerDelegateImpl.initializeRealm(SecurityServiceManagerDelegateImpl.java:
          409)
          ????????at?weblogic.security.service.SecurityServiceManagerDelegateImpl.loadRealm(SecurityServiceManagerDelegateImpl.java:
          700)
          ????????at?weblogic.security.service.SecurityServiceManagerDelegateImpl.initializeRealms(SecurityServiceManagerDelegateImpl.java:
          733)
          ????????at?weblogic.security.service.SecurityServiceManagerDelegateImpl.initialize(SecurityServiceManagerDelegateImpl.java:
          876)
          ????????at?weblogic.security.service.SecurityServiceManager.initialize(SecurityServiceManager.java:
          734)
          ????????at?weblogic.t3.srvr.T3Srvr.initializeHere(T3Srvr.java:
          822)

          這個(gè)問題的原因是petstore模板中的Critical密鑰已經(jīng)過(guò)期.

          解決辦法是找到weblogic的配置文件config.xml.
          修改其中的如下這行

          <EmbeddedLDAP Name="petstore" Credential="{3DES}78P9aVGmaIE="/>

          將其中的Credential屬性刪除即可. 再啟動(dòng)weblogic的時(shí)候, 服務(wù)器會(huì)重新自動(dòng)生成一個(gè)Credential.

          這個(gè)問題在petstore for weblogic的readme中并沒有提到. 因此不少同志在安裝的時(shí)候遇到這個(gè)問題. 在此進(jìn)行一下memo, 以饗后來(lái)人.

          posted @ 2006-09-06 10:48 Mongoose 閱讀(1460) | 評(píng)論 (0)編輯 收藏

          使用Hyperic-HQ解決應(yīng)用程序問題

               摘要: 在Weblogic 8.1上, 我們通過(guò)JDBC log得到的Connection Pool的信息非常有限, 那么如何能更多的得到數(shù)據(jù)庫(kù)連接的信息呢? 我們?cè)诰W(wǎng)上發(fā)現(xiàn)了一個(gè)開源工具Hyperic-HQ協(xié)助我們很好地解決了這次問題.  閱讀全文

          posted @ 2006-09-05 15:23 Mongoose 閱讀(8084) | 評(píng)論 (5)編輯 收藏

          高級(jí) Linux 命令精通指南

               摘要: 在 Sheryl Calish 撰寫的“Linux 文件命令精通指南”這篇出色的文章中,您學(xué)習(xí)到了一些對(duì)于 Linux 新手尤為重要的常用 Linux 命令。既然您現(xiàn)在已經(jīng)掌握了基礎(chǔ)知識(shí),下面我們將介紹一些更為復(fù)雜但卻非常有用的命令。  閱讀全文

          posted @ 2006-09-04 16:47 Mongoose 閱讀(440) | 評(píng)論 (0)編輯 收藏

          Linux 文件命令精通指南

               摘要: 為剛接觸 Linux 文件命令的初學(xué)者提供的速成教程  閱讀全文

          posted @ 2006-09-04 16:44 Mongoose 閱讀(328) | 評(píng)論 (0)編輯 收藏

          關(guān)于Oracle的MTS

               摘要: 一、簡(jiǎn)介 MTS(Multi-Threaded Server)是ORACLE SERVER的一個(gè)可選的配置選擇,是相對(duì)DEDICATE方式而言,它最大的優(yōu)點(diǎn)是在以不用增加物理資源(內(nèi)存)的前提下支持更多的并發(fā)的連接。換句話說(shuō),如果你只有2G的物理內(nèi)存,而你又想支持2000個(gè)連接,在獲取最好性能的前提下,你就應(yīng)該選擇MTS了。 本文先說(shuō)一說(shuō)MTS的工作方式,然后與DEDICATE...  閱讀全文

          posted @ 2006-08-31 14:35 Mongoose 閱讀(997) | 評(píng)論 (1)編輯 收藏

          基于SSL的JavaMail

               摘要: 最近有一個(gè)項(xiàng)目需要支持SSL的JavaMail收發(fā)郵件. 經(jīng)過(guò)一些調(diào)查, 把使用SSL的JavaMail方法總結(jié)如下.
            閱讀全文

          posted @ 2006-08-30 02:54 Mongoose 閱讀(2711) | 評(píng)論 (1)編輯 收藏

          在 Ajax 應(yīng)用程序中實(shí)現(xiàn)數(shù)據(jù)交換

               摘要: 作者:Andrei Cioroianu 了解如何利用 XML 和 JavaScript Object Notation 在 Ajax 客戶端和 Java 服務(wù)器之間傳輸數(shù)據(jù)。 2006 年 6 月發(fā)表 Ajax 核心 API(即所謂的 XMLHttpRequest)的唯一用途就是發(fā)送 HTTP 請(qǐng)求,在 Web 瀏覽器與服務(wù)器之間進(jìn)行數(shù)據(jù)交換。...  閱讀全文

          posted @ 2006-08-25 09:54 Mongoose 閱讀(770) | 評(píng)論 (0)編輯 收藏

          J2SE1.5(Tiger)新特性較1.4的簡(jiǎn)單總結(jié)

          一、范型(generic)的支持
          支持generic的tiger屬于較1.4及以前最大的變化之一。由于支持范型,所以以前的諸多集合類(譬如,list和map)的接口都做了比較大的變化。而Java developer們從理論上說(shuō)則可以擺脫使用括號(hào)的強(qiáng)制轉(zhuǎn)型;使用類型安全(type-safe)的各種集合類,甚至可以寫自己的支持范型的類。

          二、枚舉(enumerated)類型的支持
          新加入了enum關(guān)鍵字,使Java developer們可以創(chuàng)建一種新的類型——枚舉類型。并且,枚舉類型支持switch分支以及行內(nèi)(inline)的創(chuàng)建。和范型配合使用,我們可以創(chuàng)建枚舉類型的map或者set。

          三、Autoboxing和Unboxing的支持
          現(xiàn)在tiger可以自動(dòng)的把primitive type變成與之對(duì)應(yīng)的object類型。Java developer們?cè)僖膊挥檬褂弥T如intValue()或者new Integer()這樣的方法來(lái)把一個(gè)整型的變量變來(lái)變?nèi)チ恕?br />
          四、可變長(zhǎng)參數(shù)(vararg)的支持
          以前函數(shù)參數(shù)中帶有“...”一直是C++ fans的專利,現(xiàn)在Java developer們也可以享受到其帶來(lái)的好處。

          五、Annotation的支持
          這是tiger帶給我們的又一偉大的功能。Java developer們現(xiàn)在可以撰寫自己的annotation(當(dāng)然,tiger自身帶有annotation,一些先進(jìn)的框架framework也用到annotation)來(lái)給class、method甚至package添加額外信息,這就昭示著可能單體(unit)試驗(yàn)會(huì)更加輕松并且那些習(xí)慣xdoclet的同學(xué)終于可以拋棄它了。

          六、for/in語(yǔ)句的支持
          這個(gè)特性使Java developer們的代碼更小以及更酷。并且避免了不必要的類型轉(zhuǎn)換。

          七、靜態(tài)import的支持
          這個(gè)特性最主要的用途我想就是使Java developer們的代碼更酷了。如果搭配枚舉類型,以及printf功能可能讓你寫出類似的C風(fēng)格的代碼。

          八、線程方面的改進(jìn)
          在線程方面有各種各樣的改進(jìn),最主要的有三個(gè),添加了Excutor對(duì)象,從此Java developer們可以把線程作為一個(gè)task執(zhí)行,另外,由此,線程的寫法也有了徹底的改變;第二,添加了高等synchronizing的支持以及l(fā)ocking地加入;最后,就是原子(atomic)類型的加入。

          九、其他
          除了以上的主要改進(jìn)以外,還有一些比較重要的修改和增強(qiáng)。譬如說(shuō),加入了printf方法,現(xiàn)在Java也擁有了C語(yǔ)言的經(jīng)典函數(shù);在Array中加入了大量的靜態(tài)方法用來(lái)操作數(shù)組和集合;加入了Queue這種數(shù)據(jù)類型和Comparator這樣一個(gè)排序接口;以及用一個(gè)StringBuilder這個(gè)類使得可以更好的處理Unicode。

          posted @ 2006-08-24 16:03 Mongoose 閱讀(828) | 評(píng)論 (0)編輯 收藏

          XSL入門

          第一節(jié):理解XSL?
          有一天晚上我做了一個(gè)夢(mèng)。這個(gè)夢(mèng)真嚇人。但如我告訴我的釋夢(mèng)師的,如果你沒有讀過(guò)寫使用XML和我媽媽的菜譜賺錢的計(jì)劃,這個(gè)夢(mèng)就沒什么意義。
          不管怎么說(shuō),這個(gè)夢(mèng)......

          那是在公元2001年,我用我媽媽的菜譜建立了一個(gè)網(wǎng)站,而且行得不錯(cuò)。網(wǎng)站的節(jié)讀數(shù)很高,得到的反饋也很多。后來(lái)就到了電話,是Michael?Ovitz打來(lái)的。他告訴我他回來(lái)做生意,想把這些菜譜作為事業(yè)的起點(diǎn)。他認(rèn)為其潛力不僅僅在于它一份菜譜,而是Sally?Field領(lǐng)銜出演的一系列關(guān)于與恐怖份做斗爭(zhēng)的身懷絕藝的技藝精湛的廚師的電影。他所要的是一250個(gè)菜譜的標(biāo)題和它們組成成分的清單。而且他希望在15分內(nèi)得到它們。我狂喜,我顫栗,然后我意識(shí)到我用的是HTML。

          我從尖叫中醒來(lái)?-?冷汗順著我的臉往下淌。

          為什么是個(gè)噩夢(mèng)呢?夢(mèng)中的是發(fā)生在將來(lái),一個(gè)XML和它的同伴XSL(擴(kuò)展樣式表?-?eXtensible?Stylesheet?Languange)被廣泛使用的時(shí)代。即使這樣,我用HTML建立我的整個(gè)菜譜網(wǎng)站,不是XML。而且,HTML就是HTML?-?我沒有辦法從中通過(guò)拷貝粘貼提取想要的信息。CSS此時(shí)也毫無(wú)用處。但是如果我在夢(mèng)用了XSL,我就會(huì)很快產(chǎn)生那份清單,然后快樂地從別人的天和努力中榨取利益。

          然而現(xiàn)在,XSL的允諾只是一個(gè)夢(mèng)。關(guān)鍵在于從W3C的第一份草稿到發(fā)布第一份推薦稿至少要八個(gè)月(或至少一年)的時(shí)間。在完成之前,其規(guī)范可能要做根本性的改變。

          盡管這樣,微軟還是正在打算在其IE?5的第二個(gè)beta版中支持XSL現(xiàn)有草稿的功能。坦率地說(shuō),我不知道為什么它會(huì)在這上面耗費(fèi)資源。因?yàn)檫@件事對(duì)每個(gè)人來(lái)說(shuō),誰(shuí)都不愿意花費(fèi)時(shí)間在學(xué)習(xí)一種在其實(shí)現(xiàn)之前就過(guò)時(shí)的語(yǔ)言。

          雖然如此,但理解XSL的要點(diǎn)還是很重要的?-?它會(huì)使Web開發(fā)者的生活更容易些。如果對(duì)XSL一無(wú)所知,對(duì)被經(jīng)常吹捧的XML的一些優(yōu)點(diǎn)的理解就會(huì)有困難。

          那么就讓我們看看其中的一些基本概念?-?不太可能改變的東西。

          第二節(jié):攀登結(jié)果樹
          你從本文中學(xué)到的最重要的一點(diǎn)是XSL不僅僅是應(yīng)用樣式。當(dāng)使用XML處理器時(shí),XSL源文檔中的信息將被評(píng)價(jià)、重新安排,然后重新組裝。我們最終得到的不只是XML數(shù)據(jù)的可愛的版本?-?而是可以被容易地添加、修改和重新排序的靈活的源信息。這個(gè)最終產(chǎn)品叫做結(jié)果樹(Result?Tree)。

          這通過(guò)一系列測(cè)試產(chǎn)生。下面是一個(gè)簡(jiǎn)單的例子:

          ???<xsl:template?match="recipe_name">
          ?????<P>
          ???????<xsl:process-children/>
          ?????</P>
          ???</xsl:template>

          最先要解釋的是以"/"?結(jié)束的標(biāo)記符是空的。即此種類型的標(biāo)記符的起始和結(jié)束標(biāo)記符之前什么也不發(fā)生。在HTML中類似的例子是<img>標(biāo)記符。因?yàn)橐粋€(gè)圖像所需的所有信息都包含在一個(gè)標(biāo)記符中,所以就沒有必要存在結(jié)束標(biāo)記符</img>。組織良好的XML文檔可以接受空標(biāo)記符,同時(shí)XSL樣式表必須是組織良好的XML。

          讓我們?cè)倩氐嚼樱嬖VXSL處理器如果發(fā)現(xiàn)一套<recipe_name>標(biāo)記符,就應(yīng)該分離出內(nèi)容然后用<p>和</p>包圍起來(lái)。或者,如果你想炫耀你的XSL的知識(shí),你可以說(shuō)“添加到結(jié)果樹中。”

          這是一個(gè)相當(dāng)簡(jiǎn)單的測(cè)試,而且很典型。XML元素的內(nèi)容被表現(xiàn)信息所包圍。

          現(xiàn)在讓我們看看書寫菜譜的XSL樣式表的完整例子。

          在我講述更多的XSL標(biāo)記之前,我要解釋一個(gè)可能被問到的問題。誰(shuí)都知道在HTML中<p>本身就足夠了,那么我為什么要使用結(jié)束的</p>標(biāo)記符呢?

          有人能回答嗎?答案是:沒有對(duì)應(yīng)的結(jié)束標(biāo)記符,那部分就不是組織良好的XML,于是會(huì)產(chǎn)生一個(gè)致命的錯(cuò)誤。

          第三節(jié):一個(gè)XSL樣式表
          下面是一個(gè)完整的樣式表。

          <xsl:stylesheet>
          ???<xsl:template?match?=?"/">
          ?????<HTML>
          ?????<BODY>
          ?????????<xsl:process-children/>
          ?????</BODY>
          ?????</HTML>
          ???</xsl:template>
          ???<xsl:template?match?=?"author">
          ?????????<H1>
          ?????????<xsl:process-children/>'s?fabulous
          ?????????</H1>
          ???</xsl:template>
          ???<xsl:template?match?=?"recipe_name">
          ??????<H2>
          ??????<xsl:process-children/>
          ??????</H2>
          ???</xsl:template>
          ???<xsl:template?match?=?"meal">
          ??????<TABLE><TR><TD><H3>EAT?FOR:</H3></TD>
          ??????<TD><H3><xsl:process-children/></H3></TD>
          ??????</TR></TABLE>
          ???</xsl:template>
          ???<xsl:template?match?=?"directions">
          ??????<H4>DIRECTIONS</H4>
          ??????<P>
          ??????<xsl:process-children/>
          ??????</P>
          ???</xsl:template>
          ???<xsl:template?match?=?"ingredients">
          ???????<B>INGREDIENTS</B><BR></BR>
          ???????<xsl:process-children/>
          ???</xsl:template>
          ???<xsl:template?match?=?"item">
          ???????<BR>
          ??????<xsl:process-children/>
          ??????</BR>
          ???</xsl:template>
          </xsl:stylesheet>


          其結(jié)果不會(huì)使我得到任何設(shè)計(jì)獎(jiǎng),但是它是一個(gè)能起作用的XSL。這里可能只有下面的命令需要解釋:

          ??<xsl:template?match?=?"/">
          ????<HTML>
          ?????<BODY>
          ?????????<xsl:process-children/>
          ?????</BODY>
          ?????</HTML>
          ?</xsl:template>

          第一行的"/"告訴處理器這個(gè)節(jié)點(diǎn)應(yīng)用到XML文檔的根上。于是,這部分中的命令是結(jié)果樹的基礎(chǔ)。處理器被告之把<HTML>和<BODY>標(biāo)記符放在文檔的開始和結(jié)尾處,然后處理或打印所有的子元素。因?yàn)樗歉兀砸馕吨按蛴∷械臇|西。”

          現(xiàn)在,如果你考慮幾秒鐘,就會(huì)覺得有點(diǎn)古怪。如果根層的process-children命令把源代碼傳遞給結(jié)果樹,那么所有與模板匹配的節(jié)點(diǎn)都可以與已經(jīng)經(jīng)過(guò)處理的源碼一起工作。

          然而,出現(xiàn)的問題是:XSL有一套確定哪些內(nèi)容被傳遞給結(jié)果樹的規(guī)則,其中最重要的規(guī)則是,最特定的匹配將會(huì)贏。顯然,元素名的模板匹配比根層的匹配更特定。因此,所有模板匹配的節(jié)點(diǎn)將超越根層的規(guī)則。

          注意用XML數(shù)據(jù)添加HTML標(biāo)記符是多么的容易。當(dāng)XSL處理器看到那些不在XSL詞匯表中的標(biāo)記符時(shí),就會(huì)把他們傳遞給結(jié)果樹。如果你花些時(shí)間,就可能發(fā)現(xiàn)其中巨大的潛力。XSL可以被用做一種轉(zhuǎn)換語(yǔ)言。存儲(chǔ)在一個(gè)XML文件中的數(shù)據(jù)可以用完全不同的標(biāo)記符轉(zhuǎn)換到另一個(gè)文件中。還有,信息可以被修改成與可以對(duì)應(yīng)一套不同的標(biāo)記符集的XML應(yīng)用程序一起工作的形式。

          而且還不只這些,如人們所期望的,樣式表可以用匹配的標(biāo)記符打開和關(guān)閉,其中是一套組織良好的單元。?很好,但是還有限制。

          第四節(jié):選擇XSL
          簡(jiǎn)單的<xsl:template?match>還不能完全滿足我們的要求。比如,我希望當(dāng)<course>標(biāo)記符出現(xiàn)時(shí)取消<meal>標(biāo)記符的內(nèi)容。這樣的話我就不用擔(dān)心節(jié)面上同時(shí)顯示"dinner"和"appetizer"。我可能還希望通過(guò)在最后的ingredient后面插入大量的空白來(lái)調(diào)整版面。

          如同某個(gè)廣告部的人說(shuō)的:所有這些都是可能的?-?還要更多。SL有一套用來(lái)把元素與其父成員或子成員匹配的工具。它也允許位置上的匹配。例如,可以在第一個(gè)和最后一個(gè)某個(gè)特定元素上應(yīng)用特定的格式,等等。

          現(xiàn)在讓我們考慮一些更復(fù)雜的事,比如令我在夢(mèng)中出汗的任務(wù)。我需要菜譜名和它們的成分的清單。現(xiàn)在,如果我的網(wǎng)頁(yè)與數(shù)據(jù)庫(kù)沒有聯(lián)系,我就不得不寫一個(gè)查詢語(yǔ)句。因?yàn)槲覍?duì)SQL不太熟,所以需要得到的DBA幫助。但是如果知道XSL,我就會(huì)擺脫這些麻煩。

          <xsl:style?sheet>
          ???<xsl:template?match?=?"/">
          ??????<xsl:for-each?select?="list/recipe">
          ?????????<TABLE>
          ?????????<TR><TD>
          ?????????<xsl:process?select?=?"recipe_name"/></TD>
          ?????????<TD>
          ????????????<xsl:for-each?select?=?"ingredients/item">
          ???????????????<BR><xsl:process-children/></BR>
          ????????????</xsl:for-each>
          ?????????</TD></TR>
          ?????????</TABLE>
          ??????</xsl:for-each>
          ???</xsl:template>
          </xsl:stylesheet>

          結(jié)果并不神奇。但是在table標(biāo)記符中加些花樣將沒問題。顯然,我在XML中存儲(chǔ)了信息,但是我認(rèn)為最好還是仔細(xì)看看。

          ???<xsl:template?match?=?"/">
          ??????<xsl:for-each?select?="list/recipe">

          第一行很熟悉,只是簡(jiǎn)單地與模板相匹配。但是第二行卻有些不同?-?在元素清單中出現(xiàn)的每個(gè)菜譜元素做每件事,直到</xsl:for-each>標(biāo)記符。然后我開始HTML表格,用<xsl:process?select="recipe_name"/>標(biāo)記符把recipe_name元素中的內(nèi)容輸出到表格單元中。在關(guān)閉第一個(gè)表格單元后,事情開始變酷。下一行(<xsl:for-each?select="ingredient/item">)開始一個(gè)附加的嵌套循環(huán),允許我把全部ingredient輸出到合適的顯示信息中。樣式表的其余部分應(yīng)該很好理解。

          但是等等,我知道你在想:“他說(shuō)過(guò)酷了嗎?什么這么酷?”

          for-each函數(shù)是XSL的幾個(gè)程序化的特征之一。還有if-then和選擇函數(shù)。這些特征允許任何人都可以以任何能想到的方式(或至少是可行的方式)容易地操縱XML內(nèi)容。如果你能實(shí)現(xiàn)這些特征,就很酷。

          第五節(jié):從規(guī)范到實(shí)現(xiàn)
          既然你已經(jīng)看到XML的一些功能,那么我想提出一個(gè)問題:通過(guò)把內(nèi)容分離到組織良好和有效的XML文件中,XML對(duì)這些內(nèi)容有哪些不能做的呢?如我前面顯示的,數(shù)據(jù)可以被操縱然后放入你選擇的版面中。或者數(shù)據(jù)可以被處理成可以被其它應(yīng)用程序使用的形式。那么,還有其它的嗎?

          我們?cè)僖淮蚊鎸?duì)擴(kuò)展性的核心。一旦定義了數(shù)據(jù),我們可以做任何想做的事。如果我們來(lái)到一個(gè)有能處理XML的字處理、電子表格和表現(xiàn)程序的時(shí)代,同一套數(shù)據(jù)幾乎可以被用在任何用途上。

          但是,哎!這依然是個(gè)夢(mèng)。

          我們只能希望瀏覽器能實(shí)現(xiàn)這些功能,但是我們沒有理由樂觀。即使Tim?Bray,XML的教父,也說(shuō)過(guò)對(duì)XSL的嘗試只能在CSS標(biāo)準(zhǔn)完全實(shí)現(xiàn)之后才能實(shí)現(xiàn)。誰(shuí)知道什么時(shí)候才能實(shí)現(xiàn)呢?而且這也不是唯一的問題。

          XSL要排除另一個(gè)障礙。XSL規(guī)范有兩個(gè)截然不同的部分。第一部分,是我們這里討論的,處理數(shù)據(jù)結(jié)構(gòu)。另一部分是一套用來(lái)應(yīng)用樣式的有格式的對(duì)象。這部分需要做大量工作。在我看來(lái),現(xiàn)在需要很多人去做很多事。例如,應(yīng)該有既適合屏幕又適合打印輸出的命令。如果規(guī)范的制定者繼續(xù)這種“無(wú)所不包”的嘗試,此規(guī)范將最終很難實(shí)現(xiàn),而且最終用戶用起來(lái)也困難。但是現(xiàn)在,我們做不了什么?-?只能過(guò)我們自己快樂的小日子,同時(shí)盼望負(fù)責(zé)的同志們別把事情弄糟。
          在這期間,做了甜夢(mèng)吧!

          ---
          轉(zhuǎn)載自 http://bbs.xml.org.cn/dispbbs.asp?boardID=8&ID=7632

          posted @ 2006-08-23 11:26 Mongoose 閱讀(223) | 評(píng)論 (0)編輯 收藏

          XML 路徑語(yǔ)言(XPath) 版本 1.0

               摘要: XML 路徑語(yǔ)言(XPath) 版本 1.0 萬(wàn)維網(wǎng)協(xié)會(huì) (W3C) 建議 1999November16 本版本: http://www.w3.org/TR/1999/REC-xpath-19991116 (其它文件格式: XML [英文] HTML [英文] ) 最新版本: ...  閱讀全文

          posted @ 2006-08-23 11:20 Mongoose 閱讀(750) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 东阿县| 平凉市| 邯郸县| 志丹县| 湖南省| 榆社县| 沁水县| 东宁县| 临漳县| 西乡县| 忻州市| 乌拉特前旗| 萝北县| 洞口县| 浦城县| 西林县| 烟台市| 苏尼特右旗| 黔西| 泰来县| 绿春县| 广丰县| 芮城县| 卫辉市| 新巴尔虎左旗| 定边县| 怀仁县| 巩义市| 井冈山市| 青神县| 新巴尔虎左旗| 应用必备| 淄博市| 山阴县| 明星| 阜康市| 泾川县| 宾川县| 建阳市| 牙克石市| 淳化县|