香港公司

Extensible Markup Language

9547 171

XML(Extensible Markup Language,可擴展標記語言)

目錄

  • 1 什麼是XML
  • 2 XML的類型[1]
  • 3 XML的特點[2]
  • 4 XML的歷史及目標[3]
    • 4.1 XML的歷史
    • 4.2 XML的目標
  • 5 XML的文檔格式[2]
  • 6 相關條目

什麼是XML

  XML是由互聯網聯盟(World Wide Web Consortium,W3C)的XML工作組定義的。這個工作組是這樣描述該語言的:

  “擴展標記語言(XML)是SGML的子集,其目標是允許普通的SGML在Web上以目前HTML的方式被服務、接收和處理。XML被設計成易於實現,且可在SGML和HTML之間互相操作。”

  XML是一種專門在World Wide Web(www)上傳遞信息的語言,就像HTML(超文本標記語言)一樣(自從Web出現以來,HTML已經成為了創建Web頁的標準語言)。

XML的類型[1]

  1.無類型XML

  簡單地說,無類型XML是指XML文檔沒有和任何XML模式相關聯。

  如果不確定XML將遵循哪個XML模式,則無類型XML有用。例如,如果必須使用一個應用程式的某些XML,但無法確定數據將遵循哪個XML,則可以使用無類型XML列來執行這項工作。當然,無類型XML也會帶來其他問題。例如,不能針對某個模式編程,因此很難有效地使用XML。

  模式不綁定到XML列,SQL Server 2005會將無類型XML作為一個字元串存儲。這既是好事也可能是壞事。一方面,將XML作為字元串存儲可以更靈活地存儲任何XML片段或文檔。另一方面,將XML作為字元串存儲意味著,與類型化XML相比,既不能有效地存儲也不能有效地搜索XML數據。

  2.類型化XML

  與無類型XML相對應,類型化XML文檔可以綁定到某個XML模式。例如,一個XML列綁定到XML模式後,再對此列操作時,XML模式會自動驗證XML數據是否符合XML模式的要求。在SQLServer2005中,可將多個模式集合在一起形成模式集合。

  使用XML模式有兩個優點:

  (1)XML驗證是自動的。無論是給一個變數分配XML值,還是向XML列中插入XML值,SQL Server都會自動用模式來驗證XML的有效性。這樣做的結果是獲得了較好的性能,因為不用在運行時轉換節點的值。

  (2)XML存儲的內容是最少的,因為關於元素和屬性的類型信息都由模式本身來提供。這樣做可以為存儲值提供更好的轉換解釋。

XML的特點[2]

  • 簡單易用,功能強大。
  • 允許各個組織、個人建立適合自己需要的標記集合,並且這些標記可以用通用的工具顯示。例如定義數學、化學、音樂等專用標記。
  • 最大優點在於它的數據存儲格式不受顯示格式的制約。一般來說,一篇文檔包括3個要素:數據、結構以及顯示方式。XML把文檔的顯示格式從數據內容中獨立潛來,保存在樣式表文件(Style Sheet)中,這樣如果需要改變文檔的顯示方式,只要修改樣式表文件即可。
  • 通過有意義的標簽以結構化的格式存儲數據,用一種開放的自我描述方式定義數據結構,在描述數據內容的同時突出對結構的描述,從而體現出數據之間的關係,XML的自我描述性質能夠很好地表現許多複雜的數據關係,使得基於XML的應用程式可以在XML文件中準確高效地搜索相關韻數據內容,忽略其他不相關部分。
  • XML還有其他許多優點,比如它有利於不同系統之間的信息交流,完全可以充當網際語言,並有希望成為數據和文檔交換的標準。

  由於以上優點,XML必將在商務的自動化處理、信息發佈、智能化豹Web應用程式和數據集成等領域被廣泛使用。

XML的歷史及目標[3]

XML的歷史

  數據標記的需求起源於電子數據格式化。早期的電子數據格式化主要關註的是數據應該如何被顯示而不是數據的文檔結構和含義。Troff(UNIX下的文檔資料排版、編輯和格式化程式)和TEX(一種電子排版系統)就是兩種早期的格式化語言,在格式化列印文檔方面取得了很多成果,但是缺少任何關於結構方面的功能。因此這些文檔只局限於屏幕顯示和硬拷貝列印。人們難以編寫一個程式對這些文檔中的信息

