什么是XML
XML 代表Extensible Markup Language(eXtensible Markup Language的縮寫,意為可擴展的標記語言)。XML是一套定義語義標記的規(guī)則,這些標記將文檔分成許多部件并對這些部件加以標識。它也是元標記語言,即定義了用于定義其他與特定領域有關的、語義的、結構化的標記語言的句法語言。
關于XML要理解的第一件事是,它不只是像超文本標記語言(Hypertext Markup Language,HTML)或是格式化的程序。這些語言定義了一套固定的標記,用來描述一定數(shù)目的元素。如果標記語言中沒有所需的標記,用戶也就沒有辦法了。這時只好等待標記語言的下一個版本,希望在新版本中能夠包括所需的標記,但是這樣一來就得依賴于軟件開發(fā)商的選擇了。
但是XML是一種元標記語言。用戶可以定義自己需要的標記。這些標記必須根據(jù)某些通用的原理來創(chuàng)建,但是在標記的意義上,也具有相當?shù)撵`活性。例如,假如用戶正在處理與家譜有關的事情,需要描述人的出生、死亡、埋葬地、家庭、結婚、離婚等,這就必須創(chuàng)建用于每項的標記。新創(chuàng)建的標記可在文檔類型定義(Document Type Definition,在以后的篇幅中常簡稱為DTD)中加以描述。在本書的第二部分中將會學到有關DTD的更多的知識。現(xiàn)在,只需把DTD看作是一本詞匯表和某類文檔的句法。例如,在Peter Murray-Rust的Chemical Markup Language (化學標記語言,簡寫為CML)中的MOL.DTD文件中描述了詞匯表和分子科學的句法:其中包括chemistry(化學)、 crystallography(結晶學)、solid state physics(固體物理)等詞匯。它包括用于atoms(原子)、molecules(分子)、bonds(化學鍵)、spectra(光譜)等的標記。這個DTD可與分子科學領域中的許多不同的人共享。對于其他領域也有其他的DTD,用戶還可以創(chuàng)建自己的DTD。
XML定義了一套元句法,與特定領域有關的標記語言(如MusicML、MathML和CML)都必須遵守。如果一個應用程序可以理解這一元句法,那么它也就自動地能夠理解所有的由此元語言建立起來的語言。瀏覽器不必事先了解多種不同的標記語言使用的每個標記。事實是,瀏覽器在讀入文檔或是它的DTD時才了解了給定文檔使用的標記。關于如何顯示這些標記的內(nèi)容的詳細指令是附加在文檔上的另外的樣式單提供的。例如,考慮薛定格(Schrodinger)方程:
科學論文中充滿了這一類方程,但是科學家還必須等待多年,才能讓瀏覽器的開發(fā)商支持書寫最基本的數(shù)學公式所需的標記。音樂家也有同樣的局限性,因為Netscape Navigator和Internet Explorer還都不支持樂譜。
有了XML就意味著不必等待瀏覽器的開發(fā)商來滿足用戶的需要了。用戶可以創(chuàng)建自己需要的標記,當需要時,告訴瀏覽器如何顯示這些標記就可以了。
關于XML要了解的第二件事是,XML標記描述的是文檔的結構和意義。它不描述頁面元素的格式化。可用樣式單為文檔增加格式化信息。文檔本身只說明文檔包括什么標記,而不是說明文檔看起來是什么樣的。
作為對照,HTML文檔包括了格式化、結構和語義的標記。<B>就是一種格式化標記,它使其中的內(nèi)容變?yōu)榇煮w。<STRONG>是一種語義標記,意味著其中的內(nèi)容特別重要。<TD>是結構標記,指明內(nèi)容是表中的一個單元。事實上,某些標記可能具有所有這三種意義。<H1>標記可同時表示20磅的Helvetica字體的粗體、第一級標題和頁面標題。
例如,在HTML中,一首歌可能是用定義標題、定義數(shù)據(jù)、無序的列表和列表項來描述的。但是事實上這些項目沒有一件是與音樂有關的。用HTML定義的歌曲可能如下:
<dt>Hot Cop<dd> by Jacques Morali Henri Belolo and Victor Willis<ul><li>Producer: Jacques Morali<li>Publisher: PolyGram Records<li>Length: 6:20<li>Written: 978<li>Artist: Village People</ul>
而在XML中,同樣的數(shù)據(jù)可能標記為:
<SONG><TITLE>Hot Cop</TITLE><COMPOSER>Jacques Morali</COMPOSER><COMPOSER>Henri Belolo</COMPOSER><COMPOSER>Victor Willis</COMPOSER><PRODUCER>Jacques Morali</PRODUCER><PUBLISHER>PolyGram Records</PUBLISHER><LENGTH>6:20</LENGTH><YEAR> 978</YEAR><ARTIST>Village People</ARTIST></SONG>
在這個清單中沒有使用通用的標記如<dt>和<li>,而是使用了具有意義的標記,如<SONG>、<TITLE>、<COMPOSER>和<YEAR>等。這種用法具有許多優(yōu)點,包括源碼易于被人閱讀,使人能夠看出作者的含義。
XML標記還使非人類的自動機器人易于找出文檔中的所有歌曲。在HTML中,機器人只能告訴我們這個元素是dt。機器人不能決定dt到底代表一首歌的題目還是定義,抑或只是一些設計者喜愛的縮進文本格式。事實上,單一文檔中可以很好地包括帶有三種意義的各種dt元素。
可以選擇XML的元素名稱,以便使其在附加的上下文中具有額外的意義。例如,元素名稱可以是數(shù)據(jù)庫的域名。XML比HTML更為靈活而且適用于各種應用,因為有限數(shù)目的標記不必用于許多不同的目的。