什么是XML
XML 代表Extensible Markup Language(eXtensible Markup Language的縮寫(xiě),意為可擴展的標記語(yǔ)言)。XML是一套定義語(yǔ)義標記的規則,這些標記將文檔分成許多部件并對這些部件加以標識。它也是元標記語(yǔ)言,即定義了用于定義其他與特定領(lǐng)域有關(guān)的、語(yǔ)義的、結構化的標記語(yǔ)言的句法語(yǔ)言。
關(guān)于XML要理解的第一件事是,它不只是像超文本標記語(yǔ)言(Hypertext Markup Language,HTML)或是格式化的程序。這些語(yǔ)言定義了一套固定的標記,用來(lái)描述一定數目的元素。如果標記語(yǔ)言中沒(méi)有所需的標記,用戶(hù)也就沒(méi)有辦法了。這時(shí)只好等待標記語(yǔ)言的下一個(gè)版本,希望在新版本中能夠包括所需的標記,但是這樣一來(lái)就得依賴(lài)于軟件開(kāi)發(fā)商的選擇了。
但是XML是一種元標記語(yǔ)言。用戶(hù)可以定義自己需要的標記。這些標記必須根據某些通用的原理來(lái)創(chuàng )建,但是在標記的意義上,也具有相當的靈活性。例如,假如用戶(hù)正在處理與家譜有關(guān)的事情,需要描述人的出生、死亡、埋葬地、家庭、結婚、離婚等,這就必須創(chuàng )建用于每項的標記。新創(chuàng )建的標記可在文檔類(lèi)型定義(Document Type Definition,在以后的篇幅中常簡(jiǎn)稱(chēng)為DTD)中加以描述。在本書(shū)的第二部分中將會(huì )學(xué)到有關(guān)DTD的更多的知識?,F在,只需把DTD看作是一本詞匯表和某類(lèi)文檔的句法。例如,在Peter Murray-Rust的Chemical Markup Language (化學(xué)標記語(yǔ)言,簡(jiǎn)寫(xiě)為CML)中的MOL.DTD文件中描述了詞匯表和分子科學(xué)的句法:其中包括chemistry(化學(xué))、 crystallography(結晶學(xué))、solid state physics(固體物理)等詞匯。它包括用于atoms(原子)、molecules(分子)、bonds(化學(xué)鍵)、spectra(光譜)等的標記。這個(gè)DTD可與分子科學(xué)領(lǐng)域中的許多不同的人共享。對于其他領(lǐng)域也有其他的DTD,用戶(hù)還可以創(chuàng )建自己的DTD。
XML定義了一套元句法,與特定領(lǐng)域有關(guān)的標記語(yǔ)言(如MusicML、MathML和CML)都必須遵守。如果一個(gè)應用程序可以理解這一元句法,那么它也就自動(dòng)地能夠理解所有的由此元語(yǔ)言建立起來(lái)的語(yǔ)言。瀏覽器不必事先了解多種不同的標記語(yǔ)言使用的每個(gè)標記。事實(shí)是,瀏覽器在讀入文檔或是它的DTD時(shí)才了解了給定文檔使用的標記。關(guān)于如何顯示這些標記的內容的詳細指令是附加在文檔上的另外的樣式單提供的。例如,考慮薛定格(Schrodinger)方程:

科學(xué)論文中充滿(mǎn)了這一類(lèi)方程,但是科學(xué)家還必須等待多年,才能讓瀏覽器的開(kāi)發(fā)商支持書(shū)寫(xiě)最基本的數學(xué)公式所需的標記。音樂(lè )家也有同樣的局限性,因為Netscape Navigator和Internet Explorer還都不支持樂(lè )譜。
有了XML就意味著(zhù)不必等待瀏覽器的開(kāi)發(fā)商來(lái)滿(mǎn)足用戶(hù)的需要了。用戶(hù)可以創(chuàng )建自己需要的標記,當需要時(shí),告訴瀏覽器如何顯示這些標記就可以了。
關(guān)于XML要了解的第二件事是,XML標記描述的是文檔的結構和意義。它不描述頁(yè)面元素的格式化??捎脴邮絾螢槲臋n增加格式化信息。文檔本身只說(shuō)明文檔包括什么標記,而不是說(shuō)明文檔看起來(lái)是什么樣的。
作為對照,HTML文檔包括了格式化、結構和語(yǔ)義的標記。<B>就是一種格式化標記,它使其中的內容變?yōu)榇煮w。<STRONG>是一種語(yǔ)義標記,意味著(zhù)其中的內容特別重要。<TD>是結構標記,指明內容是表中的一個(gè)單元。事實(shí)上,某些標記可能具有所有這三種意義。<H1>標記可同時(shí)表示20磅的Helvetica字體的粗體、第一級標題和頁(yè)面標題。
例如,在HTML中,一首歌可能是用定義標題、定義數據、無(wú)序的列表和列表項來(lái)描述的。但是事實(shí)上這些項目沒(méi)有一件是與音樂(lè )有關(guān)的。用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中,同樣的數據可能標記為:
<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>
在這個(gè)清單中沒(méi)有使用通用的標記如<dt>和<li>,而是使用了具有意義的標記,如<SONG>、<TITLE>、<COMPOSER>和<YEAR>等。這種用法具有許多優(yōu)點(diǎn),包括源碼易于被人閱讀,使人能夠看出作者的含義。
XML標記還使非人類(lèi)的自動(dòng)機器人易于找出文檔中的所有歌曲。在HTML中,機器人只能告訴我們這個(gè)元素是dt。機器人不能決定dt到底代表一首歌的題目還是定義,抑或只是一些設計者喜愛(ài)的縮進(jìn)文本格式。事實(shí)上,單一文檔中可以很好地包括帶有三種意義的各種dt元素。
可以選擇XML的元素名稱(chēng),以便使其在附加的上下文中具有額外的意義。例如,元素名稱(chēng)可以是數據庫的域名。XML比HTML更為靈活而且適用于各種應用,因為有限數目的標記不必用于許多不同的目的。
聯(lián)系客服