進行查找、提取和前後對照,更不能方便地將一個文檔中的數據重覆用於不同的應用中。

  通用編碼(Generic Coding)使用描述性標簽取代格式碼,最終解決上述問題。最早認真研究該問題的是圖形通信協會(Graphic Communications Association,GCA)。在20世紀60年代末,圖形通信協會(GCA)的Gen Code委員會研發出一種使用通用標簽(Generic Tag)將不同類型的文檔裝配成由多個部分組成的複合型文檔的方法。

  在此之後,在該方面取得主要進展的是IBM公司的一個研發項目:廣義標記語言(Generalized Markup Language,GML)。由Charles Goldfarb、Edward Mosher和Raymond Lorie三人主持的GML項目旨在提供一個能夠在多重信息子系統中使用的文檔編碼解決方案。因為採用基於內容的標簽,由GML編寫的文檔能夠被編輯、格式化以及能夠使用不同的程式進行檢索。作為一個巨大的技術手冊發佈者,IBM已經廣泛採用了GML,並以此證明瞭通用編碼的生命力。

  基於GML的成功,美國國家標準協會(American National Standards Institute

,ANSI)在信息處理方向上建立了一個由Charles Goldfarb領導的項目小組,以研發一個基於GML的文本描述語言標準為目的。GCA的Gen Code委員會也為此項目貢獻了力量。自20世紀70年代後期到80年代早期,該委員會發佈了工作草案並最終提交了一個工業標準的候選方案(GCA 101-1983),該候選方案被稱為廣義標記語言標準(the Standard Generalized MarkupLanguage,SGML)。該標準很快就被美國國防部(the U.S. Department of Defense)和美國國內稅局(the U.S. Internal Revenue Service)採用。

  在隨後的幾年裡,SGML得到了世界上更多國家的認可。自1985年以來,世界上的SGML用戶群體開始在英國集會。他們協同GCA一起將SGML在歐洲和北美進行推廣,將SGML拓展到更廣闊的領域。美國出版協會(the Association of American Publishers,AAP)的電子手稿項目(the Electronic Manuscript Project)將SGML標準應用於編製通用文檔,如書籍和期刊等。美國國防部為其電腦輔助採集和後勤支持(Computer-Aided Acquisition and Logistic Support,CALS)小組開發基於SGML的應用程式,其中包括一種流行的表格格式文檔類型稱為CALS表格。鑒於SGML的成功,國際標準化組織

(the International Standards Organization,ISO)採納了SGML標準(ISO 8879:1986)。

  SGML被設計為一種靈活的,且無所不包的編碼方案。和XML一樣,SGML基本上是一個為開發專用化標記語言的工具箱。但是SGML比起XML來大得多,它具有更加靈活的語法以及更多的深奧參數。SGML過於靈活了,以至於開發一個能處理SGML的程式過於複雜和昂貴,只有那些能夠承擔得起軟體開發以及SGML環境維護所需開銷的大型機構才能獲得SGML帶來的好處。

  在20世紀90年代早期,由歐洲粒子物理研究所的雇員Tim Berners-Lee和Anders Berglund發佈了超文本標記語言,將通用編碼革命性地引入到了公共大眾的視野中。CERN早在1980開始致力於對SGML的研究和推廣,當時就由Anders Berglund開發出一種出版系統用來測試SGML。隨後Tim Berners-Lee和Anders Berglund提出一種支持超級文本的SGML文檔,這種文檔比SGML文檔精簡和有效。為該超級文本標記語言編寫相應軟體更為容易,且更容易對文檔進行編碼。據此,HTMI。得以由實驗室應用迅速推廣到全世界。HTML的出現極大地推動了世界範圍內的互聯網

的發展,萬維網就是一個主要成果。

  然而,HTML在某些方面是一種通用編碼的倒退。第一,HTML為了獲得精簡編碼方式的有效性,而拋棄了通用編碼的一些基本原則。例如,通用編碼要求一個文檔類型能用於任何目的,要求用戶編碼時應重載標簽而不是重新定義特殊目的的標簽。第二,HTML中的很多標簽是純粹追求顯示效果的,這顯然與通用編碼的初衷相違背。這種簡化的結構很難區分文檔的開始部分和結束部分。如今採用HTML編碼的文檔非常依賴純格式化以致不能被用作其他目的。雖然HTML有著諸多的問題,但是我們不能抹殺它在標記語言的發展過程中為Web的發展帶來飛躍所起到的重要作用。至少,HTML使得全世界的人對電子文檔化和資源鏈接充滿了興趣。

  為了回歸到理想的通用編碼狀態,一些人試著改變SGML以適應Web,或者乾脆改變Web以適應SGML,不幸的是,這被證實是非常困難的。SGML是如此的巨大,不可能被塞進小小的Web瀏覽器中。所以採用一種更小的,卻又能保持SGML通用性的語言是唯一可行的途徑,由此,令人興奮不已的可擴展標記語言誕生了。

