網(wǎng)站?XML?我的思考_Xml教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:XML學習起步
      學習 XML 的最佳途經(jīng)是從簡單的開發(fā)入手,大膽實踐,循序漸進。XML 的妙處只有在開發(fā)過程中才能深入體會,離開了開發(fā)是學不好 XML 的。因此學習 XML 首先應該建立一個 XML 的開發(fā)環(huán)境。我給大家介紹一下怎樣建立一個基于 Java 的 XML 開發(fā)環(huán)境。因為我現(xiàn)在沒

      作者:taowen(taowen.bitapf.org 或者www.noasia.net/taowen)

      1、我用HTML進行設計

      曾經(jīng)我以為我蠻特別的,我喜歡用記事本來寫很簡單很簡單的HTML。而且,我看的關于網(wǎng)頁的第一個教程也就是教你<h1>啊這些標簽的教程。相信那個著名的教程,很多人都有看過。只是很多看過了之后不一定會自己去手寫這些代碼,只是知道frontpage這樣的工具背后的原理就好了。
      但是時間久了還是覺得蠻累的。因為我寫代碼的時候畢竟是要靠自己的大腦去想象最終的外觀會是什么,所以有的時候還是蠻想去用Dreamweaver這樣的工具。也難怪那些所見即所得的工具會有那么多用戶了,因為寫的時候就直接看到了最終的呈現(xiàn)。手寫代碼的時候,如果遇到了重要的內(nèi)容,我會用<font>這樣的標簽特意去改變一下外觀。遇到了列表的內(nèi)容的時候會用<ul>啊這樣的標簽,產(chǎn)生1234的標號,或者一個個的圓點。其實有的時候覺得html挺簡單的,因為標簽的數(shù)量很有限嘛。

      2、我使用HTML的表格

      HTML的表格是很有意思的東西。當你遇到了要列表的東西的時候,如果是沒有表頭而且是一列的時候,你可能會用<ol>這樣的單列。如果是兩列,可能就會用<table>了。而且用起來也不是很復雜,<tr>就是開一行,<td>就是一列。當然還有很多種排法了;镜囊簿褪欠址礁瘢缓蠓艝|西。表格有趣的地方是,你設計form這樣的東西的時候也會用表格。雖然每個單元格的內(nèi)容之間沒有什么意義上的關聯(lián)了。不像你的成績單列表那樣,數(shù)學成績一列,語文成績一列。在form中使用表格僅僅是為了最終的版式上的問題。利用單元格把form中的元件進行定位。后來表格的排版作用用到了整個頁面的排版,而且越用越復雜,表格加表格。直接導致了我這樣手寫代碼的人無法去修改,去編寫這樣的頁面。一度讓我很傷心,覺得這個世界被Dreamweaver這樣的工具的使用者掌握者,因為只有利用所見即所得才能夠去設計這樣外觀豐富的主頁。

      3、我還用過css

      css是讓我激動的東西。我承認這點。我曾經(jīng)夢想,我寫網(wǎng)頁的時候只要把每塊內(nèi)容指定好了class。以后要改變網(wǎng)頁的外觀就只需要把css換調就可以了。而且css可以是內(nèi)含的也可以是外部用<link>鏈接的。我要把網(wǎng)站改版把css的內(nèi)容換一下就可以了。而且css還有@import,利用它我還可以在網(wǎng)站的每個目錄下都放一個style.css,然后利用@import包含站點的樣式表。這樣每個網(wǎng)頁就不用..這樣的目錄選擇符來選擇在父目錄中的樣式表了。這個特性著實讓我很興奮。我的夢想越來越清晰,就是有朝一日,我寫的網(wǎng)頁能夠很輕易的更改外觀,而且編寫的時候再也不用自己去使用<font>這樣的標簽了。

      4、javascript也是讓人好奇的東西

      我相信網(wǎng)絡發(fā)展還不如現(xiàn)在這么發(fā)達的時候就開始設計網(wǎng)頁的朋友,一定對于各式各樣的javascript非常熟悉。比如跟隨鼠標的星星,跑馬燈之類的東西。javascript設計出來是為了實現(xiàn)客戶端的一定交互性的。javascript之所以能夠交互是因為,它能夠通過DOM操縱你看到的html頁面,而且能夠通過html元素中的事件屬性得到你的輸入。因為javascript能夠通過DOM把html的頁面進行改變。這個性質其實也讓我激動了好久。比如leoboard的最新帖子這樣的信息,就是通過一個<script>的鏈接,鏈接到一個cgi上面,它產(chǎn)生的就是一段js腳本,通過document的函數(shù)寫出一段html代碼。也就是說,javascript能夠"動態(tài)"的產(chǎn)生html代碼。由于javascript的這個功能,我又開始做夢了。希望能夠整個網(wǎng)站都是通過互相包含的javascript組成。我把我的內(nèi)容都寫在javascript的變量之中,然后通過一定規(guī)則組合通過DOM的函數(shù)把內(nèi)容以一定的模板風格寫入到最終的html輸出之中。

      5、再聞css

      一開始聽說css,也許那個時候還是css1的時代吧。只知道css能夠設定一定元素的外觀顯示,比如字體啊,空白什么的。關于css的排版功能一概不知。第一次做css的夢的時候,其實就是因為要把html進行排版控制,不得不用很多的table這個原因破滅的。所以當我知道css的功能很強大,可以進行各種版面控制的時候,就又開始做夢了。把內(nèi)容按照其性質放到一些<div class="...">這樣的標簽之中,用不同的css樣式表,能夠把這些div定位到頁面的不同地方,而且顯示也是不一樣的。這樣我就能夠在寫html的時候以任意的順序來寫,只管內(nèi)容。而css會根據(jù)你對內(nèi)容的描述(class是什么)把內(nèi)容進行定位排版和顯示。所以說,以前我知道的css只把元素的內(nèi)容和顯示分開了,但是元素的位置還是與在源代碼中的位置相關。而現(xiàn)在知道的css,能夠讓元素只管自己的事情,告訴css自己是什么(class是什么),不用再考慮自己在文檔中的位置了。這樣不就實現(xiàn)了內(nèi)容與表現(xiàn)分離了嗎?不就是我等用記事本寫網(wǎng)頁的網(wǎng)頁設計者追求的嗎?

      6、內(nèi)容與外觀分離

      我相信這句話很多人都聽說過,夢想過。我的夢從模糊,到清晰,一直都在想著有朝一日我能夠只管把我要傳達的內(nèi)容寫下來,讓其他的人來給我排版給我定外觀。It is a Dream。我們只從一個網(wǎng)頁設計者的角度,而且是一個普通網(wǎng)頁設計者的角度來談這個問題。不要把什么中間件,應用服務器什么程序高手津津樂道的術語來壓"我們"。為什么要把內(nèi)容和外觀分離我相信很多人都有自己的體會。我的體會很簡單。當年自己手寫html的時候,我對我的內(nèi)容很有信心,我知道我要說什么,我有內(nèi)容。但是我對于如何排版很沒有信息,我想讓別人,或者自己以后來把內(nèi)容進行排版。但是事情是很讓人失望的,我基本上只有兩個對策。把內(nèi)容的格式變得簡單得不能再簡單,只是html的最基本元素的線性排列。除了<p>就是<p>這樣的頁面,樸素得不能再樸素。要么就是設計一個很好看,很復雜的頁面。我自己手工的把內(nèi)容粘貼到頁面的模板之中去。如果有很多類似的網(wǎng)頁,還要保證它們的風格是一致的。如果每個頁面還有到其他頁面的鏈接,比如是上一頁,下一頁之類的,It is a nightmare。把內(nèi)容與外觀分離,就這樣成為了我16歲的夢想。

      7、perl,php,asp

      我很坦白,我從來沒有用過jsp,我不喜歡java提供的那些東西(請不要因此罵我淺薄,我知道它們的商業(yè)價值,但是現(xiàn)在僅僅是說網(wǎng)頁設計)。按照順序,我用過的是這么三種網(wǎng)絡腳本。perl是我接觸的最早的一個網(wǎng)絡腳本,那個時候一般都是用cgi這個名字。后來我有遇到了php,最后才是asp。這里我只是談網(wǎng)頁的問題,不涉及到這些網(wǎng)絡腳本怎么實現(xiàn)網(wǎng)絡的交互的。也只是就著網(wǎng)絡腳本,說說它們怎么又能實現(xiàn)內(nèi)容與外觀分離的。而且這三種雖然在訪問文件,訪問數(shù)據(jù)庫,使用模板,產(chǎn)生html輸出各個階段和模塊上各有不同,但是原理一樣,方法相似,所以通稱網(wǎng)絡腳本。網(wǎng)絡腳本是讓我激動的東西,而且同樣作為engine驅動著很多現(xiàn)在正在運行的網(wǎng)站,比如經(jīng)典的LAMP組合。它們關鍵的地方是能夠產(chǎn)生html輸出。因為html不再是你自己手寫的了,所以不需要經(jīng)過你的手就能把html的輸出產(chǎn)生變動,這樣就有靈活性。為了文章能夠分出更多的節(jié),我按照我個人的認識順序來看看網(wǎng)絡腳本使用

      8、網(wǎng)絡腳本和文件

      我最先看到網(wǎng)絡腳本的使用,是leoboard這樣的cgi程序,它使用文本作為數(shù)據(jù)的存放媒介。數(shù)據(jù)來源是文本,然后cgi中的perl程序會對文本進行解析,然后把解析的結果可能會放到變量之中,最后變成html的輸出。這里就是通過cgi程序作為中介,把文本的內(nèi)容表現(xiàn)到了html之中。

      9、網(wǎng)絡腳本和數(shù)據(jù)庫

      后來我才看到了網(wǎng)絡腳本和數(shù)據(jù)庫的連用。經(jīng)典的搭配有php+mysql和asp+access,我都有用過,不過都是很簡單的。把數(shù)據(jù)儲存在數(shù)據(jù)庫中好處當然是多多,專業(yè)人士可以有很多事務啊之類的術語來描述其好處。不過顯而易見的是,儲存和獲取的方法是標準化的,通過SQL嘛。而用文本作為存放媒介,文件格式以及解析,還有文件的完整性,容錯這些都需要網(wǎng)絡腳本設計者自己來控制,雖然很自由,但是更多的是勞累。同樣,一種腳本有自己的一種格式,多浪費。要換論壇程序這樣的情況出現(xiàn)的時候,又需要了很多麻煩。

      10、網(wǎng)絡腳本和模板

      我記得當時我學asp的時候,很多文章就是這么介紹的。asp能夠夾雜在html的代碼之中,可以很方便的使用。而我使用perl的cgi的時候,很多程序又是使用滿是xxx的模板來做html輸出的。這個時候,我就想who is better?模板我還是蠻欣賞的。初級階段的模板就是很多以前的cgi的網(wǎng)絡文章程序中的那樣,在html中放perl的變量名,然后最后輸出的時候做一個替換。現(xiàn)在的模板當然要復雜好多,理論也很多。但是,我們可以看到的一點是模板做到了"把業(yè)務邏輯和表現(xiàn)邏輯分離"。一般模板和腳本的關聯(lián)就是通過一些兩方面都知道名字的變量或者數(shù)組。然后腳本在變量中預先把內(nèi)容存入這些變量之中,模板再把變量和數(shù)組中的內(nèi)容提取出來插入到html之中。由于模板大部分是由html組成,所以比較適合給設計人員來設計。而且腳本的任務也就僅僅致力于從數(shù)據(jù)庫也好,文本也好,這樣的數(shù)據(jù)源中取出內(nèi)容,進行一些加工,然后存入到變量之中。至少讓腳本程序員免于考慮最終的外觀問題。

      11、網(wǎng)絡腳本的時代

      我們現(xiàn)在基本上就處在這么一個時代之中,大部分的頁面已經(jīng)不是手工編寫的html了。而是由網(wǎng)絡腳本動態(tài)產(chǎn)生的。方法步驟都是類似的:數(shù)據(jù)源+網(wǎng)絡腳本+模板=頁面。似乎故事已經(jīng)到了終結了。因為美夢已經(jīng)成真了。利用數(shù)據(jù)庫中存放數(shù)據(jù),模板來控制顯示,網(wǎng)絡腳本進行一些計算和溝通工作,內(nèi)容和外觀分離的夢想已經(jīng)實現(xiàn)了。而且,現(xiàn)下的很多現(xiàn)成的程序,一些CMS(內(nèi)容管理系統(tǒng)),你直接在服務器上安裝好,就能夠享受其便利了。但是,我們還有更多選擇。

      12、XML的登臺

      XML應該不是什么陌生的東西了。如果你不知道,說明你可能已經(jīng)很久都沒有關心過網(wǎng)頁設計或者說是計算機這個行業(yè)了。XML的好處,長處,已經(jīng)被說爛了。我就不多說了。
      我把XML分為兩類:作為數(shù)據(jù)或者文檔的XML,以及功能性的XML。這個分類是我自己下的,功能性的XML指的就是HTML,SVG,MathML這些?赡躍VG什么的你不了解,但是至少HTML你知道吧。關于HTML也是XML這個觀點,你應該聽說過。HTML為什么被我說成功能性的XML呢?因為如果你瀏覽器為觀點,它認識HTML,它能夠把HTML標記的能內(nèi)容作出顯示。而如果是一般的XML,它就不認得,如果是IE會調用內(nèi)部的一個顯示XML的模板把它顯示出來,但是有的瀏覽器就不會。也就是說,一般的XML其中的內(nèi)容元素,對于瀏覽器來說它是不知道什么意義的,而HTML的元素是對瀏覽器有特殊意義的。同樣,SVG這些XML也是這樣,雖然標準仍然在制定之中,瀏覽器對它的支援還需要一些插件。但是SVG的基本結構不會有什么變動了,它就是通過標簽的標記,通過瀏覽器的讀取產(chǎn)生二維的圖像。關鍵的地方就是,瀏覽器認得SVG中的元素,知道它的意義,并且能夠作出顯示。
      自然,對于瀏覽器沒有特殊意義的XML就是文檔數(shù)據(jù)型的。把XML分為文檔為中心和數(shù)據(jù)為中心的這種分法是非常常見的。關于這個話題,我在后面繼續(xù)說。

      13、HTML作為一種功能性的XML

      我現(xiàn)在把HTML完全作為一種表現(xiàn)語言,它的唯一功能就是把內(nèi)容作出顯示。也就是我把在HTML中表現(xiàn)內(nèi)容的語意這個夢想給完全放棄了。HTML就是一個功能性的XML,它的目的就是讓瀏覽器顯示。要把內(nèi)容和表現(xiàn)分離,我就是要從別的數(shù)據(jù)源中轉換到HTML。那是不是CSS就多余了?當然不會,css的目的是幫助HTML更好的表達如何顯示這個要求。也就是XHTML+CSS共同表達的一個目的,網(wǎng)頁的外觀布局。它們的目的是一致的,而不是我以前想象中的HTML表達內(nèi)容,css來表達外觀。而且CSS的存在,能夠表達更加精確更加豐富的內(nèi)容,而且比用table這樣的表格排版更加簡潔明了。

      14、XML作為HTML的源頭

      我把HTML表達網(wǎng)頁的內(nèi)容這個想法給放棄了之后,很自然的想法是把XML作為HTML的數(shù)據(jù)來源。但是這并不是很常見的做法。更多的做法是,利用數(shù)據(jù)庫,利用文件然后用網(wǎng)絡腳本進行提取,然后可能還要通過一道模板,直接產(chǎn)生HTML。其中并沒有XML的位置,那么到底在產(chǎn)生HTML的過程中需不需要XML呢?
      現(xiàn)在問題已經(jīng)很明白了,HTML完全作為一種表現(xiàn)語言。焦點是對于HTML從何而來這個問題。務實的態(tài)度是尊重現(xiàn)有的解決方案,而且它們可以做得很好。這里只是對于XML能夠在產(chǎn)生HTML的過程中的什么階段進行參與工作,進行一些個人的看法的探討。

      15、XML直接產(chǎn)生HTML

      這個可能是很多人頭腦中首先想到的辦法。利用XSLT,把XML轉換成HTML。而且關于這個,我將在文章最后,給一個我個人的全面的想法。
      我覺得利用XML產(chǎn)生HTML,主要是用在小型的純發(fā)布的場合(比如個人主頁),因為對于XML文件的更新和刪除這些,并不是很完善。而且即使是使用XML數(shù)據(jù)庫,也不能勝任大型的場合。而XML更多的是作為中間數(shù)據(jù)

      16、有數(shù)據(jù)庫產(chǎn)生XML然后產(chǎn)生HTML

      這可能是一個很好的方案。只是在現(xiàn)在看來有一些多余。因為網(wǎng)絡腳本從數(shù)據(jù)庫中提取了內(nèi)容之后,直接就產(chǎn)生HTML了,或者調用一個模板也把HTML產(chǎn)生了。如果其中在多一個產(chǎn)生XML的過程,還需要再編寫XSLT來產(chǎn)生HTML,讓人覺得沒有這個必要。

      17、XML與數(shù)據(jù)庫

      很自然的,就延伸出了一個討論就是"XML與數(shù)據(jù)庫,用哪一個?"。其實這個問題之所以成為,我認為是XML的發(fā)展不成熟。XML有其結構和功能上的優(yōu)越性,但是同樣帶來了很大的復雜度。對于XML進行查詢,就比對于結構簡單的數(shù)據(jù)庫查詢復雜變數(shù)大很多。同樣,XML的表現(xiàn)力也要強很多。另外還與XML的兩個用法有關,XML一方面可以用作以數(shù)據(jù)為中心,比如網(wǎng)站的客戶訂單。這和關系型的數(shù)據(jù)庫的特點是一致的,每個table的項是固定的,數(shù)據(jù)都是類似重復的。而XML同時還能用作文檔為中心的,比如你寫一篇文章時,用XML對文章進行標記。這樣使得標記出現(xiàn)的位置,以及上下文就變得非常重要。
      所以關于,在什么場合下用XML,什么場合下需要XML這種問題,很難有答案。至少有一點,隨著XML技術的完善和被越來越多的人掌握,XML會在其適合的場合越來越多的使用。

      18、XML與網(wǎng)站

      如果僅僅是泛泛而談XML與數(shù)據(jù)庫,我覺得是很難定論。但是如果把討論的范圍縮小到網(wǎng)站,我覺得還是很容易得出答案的。對于交互性的場合,比如論壇,數(shù)據(jù)經(jīng)常要更新,XML就不適合。對于發(fā)布性的場合,比如文章系統(tǒng),XML就是一個很好的選擇。當然還要考慮查詢是否方便。以及XML適合描述松散的信息,比如站長信息這樣的數(shù)據(jù)存放到數(shù)據(jù)庫中顯然是overkill,而放到xml中就比較合適。所以,我個人認為如果是個人主頁這樣性質的網(wǎng)站,使用xml是非常合適的。

      19、在個人主頁中使用XML

      個人主頁一般都是無法購買那種有網(wǎng)絡腳本支持的服務器的,更不用說數(shù)據(jù)庫了,這個是來自于現(xiàn)實環(huán)境的限制。個人主頁的數(shù)據(jù)一般比較松散凌亂,而且文檔比較多,比較適合XML來描述,這個是顯示的需求。
      所以綜合了這兩點,對于一般個人主頁的站長來說,這樣的組合方案是很不錯的:
      1、用XML來描述網(wǎng)站數(shù)據(jù),用XSLT來做轉換
      2、注冊一個免費的留言板
      3、注冊一個免費的BLOG
      這樣你就只需要一個HTML空間,同時又可以實現(xiàn)內(nèi)容與外觀分離,至少對我來說是一個夢想的實現(xiàn)。

      20、最終實現(xiàn)指導

      這個純粹是個人意見,而且技術門檻相對比較高一些,估計沒有人會采納。
      第一步:
      描述你的網(wǎng)站內(nèi)容。如何描述完全是你的自由,而且是否使用DocBook這樣的東西來描述你的文章這樣的東西也是你的自由。描述應該分布在很多個xml文件之中,可以利用XInclude技術,也就是利用<xi:include href='...xml'/>這樣的標簽把所有的xml逐級串起來,最終是一個site.xml。找到了site.xml,就找到了你整個網(wǎng)站的內(nèi)容。
      你可以不用xinclude,而只是簡單的用一個元素記錄下文件位置,然后在XSLT中用document函數(shù)讀取也是可行的。
      第二步:
      描述你的網(wǎng)站的結構,也就是頁面的信息。這個我是用sitemap.xsl來做的。最終產(chǎn)生的就是一個sitemap.xml。里面由類似這樣的元素組成:
      <page name="article1" template="article.xsl" output="article1.html" param="1"/>
      這樣有兩個非常重要的作用,其一是能夠讓自動化的工具從產(chǎn)生的頁面信息中提取內(nèi)容,自動調用xslt處理器把網(wǎng)站給編譯出來。其二是能夠讓頁面索引到其他頁面,比如你要在一篇文章的頁面中鏈接到所屬的分類的所有其他的文章,你就可以在sitemap.xml中提供出哪些頁面是干什么的,比如所屬分類是什么。然后具體page的xsl就可以在sitemap.xml中根據(jù)這些信息,然后找到頁面最終寫出超級鏈接。
      第三步:
      設計每個頁面的xslt。xslt的輸入有兩個,一個是site.xml,另外一個就是sitemap.xml。從site.xml得到內(nèi)容,從sitemap.xml得到其他頁面的位置。
      第四步:
      利用你喜歡的腳本工具(設置是xslt+bat),自動化的完成整站的編譯工作。你還可以提供選項選擇編譯什么頁面。
      第五步:
      你也可以自己編寫一個工具來實現(xiàn)新舊對比的ftp上傳工作。

      OK,對于網(wǎng)頁設計的技術的我的思考就基本上告一段落了。
      PS:很經(jīng)典,每個學習WEB的人的經(jīng)歷的濃縮!可惜我還是不能完全的理解!!~~
      努力中.........

      分享:從HTML到XML
      xml(extensible markup language,可擴展標記語言),是當前最熱門的網(wǎng)絡技術之一,被稱為“第二代web語言”、“下一代網(wǎng)絡應用的基石”。自它被提出以來,幾乎得到了業(yè)界所有大公司的支持,絲毫不遜于當年html被提出時的熱度。所以,趁現(xiàn)在xml還未普及的時候

      來源:模板無憂//所屬分類:Xml教程/更新時間:2012-06-06
      相關Xml教程