本篇取自XML實戰手冊一書(第三波)--原著:Jesse Liberty & Mike Kraley
什麼是XML

我有一個從事網際網路應用程式開發將近十年的朋友,最近他告訴我: ‘XML對於世界的改變,將遠勝於HTML’。雖然這只是一般的陳述,但如果它是真的,這代表 XML 將會是本世代最重要的技術發展之一。

這讓我想起Web和網際網路都是最近才發展起來。那是1994年 1 月的電腦展,某一攤位展示了最近開發的Mosaic瀏覽器,那是我第一次看見網頁。而在六年之後,全球資訊網已完全改變美國的商業模式。現在,很難發現一家沒有網站的公司,而這些發展都是由HTML所促成。HTML確實地改變了我們使用電腦的方式。

XML怎麼可能做出更重大的改變?那是因為XML 將會把Web的能力,從互動傳播資訊的機制延伸到資訊交換的媒體。這個改變,意味著商業的運作將不只是透過網頁訊息的傳遞,而是可達成關鍵性的重要任務,完成企業領域的商務互動。

簡而言之,XML提供一個跨平台的機制,用來管理、儲存、溝通訊息。XML 1.0 World Wide WEb Consortium (W3C)建議書是一個國際標準,已經被如Microsoft (微軟) 、 Netscape(網景) 、 SUN(昇陽) ,及 IBM 等眾多的供應商認同並採用。XML已經蔚為風尚。


XML的來龍去脈

從某個角度來說,XML最難的部分,就是了解他究竟是什麼?有什麼作用?要了解這點,恐怕你必須稍微了解一下XML的發展歷史。

它最早是由SGML開始的。SGML代表Standard Generalized Markup Language的字縮寫。SGML的工作是描述如何經由指定語法、元素的定義則語言的屬性來建立標立語言。它是一種元語言( meta-language )。

元語言(meta-language) 是一種用來描述其他語言的語言。

SGML的工作是定義標示語言的語法。標示語言只是用來定義如何在文件中對資料加入一些涵義。

語法(Syntax)是實際的符號、標示符號及在語言中的文字順序。

HTML是經由SGML描述出來的一種語言。我們稱HTML為SGML語言的一種應用實例(instance)。越來越多的涵義被加入到HTML文件之中,其目的主要是用來呈現訊息。以<b>Jesse Liberty</b>為例,<b>和</b>標籤用來增加額外的資訊到"Jesse Liberty"上,它們告訴瀏覽器要以粗體字的方式來呈現。

當程式設計師們談論到實例(instance)時,他們意指一個抽象概念的具體範例。民主是個理念,而美國是一個民主國家的應用實例。

任何人都可以利用  SGML 的定義來建立不限數量的新語言。然而迄今為止, HTML 是由 SGML為基礎建立起來的語言中,最受歡迎的一種。

請注意,SGML 並沒有定義 HTML 的結構。這項工作是由HTML的文件型態定義 ( Document Type Definition, DTD ) 來完成。HTML DTD 使用了由 SGML 指定的語法來定義合法的 HTML 文件。 HTML DTD 決定了 <br>、<p> 和其他使用於 HTML 標籤的合法性; SGML 在這裡只扮演了提供語法的角色。

文件型態定義 ( Document Type definition , DTD ) 是描述文件的合法語法。

HTML 的語義並不是由 SGML 或 DTD 所定義。所謂語義是指每一個標籤的意義;例如,<b>是指粗體。這是由用戶端的程式碼完成,在此例中是指瀏覽器。

語義  ( Semantics ):在一個語言中文字或片語的意義。

讓我們回顧前面所說的:SGML 定義了 HTML 的語法。 HTML DTD用來定義文件是否具合法性。瀏覽器是用來解譯文件,並且依照標籤的指定方式呈現文件。


XML 簡化了 HTML

那麼 XML 適用於何處呢? XML 是 XGML的子集合。事實上,XML是 SGML 的簡化版本,具有與 SGML 同樣的目的,但遠比SGML 易於使用。這構想是保留了 50% 的 SGML 語法,而這些語法有 90%的機會被用到。

這是一個不小的差別。 SGML是如此的難以使用,除非專家 ,否則無法有效率的利用它來工作,這使得它的進入門檻相當高。假如你想要使用 SGML ,你需要投入大量的時間 (或金錢) ,才能具有這些必備的專業知識。因為這個原因,所以很少人使用它,並使它一直停留在次要的技術階段。

XML 的秘密就是:它並不難。XML是這麼的直接,事實上在讀完這本書的某個主題後,大部分的開發者就可以立刻利用它來工作。簡易是 XML 的長處。一個強而有力的元語言 ( meta-language )、易於使用、能夠改變我們與資料互動的方式- XML 就是這樣的元語言。

XML 定義了語言的語法,你能夠用 XML 定義出 HTML、你能夠用 XML 定義出其他的語言。 XML 最重要的事,是他特別被建立成具有延展性。不像 HTML , XML 沒有固定的一組標籤。

XML 的重點不是用來呈現資料。基本上, XML標籤不告訴你如何呈現資料,但它們告訴你資料的相關意義,也就是它具有提供有意義的標籤的能力。這使得 XML 強而有力。


XML 是什麼樣子?

當你第一次見到 XML 文件時,除非你很快的注意到有一些從未見過的特殊標籤,否則你會覺得它看起來就像是 HTML 文件。

以下的這段程式碼是從本書的其他章節擷取出來的範例:

<book>
<section level="10000">
<title>第十章</title>
<section level="10001">
</book>
<title>具有槓桿效率的標準樣板庫</title>

注意,在範例中並沒有發現如 <br> 和 <div>等標籤,在此你看到的是 <book> 、 <section> 及 <title>等特別的標籤,。這是 XML 的本質:將具有意義標籤語義化。

XML 標籤的重要事實是: XML文件的作者被允許在他所發展出來的文章中創造具有涵義的標籤。這意味著在不同的文件中,相同的標籤可能具有不同的意義。例如, <title> 這個標籤在我的文件中是指章節的標題,但在別的文件中也許是指一個人的稱謂 (如先生、博士等等) ,在第三個文件中也許是指房子或汽車的所有權。

想同地, <section>指的是章節的一部分,但是在某本數學書中可能是指某個物體橫切面的剖面圖,市鎮計劃文件中也許是指一平方英里大小的面積。


XML 標籤屬性

在 XML 中,標籤同時也是具有意義的屬性。就像在 HTML的輸入標籤中有屬性 name=action和type=submit。在此處 section 標籤有屬性 level="A" 及 id="10000" 。

再者,我們不需要擔心這些特定標籤的意義,可以先專注於專案內容中被定義成具有特定意義的標籤。也就是說,標示語言已延伸成可依據需求而定義的有意義的標籤。

如同文章中的標籤必須具有意義,屬性也須依照上下文內容而給定意義。一本書的 "section" 屬性,必然不同於市鎮計劃中"section"的屬性。


什麼是XSL?

可延伸的樣式表語言 ( extensible Stylesheet Language ) 可用來轉換並控制 XML 文件的顯示方式。

正如你將在本書中所看到的,瀏覽器中,目前有 IE5 支援XML,而且這瀏覽器只支援 XSL 一半的功能:轉換。所幸這是重要的那一半,至於 XSL 的顯示部分,絕大多數的工作可經由樣式表 (Cascading Style Sheets,CSS ) 來完成,而這項功能在 IE5 中是有支援的。XSL轉換功能可用來處理 XML 文件的結構與內容。本書將會大量使用 XSL轉換。