XML的目標

  由於不滿於現存信息格式化應用形式,在20世紀90年代中期,由一些公司和組織共同組建的互聯網聯盟開始致力於創造一種融合SGML靈活性和HTML簡單性的標記語言。該組織創建XML的基本原則可以被具體化為以下6個重要原則。

  1、形式應遵循功能

  標記語言必須非常適合相應的數據。不應創造單一和通用的語言以覆蓋所有的文檔類型,應允許存在很多語言,而每種語言都能很好地適應它所面向的數據。用戶能夠自行選擇元素名稱以及決定它們應該在文檔中如何組織。這將帶來更好的標識數據、更豐富的格式化形式以及增強數據檢索的能力。

  2.文檔無二義性

  一個文檔應該有且僅有一種途徑解釋名稱、順序以及元素的層次關係。下麵是一段舊格式的HTML代碼:

<html>

<body>

<p>這是一個段落

<p這是另一個段落>

</body>

<html>

  在XML出現之前,以上代碼中的標記方式是可以被接受的。每個瀏覽器都知道一個<p>標簽的開始表示一個開放的P元素跟在其後面,同時該元素的結束也表示一個新的P元素的開始。這種標記語言所具有的預判能力是XML不包含的,因為這將允許無窮無盡的元素出現,導致可能出現二義性的情況。接下來再看看下麵兩行代碼,第一個元素到底是包含後面那個元素,還是和它鄰接呢?

<flooby>這是一個元素

<flooby>這是另一個元素

  這個問題不管是用戶還是解釋器都無法知道。只能去猜,但是可能會猜錯。這就是為什麼XML對於語法規則要求的如此嚴格的原因。具有嚴格的語法規則將使得文檔中的錯誤標記能夠更明顯地暴露出來,從而減少最終錯誤的數量。另外也能減少相關軟體的複雜度,因為在軟體設計中不必加入邏輯推理或修正語法錯誤的部分。XML的嚴格語法也許會使用戶在編寫XML文檔時花費很多精力來考慮細節問題,但是考慮到編製好的XML文檔的健壯性,花費這點精力還是值得的。

  3.標記與顯示分離

  為了保證文檔具有最大的輸出格式靈活性,必須儘力保持樣式信息處於資料文檔之外,並外部存儲。一個依賴樣式標記的文檔是難以重用或被轉換為新樣式的。例如,在一個文檔中,對於包含的外來短語使用斜體標記,而需要重點強調的短語也用斜體標記,代碼如下:

<example>歌德曾說過,<i>Leben ist wie Sauerkraut</i>。我<i>非常<i>贊同這個觀點。

</example>

  現在對這段信息的樣式進行修改,將需強調的短語由原來的斜體樣式修改為加粗樣式,而保持外來短語的斜體樣式,用戶將不得不人工使用加粗樣式標記替換強調短語原有的那些斜體樣式標記。上述代碼中,由於只有一個強調短語,比較容易替換。但是可以想象一下,如果一個文檔有成百上千個這樣的強調短語,而且還要判斷哪些是外來短語,哪些是強調短語,工作量可想而知。解決類似這種問題最好的辦法是,基於需標記信息的含義進行標記,代碼如下:

<example>歌德曾說過,<foreignphrase>Leben ist wie Sauerkraut</foreignphrase>。

我<emphasis>非常</emphasis>贊同這個觀點。

</exampie>

  然後將樣式信息定義到另外一個稱為樣式單(stylesheet)的文檔中,而不是將其和標簽合二為一。樣式單就像一個格式化程式的查找表,它將信息文檔中的每個元素與顯示設置映射。這使很多事情變得方便和容易。用戶可以任意修改存儲顯示信息的樣式單文件,而不是直接對XML文檔進行全局查找和替換操作。如果用戶不滿意一種樣式單中的顯示方式,他可以使用另一個樣式單文件進行替換。並且同一個樣式單文件也能應用於多個XML文檔。

  由於沒有將標記數據的標簽與樣式綁定,可以保持樣式處於XML文檔之外而增強顯示可能性。因為一個XML文檔可以應用任何合適的樣式單文件,所以人們可以在閑暇時定義很多不同版本的樣式單。同樣,一個XML文檔可以在臺式電腦上顯示,也能被印表機列印,被手持設備顯示,甚至能被語音識別系統朗讀出來,做到這些用戶不必對原始數據文檔有任何知識,只需應用不同的樣式單。

  4.保持簡單性

  為了便於XML在世界上的推廣,XML必須簡單。人們不想去學習一個複雜的系統,而只是為了編寫一個文檔。XML 1.0版本標準制定上保持了直觀性、易於閱讀並且語法優雅等特點。XML允許用戶遵循一些合理的規則設計自己的標記語言。XML是SGML的一個很小的子集,它摒棄了很多SGML中人們不需要的繁瑣部分。簡單性對於應用程式開發也帶來了好處。如果編寫處理XML文件的程式很容易,就會有更多、更便宜的應用程式出現以供人們使用。

  5.進行最大化的錯誤檢測

  有一些標記語言對於語法錯誤過於寬容,任憑這類錯誤的出現和保持。這在某種程度上方便了用戶對該標記語言的使用,但是從長遠來看後果非常嚴重。如果在一個文件里出現了錯誤,那麼它就不會按照人們期望的方式工作。比如:在瀏覽器中的顯示效果不可預期。當應用程式讀取存在錯誤的文件時,將會出現執行異常、數據信息丟失,甚至程式崩潰。

  XML規範說明中提到,只有一個XML文件滿足了一套最小的語法要求,才能說明這個XMI。文件是形式良好的。XML解釋器是對XML文檔進行語法解析和錯誤檢測的應用程式。它會檢測元素名稱的拼寫,確保元素邊界正確,提示對象位置錯誤以及壞鏈等。也許人們會覺得XML這些嚴格的規則過於吹毛求疵,但是你在編寫XML文檔時儘量保持向標準靠攏是非常值得的,這是XML文檔的可用性和持久性的保證。

  6.適應各種語言

  將標記僅定義到一個狹窄的文化範圍內,例如拉丁字母表和英語是不可取的。早先的標記語言就是這麼設計的。為了擺脫這種文化的限制,XML的設計者選擇Unicode(統一的字元編碼標準,採用雙位元組對字元進行編碼)作為XML的字元集,這樣就可以支持世界上的各種國家的語言、行業符號以及其他特殊符號。

