精華區beta b885060xx 關於我們 聯絡資訊
進一步介紹XML 從上一篇文章,我相信各位已經能大概了解啥是XML。當然,和任何一個新興的科 技一樣,XML還是必須要接受間的考驗,如果在XML成熟之前有任何一個技術能做 到比XML更強的功能,且更容易學習的話,我相信XML終還是會被淘汰的。 姑且不論XML是否會被淘汰,我個人是相信XML未來的淺力。所以我就寫了這一片 文章來為XML在網路的世界中 的發展,進一份心力,也為自己留下一份學習的心 得報告的文件。 入門 我們先來看一份相當基本的 HTML文件: <HTML> <H1 ALIGN=CENTER>硬體</H1> <FONT FACE size=2>顯示卡</FONT> 基本上這個範例不是那麼的切合主題說,但沒關係這只是一個開始而已,應用方 面還是要靠各位的想像力去發揮。因為我只有接觸到電腦的相關訊息所以我就將 我的日常生活融入我的教學中。現在我有了基本的HTML文件,但各位都知道,電 腦的硬體少說也有幾百種品牌和許多的規格和產品的特色。如果我要將所有的硬 體作一個分類和整理,也要做定期的更新,也就是說無論是特色的更新或是價錢 ,舊品的汰換 或是新品的上架,以這樣的一個規格和排列方式,我在更新和變動 時都相當的困難。或許各位會說現在的網頁編輯器相當的發達和進步,要編輯一 個HTML檔是相當容易和簡單的。但記得嗎?我要做的是幾百種的資料的建立和更 新。也就是如果我用類似 Macromedia Dreamweaver 2.0 這類如此先進的網頁編 輯器,我還是要對將近幾十頁的網頁做瀏覽和更動。這是多麼費時費力的工作呀 !但如果我將 XML 的技術充分應用到我的網頁之中這一切都將不是困難,先看看 我要如何將 XML 應用到我的範例中: <HARDWARE>硬體</HARDWARE> <HARDWARE_NAME>顯示卡</HARDWARE_NAME> 在 XML 之中,標籤是允許自行設計的,也就是你可以定義自己的標籤來為你的內 容做最好的詮釋。這樣做有 一些優點:任何人都了解這個內容和相關的意義、搜 尋任何一個在硬體搜尋有關顯示卡的字眼都將會被導入我們的網頁中、任何人都 可以輕而易舉的將標籤中的資料加入他們的資料庫中,也就是如果我需要將我的 網站上的資料加入到資料庫中,那將是一種相當方便的事、而且如果我的文書處 理軟體支援 XML 的話我甚至可以輕而易舉的將網站的資料改出成一本書,而且不 費一絲一毫的人力。﹝聽起來蠻酷的,你可能覺得,為何我不直接將我的資料作 成一個資料庫供別人查詢,而要大費周章的將資料建立成一個網站然後再加入到 資料庫中?理由相當簡單,資料庫不是大家都會的,但 XML 卻是簡單易學卻又能 將網站的資料做的像資料庫一樣,且資料庫需要主機的支援,程式設計師的設計 和維護,相對之下成本就相當高,且頻寬也要比一般文字的網頁要大的多,又慢 。所以資料庫雖然是現今電腦科技應用的最多的技術,但畢竟能不用大家還是不 願意去花大筆的鈔票,為公司建立起一個專門吃錢而成功率又相當低的資訊化系 統。各位要知道要將一個公司的作業流程建立在網際網路上是相當不容易的事。 ﹞ 現在大家應該有了一個大概的底了。XML 其實就是建立起一個無論是機器或是人 類都看得懂得文章。 規格化的 在建立一個 XML 的文件前有兩點是必須嚴格的遵守的:所有的 XML 的文件都必 須是規格化的﹝Well Formed 我解釋成規格化的,之前說果這是我個人的學習心 得,而我是用英文學的所以再翻譯時拜託別叫我在去找大家通用的解釋,我不感 興趣!﹞、所有的 XML 所有的文件必須是被認可的,標準的。 我們看看下面的例子: <?xml version="1.0"?> <list> <COMPUTER> <HARDWARE>硬體</HARDWARE> <HARDWARE_NAME>顯示卡</HARDWARE_NAME> <MANUFACTURER>啟亨 <PRODUCT_NAME>虎客</PRODUCT_NAME> </MANUFACTURER> <SPECIFICATION> <ITEM>晶片組</ITEM> <ITEM>工作頻率</ITEM> <ITEM>***</ITEM> <ITEM>***</ITEM> <ITEM>***</ITEM> <ITEM>***</ITEM> <ITEM>***</ITEM> <ITEM>***</ITEM> <ITEM>***</ITEM> </SPECIFICATION> <COMMANT> 這裡是雜誌的評價或是相關的使用心得 </COMMANT> </COMPUTER> </list> 有了上面的例子,我們也有了一個符合所謂規格化的,和標準化的 XML 文件。當 然這不是一個相當完美的 XML 文件:第一是因為在 ITEM 這個項目中,可以做得 更加詳盡,也就是如果各位要以規格來區分產品,則上面的 XML 文件將無法做到 。第二,在 COMMANT 這個項目中也沒有做到更詳盡的規劃,再說如果評論通常有 出處,而這裡的評論卻沒有所謂的出處的分別,也就是各位只能將評論當作是文 章一樣閱讀,而無法將評論做更進一步的應用。當然,雖然說這個 XML 範例相當 的簡單,但它卻是一個不擇不扣的規格化的、標準化的 XML 文件。況且再以上的 例子中各位都可以了解原來 XML 就是將原本一點意義都沒有的 HTML 標籤,轉成 具有意義的文件。無論是對機器或是人類。 如果各位再看仔細一些,你將會發覺,那這份文章要如何被瀏覽器所解讀呢?它 又是如何的呈現在我們的眼前呢?沒錯,這就是 XML 的優點。也可以說是這就是 現今網際網路的一鼓潮流。怎麼說呢?讓我們想一想 CSS 在 HTML 中所扮演的角 色:格式和文件分離。一個文章的格式和一個文章的內容經過 CSS 的美化,幾乎 是分離的。﹝如果你善用 CSS 的外部定義法。﹞在 XML 中,這是一定要做到的 。你無法在 XML 之中,一方面要求標籤可以自動有展示的功能,一方面它又要做 到資料的分類的功能。任何 XML 的展示和在網頁中的表現將要透過連結的功能 。=而標籤的定義也一樣要透過連結的功能。語法就相當於各位在引用 CSS 的語 法一樣。這部分我們在較後面時會談到。 之前說過,XML 文件必須是規格化的,要做到規格化的 XML文件,有三點是必須 要遵守的: 1. XML 文件必須以 <?xml version="1.0"?> 作為開頭! 2. 所有的標籤都必須要有一個標籤作為根部標籤! 3. 所有的標籤必須是一一排列整齊的,不能混著用! 啥是不能混這用呢?就是如果 ITEM 這個標籤是定義在 SPECIFICATION 之中,那 ITEM 這個標籤就必須要在 SPECIFICATION 這個標籤之中。不能超出 </SPECIFICATION> 的範圍。﹝另外,在 XML 之中,大小寫是必須分清楚的。它 不是像 HTML 一樣隨便寫都可以。<ITEM> 和 <item> 是不一樣的標籤。﹞ 標準化的 現在我們有了一個規格化的 XML 文件。之前我提過,要讓 XML 文件能被瀏覽器 所解釋、翻譯,最重要的是要將它連結到定義標籤的檔案。這就是 DTD! ﹝Document Type Definition ,文件型態定義﹞ 先讓我們看看,以上範例的文件型態定義檔: <!DOCTYPE list [ <!ELEMENT COMPUTER (HARDWARE,HARDWARE_NAME , MANUFACTURER, SPECIFICATION, COMMANT)> <!ELEMENT SPECIFICATION (ITEM+)> <!ELEMENT HARDWARE (#PCDATA, PRODUCT_NAME?)> <!ELEMENT ITEM (#PCDATA, item*)> <!ELEMENT HARDWARE_NAME (#PCDATA)> <!ELEMENT MANUFACTURER (#PCDATA)> <!ELEMENT PRODUCT_NAME (#PCDATA)> <!ELEMENT ITEM (#PCDATA)> <!ELEMENT item (#PCDATA)> <!ELEMENT COMMANT (#PCDATA)> ]> 基本上, DTD 的定義方式並不會太難。我們先從定一行看起: <!DOCTYPE list [ 這一行首先宣告了在﹝裡的 ELEMENT 都是屬於根標籤 <list> 的標籤,也是文件 的 DTD。所有在這一行裡的標籤都是在 <list> 標籤之下,也所以他們都必須符 合 XML 的三個基本的要求。 <!ELEMENT COMPUTER (HARDWARE, HARDWARE_NAME, MANUFACTURER, SPECIFICATION, COMMANT)> 在 COMPUTER 這個標籤之後的東東, 必須以這個方式排列出現在 XML 文件中 。sets of tags must appear inside the <recipe> tags, in that particular order. <!ELEMENT HARDWARE (#PCDATA, PRODUCT_NAME?)> 上面這個問號是啥意思呢?這是定義 PRODUCT_NAME 這個子標籤可以出現很多次 或是根本不出現都可以。而 #PCDATA 在這裡的意思就是說,這個標籤中的文件型 態是 文字型。基本上是 任何非二進位的資料型態。﹝二進位的資料型態可以是 ‧‧‧圖形等!﹞ 現在我們有了問號的定義,那加號呢? <!ELEMENT SPECIFICATION (ITEM+)> 加號是說這個標籤是不可省略的。 在看看我們的 DTD,還有一個 * 號。 <!ELEMENT ITEM (#PCDATA, item*)> 星號是說,任何數量的 ITEM 標籤都可以被接受。那各位一定會有一個疑問就是 ,問號和星號有啥不同?其實我也相當納悶,有任何人知道麻煩通知一聲。 結語 現在我們的 XML 文件可以說是相當完備了。至於如何在瀏覽器中呈現出來,我在 這兒就不在說明了。原因是因為這個定義的方式和 CSS 的定義方式幾乎是一模一 樣的。而各位聽說的 XSL 也是相同的定義方式。留待後面的章節在說明吧。