8 August 2005
中級
不論是您的小組取得了需要使用 XML 的專案合約, 或者您只是想要使用這個技術, 這篇文章將介紹 XML 的基本原理。許多公司已經開始使用 XML 交換資料。而政府也將 XML 訂立為資料交換的標準格式, 網路開發人員必須學習使用 XML 的方法。所以學習 XML 並加強您的技巧是對非常有益的。而且, 即將上市的 Macromedia Dreamweaver 8 原本就支援建立與編輯 XML 及 XSL 文件, 讓您進行用戶端與伺服器端的 XSL 轉換。在本文中, 我將向您介紹 XML, 讓您可以在 Dreamweaver 8 上市後便快速上手。我會以解釋此項技術、其優缺點, 以及提供使用最佳時機和方法的範例做為開始。
到目前為止, 您可能知道 XML 代表 EXtensible Markup Language (可擴展標記語言)。所以, 它就屬於標記語言, 就像 HTML 一樣, 表示它使用標籤 (tag)。但是它能做些什麼呢?為什麼您的客戶會要求使用它?令人驚訝地, XML 不做任何的事情。它只描述並以與平台無關的格式散佈資訊。
XML 藉著不使用特定的語言, 來達到與平台無關的目的。XML 標籤不是預先定義的, 這表示您可以撰寫您自己的標籤。這樣的好處是, 您可以自我描述 XML。
信不信由您, 您已經在不知不覺的情況下, 不斷重覆使用著 XML。當您在電子郵件用戶端中直接讀取新的標題, 或者使用手機瀏覽網頁時, 事實上您正在使用以 XML 為基礎的技術。
首先, XML 並不是 HTML 的取代品, 而且它們擁有完全不同的目的。XML 是設計來描述、儲存和交換資料, 而 HTML 是設計來以人類可以讀取的格式呈現資料。HTML 使用固定一套的預先定義元件 (其標籤與屬性通常廣為人知) 來定義文件的視覺面, 例如頁面配置和文字格式, 並包含文件或影像的連結。在 HTML 中, 您會受限制去使用有限的標籤集合, 因此可以顯示的資訊類型也受到限制。例如, 使用 HTML 顯示數學公式會帶給您很多麻煩。XML 則能透過擴展性來解決這樣的問題:您可以 "發明" 自己的標籤和自己的文件結構。您可以新增或移除元件, 而不影響文件的整個結構。
<department>
<employee>
<name>John Doe</name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
<employee>
<name>Jane Fletcher</name>
<job>Designer</job>
<salary>2500</salary>
</employee>
</department>
您可以試著輸入, 或將這段文字複製到 Dreamweaver 的新 XML 文件中, 然後在瀏覽器中預覽。若要在 Dreamweaver MX 2004 中建立新的 XML 文件, 請按一下「檔案」選單並選取「新增」。在「新增文件」視窗中, 選取「基本」頁面類別, 然後在基本頁面中選取 XML。
然後按一下「建立」按鈕。Dreamweaver 將建立包含以下類似文字的文件:
<?xml version="1.0" encoding="iso-8859-1"?>
這是 XML 的宣告, 必須在每個 XML 文件開頭時包含。它指定了 XML 版本和文件中使用的字元集。
在新 XML 文件第一行之後, 輸入上方範例的文字。請注意 Dreamweaver 原本就支援 XML 文件的語法標色:
注意: 根據預設情況, 大部分瀏覽器都支援 XML。若要參考不同瀏覽器顯示與處理 XML 文件的方法, 請造訪 W3Schools 網站的這個頁面。
按一下每個標籤旁的減號, 便可以折疊元件。若要展開元件, 您必須按一下旁邊的加號。
以下為使用 HTML 撰寫的相同範例:
<table>
<tr>
<td>John Doe</td>
<td>Software Analyst</td>
<td>2000</td>
</tr>
<tr>
<td>Jane Fletcher</td>
<td>Designer</td>
<td>2500</td>
</tr>
</table>
如果您在瀏覽器中載入頁面, 它將看起來便會像一個標準的 HTML 表格 (為了易於參考, 我新增了邊框)。
在以上的範例中, 其標籤是特別設計以描述公司員工的資訊。比較兩個範例, 您可以清楚看到 XML 是內容取向, 而 HTML 是格式取向的—XML 標籤名稱描述了標籤中的內容, 而 HTML 標籤則描述標籤中資料的呈現方式。
以上的範例用來描繪 XML 與 HTML 間主要的差異。然而, 您應該瞭解 XML 並非設計來取代 HTML, 並且不是每一個 XML 文件都可以翻譯成 HTML 文件。
在這裡, 事情可能看起來有點模糊, 因為圍繞在您周圍的全都是惱人的新字眼。由於 XHTML 超出了本文的範圍, 我會簡單解釋以讓事情較為清楚。
XHTML 代表 Extensible Hyper Text Markup Language 可擴展超文本標記語言 , 它是一種較為清楚、以 XML 為基礎的 HTML 版本。它是一種 更詳細規格 的 HTML, 以設計來最後取代 HTML。XHTML 包含幾乎完全與 HTML 相同的標籤, 但則是經過重新撰寫以遵循 XML 語法規則, 在本文之後會以更詳細的方式呈現。
既然 XML 儲存並描述資料, 它類似一個資料庫。您可能已經在 XML 相關文件中聽過 "schema" 或者 "query language 查詢語言 " 等字眼。那麼什麼讓 XML 有別於典型的 DBMS 資料庫管理系統 呢?
首先, XML 是可攜式的。當資料庫依靠為正確理解而設計的特定資料庫語言時, XML 在自己的標籤中便會帶有本身的意義。XML 是自我描述的, 這表示它同時帶有資料的結構與語意, 而資料庫只能定義資料結構。
此外, XML 可以以階層樹狀結構呈現資料, 如同您在上一節中看到的。例如, <employee> 元件是 <department> 的子元件, 如 XML 樹狀結構中的內嵌所示。
當然 XML 與資料庫比較時也有其缺點, 但是這是正常的, 因為它們是為了不同目的而設計。最明顯的缺點就是 XML 缺少了資料庫特有的功能, 例如觸發器、多使用者存取、高效能儲存空間、索引、安全性、交易、資料整合檢查或者在多文件中的查詢。這是正常的, 因為 DBMS 是為了以快速和安全的方法來處理、儲存和擷取資料而設計, 而 XML 是設計來在平台間交換資料。
因此在 XML 文件中搜尋也比較慢, 因為缺少了一般資料庫的索引與搜尋最佳化功能。
XML 也較為冗長, 因為每一個資料元件都需要成對的標籤或屬性。
雖然資料中心/文件中心分割已慢慢淘汰, 然而瞭解 XML 原理與 XML 技術背後的主要概念還是很重要的。
下一節將探討 XML 的優缺點, 並描繪可以使用 XML 解決的真實生活狀況。
為了理解應該使用 XML 的地方, 您應該記住其主要優點。我在先前已經簡略介紹過。而本節將會深入探討 XML 比其他標記語言或類似技術更優秀的地方。
在使用 XML 時, 人們會經常忘記 X 代表 "可擴展"。可擴展性表示您可以定義任何數量的額外標籤, 而不會使應用程式當機。例如, 您可以新增一個子元件給這個元件:
<employee>
<name>John Doe</name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
若要看起來像下列模式:
<employee>
<name>John Doe</name>
<job>Software Analyst
<responsibility>Write technical specifications</responsibility>
<responsibility>Translate client requirements into software requirements</responsibility>
</job>
<hire_date>Jun 25, 2005</hire_date>
<salary>2000</salary>
</employee>
讀取這個 XML 文件的應用程式, 仍然能理解正在指定的員工。
可攜性來自於您可以定義標籤與屬性的事實。不需要特別的元件庫或應用程式伺服器就可以 "讀取" XML 文件 雖然您的開發環境需要一些設定以支援 XML, 我會在之後的文章解釋 。XML 文件是純文字檔案, 因此不像大部分二進位檔案一樣需要專利軟體來解譯。這表示您可以使用「記事本」來開啟和編輯 XML 檔案。
因此當資訊需要跨越幾個 不相容 硬體或軟體平台或應用程式時, XML 是可以採用的選擇。這已經引導出幾個通訊技術上的 XML 應用程式, 包含受歡迎的 WML 無線傳輸標記語言 和 WAP 無線應用程式通訊協定 。WML 是一種以 XML 為基礎的語言, 用來標記手提式裝置的 Internet 應用程式, 例如電話或 PDA。若要進一步學習 WML, 您可以參閱 W3 Consortium 的 教學課程。
可攜性也同樣在商務應用程式上有所幫助, 許多公司必須使用無關平台的方式交換大量金融資訊。不同的應用程式會使用 SOAP Simple Object Access Protocol, 簡單物件存取協定 , 即以 XML 為基礎的通訊協定, 以在 Internet 上交換這樣的資訊。這些以 XML 為基礎的資訊分享應用程式也稱為網路服務。
利用 XML, 您可以減少內容重複的風險。您的客戶可以專注於使用 HTML 與 CSS 來定義版面與外觀, 不會受到分開儲存在 XML 檔案中的基本資訊改變所影響。
例如, 內容管理系統可能提供使用者各種不同格式的文件:HTML、PDF 等。但是分開儲存每一個文件的各種格式版本是沒道理的。因為內容會重複並消耗昂貴的磁碟空間, 使 CMS 塞滿了重複的資訊導致使用緩慢。使用以 XML 為基礎的引擎, 您可以只將內容儲存一次, 然後擷取出來並能使用想要的格式顯示。
所有處理或格式化需求應該交由獨立的 XSL Extensible Style sheet Language, 可擴展樣式表語言 文件來處理。XSL 樣式表指定了 XML 檔案中包含的資料外觀。XML 與 XSL 會在輸出時結合以套用資料需要的格式, 與階層式樣式表 CSS 讓您設計 HTML 的方法一樣。
我會在下一篇文章中更仔細地說明 XSL, 並解釋同時使用兩者的方法, 為您的應用程式產生格式化的輸出。Dreamweaver 8 提供您一個快速、視覺化的方法, 建立自訂 XML 檔案的 XSL 樣式表。您會學習到將 RSS 反饋匯入至網站, 並提供您的拜訪者最新消息或更新的簡單方法。
如果您看了這三個 XML 的重要優點, 便會立刻知道使用 XML 的最佳時機和環境:
XML 已經廣泛地在不同資料庫應用程式中使用。大部分的 DBMS 包含 Microsoft Access 或 phpMyAdmin 已經支援以 XML 檔案匯出資料庫表格。
RSS Really Simple Syndication 是最受歡迎的 XML 應用程式之一。RSS 只是另一種 XML 文件格式, 專為聯合發佈新聞或類似新聞的內容而設計。依賴 RSS 的受歡迎的網站包含 Wired 與 Slashdot 等社群網站或個人部落格。Macromedia 將它的開發人員中心文章以 RSS 反饋方式以供使用。RSS 的主要好處是可以讓人們使用他們希望的格式閱讀您的內容, 並且匯入到自己的網站中。我將在往後的其中一篇文章中, 告訴您使用 Dreamweaver 8 來使用 RSS 反饋的方法。
只要瞭解一些 XML 的缺點, 便能容易理解哪些地方不該使用 XML。
如果您看過之前的範例您應該有 XML 文件樣子的概念。語法是非常直接的 ─ 它的規則清楚且簡單。XML 文件由一個 XML 宣告和一個包含幾個巢狀元件的根元件或標籤組成。我會先簡單描述最重要的語法規則:
所有 XML 文件都必須以 XML 宣告開始。如果您使用 Dreamweaver 來建立您的 XML 文件, 則會自動加上 XML 宣告。XML 文件是讓呼叫 XML 文件的應用程式, 可以正確讀取並解讀資訊。根據預設情況, Dreamweaver 會建立符合 1.0 規格 的 XML 文件, 並且使用 iso-8859-1 拉丁-1/西歐 字元集。XML 宣告不是一個元件, 並且不會為當作 XML 文件中的一部份。
接下來, 文件必須包含單一個根元件。在先前的範例中, 根元件為 <department>。但是假設公司有不只一個部門。那麼可以新增第二個 <department> 元件到文件中, 如下列情況所示?
<?xml version="1.0" encoding="iso-8859-1"?>
<department> </department>
<department> </department>
不行。這種情況中, 您必須定義一個新的根元件:<company>.這個新的根元件現在便可以有許多個子元件, 即為 department:
<company>
<department>
<employee>
<name>John Doe</name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
<employee>
<name>Jane Fletcher</name>
<job>Designer</job>
<salary>2500</salary>
</employee>
</department>
<department>
<employee>
</employee>
</department>
</company>
所有其他子元件必須包圍在根標籤中。
當 HTML 允許單一標籤元件, 例如 <hr> 或 <br>, 則在 XML 中, 所有元件都必須有一個關閉標籤。如果您省略了關閉標籤, 您的瀏覽器便會產生以下類似的錯誤:
以下標籤沒有關閉:department.Error processing resource 'http://www.domain.org/company.xml'.
Dreamweaver 8 其中一個新功能就是預設程式碼完成, 它在 XML 檔案中也能執行。如果我輸入以下程式碼:
<company>
<department>
<employees>
當我輸入 </ 時, Dreamweaver 8 將自動正確地關閉標籤。在以上範例中, 我輸入第一個 </ 時, Dreamweaver 便會插入 </item>。下一次我輸入 </時, Dreamweaver 也會插入 </items>。再下一次我輸入 </時, Dreamweaver 便會插入 </root>。Dreamweaver 8 會知道您在頁面中的位置並且適當地關閉標籤。程式碼完成可以有效幫助您製作正確型式的 XML 文件, 尤其當您不是一個程式專家時。
此外, 標籤名稱的大小寫是有差別的, 這表示 <Department> 與 <department> 或 <DEPARTMENT> 是完全不同的元件。顯然地, 相同元件的開啟與關閉標籤必須以同樣的大小寫來撰寫。以下是 XML 中一對不合法標籤的例子:
<JOB>Software Analyst </job>
如同我先前提到的, XML 元件是透過父子關係進行聯繫。在上一個範例中, <employee> 是 <department> 的子元件, 而它自己本身則是單一根元件, <company> 的子元件。為了保留這些關係, 元件必須是正確的巢狀結構。HTML 允許標籤交叉, 如同接下來的例子, 但是在 XML 中的所有元件必須互相為正確的巢狀結構。
<b>This text is <i> emphasized </b> and italic</i>.
這在 HTML 是完全合法的, 在瀏覽器中顯示如下:
在 XML 中, 內容或實際資訊由元件與/或它們的屬性所攜帶。一個元件可以包含純文字、其他元件或者兩者都有。例如以下元件:
<employee>
<name>John Doe</name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
可以重寫成:
<employee>
John Doe
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
這表示 employee 元件包含了混合的內容:純文字與其他元件。
空白元件也是被允許的。以下元件可以讀成 "我們有一個工作機會, 但是我們還在找尋適任人選":
<employee></employee>
相同的元件可以使用屬性重新撰寫而成:
<employee job="Software Analyst">
John Doe
<salary>2000</salary>
</employee>
XML 中的屬性 (Attribute) 是元件的屬性 (Properties)。它們 描述 元件的特質。 您可以使用單引號 (' ') 或雙引號 (" ") 來標記屬性值。如同您在之前一連串範例中所看到的, 相同的資料可以儲存在子元件或屬性中。那麼哪一個方式比較好?理論上而言, 您應該僅將屬性用於給予資料額外資訊之中, 也就是說, 當您需要後設資料 (meta data) 時。例如:
<employee id="31">
<name>John Doe</name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
員工 ID 在這個情況下與實際資料無關。但是這個 ID 可以用在 XML 處理軟體, 以更快速地辨識出對應的員工。這樣的資訊稱為後設資料 (Meta Data), 也就是說, 是關於資料的資料。
使用屬性取代元件也有一些缺點。整個 XML 的架構變得較不清楚且較無法擴展。除此之外, 屬性無法擁有多個數值, 並且較難於運用。想像一下如果員工資訊像以下列方式儲存:
<employee name="John Doe" job="Software Analyst" salary="2000"></employee>
這將完全違背 XML 文件的目的–讓資訊結構清楚並易於交換。
現在, 您可能會問自己這個合理的問題:"好, 如果我可以定義自己的標籤, 我真的可以在元件上使用任何文字嗎?" 答案是「是」也是「不是」。您可以在元件名稱使用任何文字, 因為 XML 中沒有任何保留字, 但是 您必須遵守以下的簡單命名規則:
元件名稱雖然可以使用 "." 與 "-" 字元, 但我不建議這麼做。因為處理 XML 檔案的應用程式可能將這些符號解讀為運算子。如果您需要使用較長的名稱, 您可以使用 "_" 字元進行取代, 如同以下範例所示:
<employee>
<first_name>John</first_name>
<last_name>Doe</last_name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
是的, 基本上任何文字都可以。同時也支援非英文字元, 但是請確定您設定了正確的字元集, 和處理 XML 文件的用戶端應用程式支援會非英文內容。內容中的空格也將被保留, 這與 HTML 並不一樣。這表示您可以撰寫連續的空格, 而且不會被剝奪或移除。
所有標記或程式語言都允許註解。XML 也一樣!語法與 HTML 相同:
<!-- This employee deserves a raise. -->
在本文稍早, 我已經提過 XML 應用程式之一的 RSS。下一個範例顯示一個 Macromedia 開發人員中心反饋的簡化版本, 以描繪 XML 文件的結構和套用的語法規則。
<?xml version="1.0" encoding="utf-8"?>
<rss version="1.0">
<channel>
<title>Macromedia Developer Center RSS Feed June 27, 2005</title>
<link>http://www.macromedia.com/devnet/</link>
<description>Macromedia Developer Center is your center for the tutorials, articles, and sample applications you need to master Macromedia products.</description>
<item>
<title>Creating a Dynamic Playlist for Progressive Flash Video</title>
<link>http://www.macromedia.com/devnet/flash/articles/prog_download.html</link>
<description>Learn how to create an XML-driven playlist for viewing progressive FLV files.</description>
</item>
<item>
<title>Chatting Through IM Gateways in ColdFusion MX 7</title>
<link>http://www.macromedia.com/devnet/coldfusion/articles/imgateway.html</link>
<description>Learn the fundamentals of gateway apps as you build a sample chat application that monitors your ColdFusion server status</description>
</item>
</channel>
</rss>
請注意 RSS 攜帶清單導向的資訊 項目或文章 方式。當然, RSS 的設計是用來交換大量類似項目的, 但是為了簡化, 我僅在以上範例中納入了兩個項目。項目是由標題、連結和說明所描繪的資訊 "頻道" 所組成。每一個項目都代表了一篇在開發人員中心發佈的文章, 並且擁有以子元件存在的文章標題、連結和簡單說明。除此之外, 還可以新增作者、發佈日期和每篇文章主題的元件, 您將在我下一篇文章中看到。在這個主題中, 我已經涵蓋了要使 XML 以完整型式呈現的必要工作, 並指出讓它在語句結構上正確的規則。當您更加熟悉 XML 時, 您也應該瞭解 XML 文件類型定義 DTD 和 XML Schema 為了您建立與使用, 以 XML 為基礎的語言所訂定的規則 。DTD 指定了可以用於 XML 文件的合法元件。若要學習更多關於使用 DTD 驗證 XML 方法, 您可以在 W3School 參閱這篇教學課程。XML Schema 只是一種以 XML 為基礎的 DTD 版本。
本篇文章是要介紹您 XML。而不是這個技術綜合說明, 或者開發以 XML 基礎應用程式的完整指南。取而代之的是, 我鼓勵您造訪這些額外的資源以補充 XML 知識, 並探索 XML 可以用於網路開發上的不同方法:
如果您已經開始使用 XML 工作, W3 Schools 的這個 XML 驗證程式 將讓您知道是否您的 XML 文件以完整型式呈現。
我的下一篇文章將介紹 XSL, 格式化與呈現 XML 資料的語言。您可以在這裡閱讀。您也應該期待我即將發佈的文章, 以關於在 Dreamweaver 8 中使用 XML 與 XSL 新功能、在網站中使用 Dreamweaver 8 以做為 RSS 反饋的方法, 和支援伺服器端 XSL 轉換的伺服器之設定方法。所以請做好準備。Dreamweaver 8 已經開始預購了。如果您透過 Macromedia Affiliate Program from InterAKT Online 訂購, 您還可以得到免費的 ImpAKT。
Tutorials and samples |
Dreamweaver user forum |
More |
| 04/23/2012 | Resolution/Compatibility/liquid layout |
|---|---|
| 04/20/2012 | using local/testing server with cs5 inserting images look fine in the split screen but do not show |
| 04/18/2012 | Ap Div help |
| 04/23/2012 | Updating |
Dreamweaver Cookbook |
More |