XML的文檔格式[2]

  首先介紹XML文檔內容的基本單元——元素,它的語法格式如下:

  (標簽)文本內容</標簽>

  元素是由起始標簽、元素內容和結束標簽組成的。用戶把要描述的數據對象放在起始標簽和結束標簽之間。例如:<姓名>王平</姓名>。無論文本內容有多長或者多麼複雜,XML元素中可以再嵌套別的元素,這樣使相關信息構成等級結構。用這樣韻方法定義XML文檔數據和數據結構。

  除了元素,XML文檔中出現的有效對象是:聲明、註釋、根元素、子元素和屬性。

  1.聲明:聲明給XML解析器提供信息,使其能夠正確解釋文檔內容,它的起始標識是“<?”,結束標識是“?>”。例如XML聲明:<?xml version="1.0" encoding="GB2312"?>,該聲明指明使用的XML版本號和文檔使用的字元集是中文字元集“GB2312”。又如顯示樣式表文件聲明:<?xml-stylesheet type="text/xsl" href="e12_2_1.xsl"?>,指明按e12_2_1.xsl樣式表文件指定格式顯示本XML文檔。

  2.註釋:註釋是XML文件中用作解釋的字元數據,XML處理器不對它們進行任何處理。註釋文本被“<!_”和“_>”標記,註釋可以出現在XML元素問的任何地方,但是不可以嵌套。下邊是一個註釋的例子:<!_這是一個註釋_>。

  3.根元素和子元素:如果一個元素從文件頭的序言部分之後開始,一直到文件尾,包含了文件中所有的數據信息,我們稱之為根元素。XML元素是可以嵌套的,那麼被嵌套在內的元素稱為子元素。在前面的例子中,<學生>就是根元素,<編號>就是<學生>的子元素。一個XML文檔中有且僅有一個根元素,其他所有的元素都是它的子元素。

  4.屬性:屬性給元素提供進一步的說明信息,它必須出現在起始標簽中。屬性以名稱/值成對出現,屬性名不能重覆,名稱與取值之間用等號分隔,取值用引號括起來。例如:<工資 currency="US$">25000</工資>,其屬性說明瞭薪水的貨幣單位是美元。

  5.XML文檔的基本結構:XML文檔的基本結構由序言部分和一個根元素組成。序言包括了XML聲明和DTD或XSD聲明,DTD(Document Type Define,文檔類型定義)和XSD(XML Schema,XML架構)都是用來描述XML文檔的數據結構的。

  6.格式良好的(Well-Formed)XML文檔:一個XML文檔首先應當是格式良好的,格式良好XML文檔的正式定義位於:http://www.w3.org/TR/REC-xml。格式良好的XML文檔除了要滿足根元素唯一的特性之外,還包括:

  ①起始標簽和結束標簽應當匹配,結束標簽是必不可少的;

  ②大小寫應一致,XML對字母的大小寫是敏感的,<employee>和<Employee>是完全不同的兩個標簽,所以結束標簽在匹配時一定要註意大小寫一致;

  ③元素應當正確嵌套,子元素應當完全包括在父輩元素中,下麵例子就是錯誤嵌套:<A><B></A></B>,正確的嵌套方式為<A><B></B></A>;

  ④屬性值必須包括在引號中,元素中的屬性名是不允許重覆的。

相關條目

  • HTML
  • SMIL
  • VRML
  • SGML


日本黄色-日本成人