1.什么是XML?
XML 開發(fā)者們會告訴你,事實上XML并不是一種語言,而是一種用來定義其它語言的系統(tǒng)。可能你已經(jīng)聽過,或許甚至自己嘗試過一些這樣的語言——比如微軟為推(push)技巧所推出的頻道定義格局(Channel Definition Format)。
W3C是互連網(wǎng)上一些公用尺度的開發(fā)者,他推出了一系列和XML相干的尺度和草案。他們把XML描敘成“一種用來表達結構化數(shù)據(jù)的通用語法”。所謂結構化數(shù)據(jù)是指被標簽(tags)定義了其內(nèi)容,意義和用法的數(shù)據(jù)。例如,在HTML的定義中,<H1>標簽所定義的文本,將會用一種特定的字體和大小所顯示出來。一個XML標簽會明白的斷定一種信息: <AUTHOR>標簽可能表現(xiàn)的是文檔的作者,而<PRICE>則可能包含了產(chǎn)品的價格。與HTML中標簽所不同的是:XML標簽的含義是自定義的,假如你愿意,可以用<PRICE>來表現(xiàn)作者信息,而用<AUTHOR>來表現(xiàn)產(chǎn)品價格。固然這看起來會很別扭,但盡對是準確的。
通過火別結構和數(shù)據(jù),一份XML文檔能夠一經(jīng)寫出,就能利用在多種不同的用處:在盤算機屏幕上顯示出來,或者顯示在手機屏幕上,又或者被轉到為盲人設計的語音設備上,等等,諸多功用,不一而足。它幾乎能夠工作在任何可能的通信設備上。這時候,一個XML文檔的作用,已經(jīng)遠遠超出了當初你所認為的那樣,僅僅是用來顯示內(nèi)容的簡略文檔了。這樣,XML就能夠在除了互連網(wǎng)的其它處所也能夠一展身手。
在一些大型的文檔制作商中,SGML是他們用了很多年的語言,但是它實在是太復雜了,僅僅是定義就有400多頁。XML的呈現(xiàn)也為他們發(fā)明了一些契機。事實上XML是SGML的一個精簡了的子集,SGML的大部分工作都可以由XML來完成,而XML比起SGML來卻是簡略了很多。
當然,平臺無關的XML最初是為Web所設計的,它也將在在Web上產(chǎn)生最大的影響。
DOM(Domument Object Model)是一個編程接口,他定義了在一個文檔中如何進行數(shù)據(jù)存取的機制。XML能夠為Web所做的,很大程度上取決于它是如何同DOM(文檔對象模型)進行交互。
應用DOM,程序員可以用一種尺度的方法來動態(tài)的把持文檔的內(nèi)容和相干的一些屬性。換句話說,程序員可以讓在一個瀏覽器的文檔對象樹中的一段內(nèi)容進行一些特定的動作。例如:當把鼠標移到一小段文字上面時,它會轉變色彩。網(wǎng)景的Navigator和微軟 Internet Explorer都定義了個不相容的DOM,但是這兩個公司都頒布在他們下一個版本的瀏覽器中會支撐W3C的尺度DOM。這會給程序員帶來很多的方便。
2.為什么XML很重要?
在Web上一條很重要的原則是:內(nèi)容是一個網(wǎng)站最為重要的東西。但不幸的是,內(nèi)容總是同如何將他們顯示出來這個方面接洽在一起的。你在瀏覽網(wǎng)頁的時候,有多少次看到一個小小的標簽,上面寫著“最好在800*600解析度下瀏覽本網(wǎng)站”呢?數(shù)不勝數(shù)吧!
XML將有助于解決這個標題。由于在XML中,網(wǎng)站建設者不再是指定在網(wǎng)頁的什么處所顯示什么東西,他們需要做的是定義好一個文檔的結構。例如,你需要定義的是文檔的標題,作者,一系列相干鏈接等等。任何設備有XML 瀏覽器的設備——一個掌上電腦,或這是電視機頂盒,或者是一個高性能的工作站等等——就能夠把XML文檔的內(nèi)容根據(jù)各個設備的顯示特征顯示出來。
或許XML最強的特征,在于其內(nèi)在的可擴大性。任何的公司和組織都能夠擴大XML 來實現(xiàn)新的利用?,F(xiàn)在在乎聯(lián)網(wǎng)上幾乎天天都有關于XML的利用計劃的提出。一些基于XML的語言已經(jīng)開端被應用,像微軟的頻道定義格局——還有一些正在被開發(fā)之中,包含Resource Definition Format(資源定義格局)和Open Software Description(開放式軟件描敘)等等。
XML還很有可能成為數(shù)據(jù)和文檔交換機制的尺度。例如,可以用XML來實現(xiàn)在Internet上不同數(shù)據(jù)庫之間的信息交換。
到現(xiàn)在為止,要準確的闡明XML的公用似乎還為時過早。但是它所帶來的可能性是無限的,或許這就是為什么XML能夠在其初期就能夠如此引人關注的原因吧。
3. SGML,HTML和XML的關系是怎樣的?
SGML,尺度通用標記語言(Standard Generalized Markup Language)最早是用來再字處理程序中描敘數(shù)據(jù)用的。像RTF(富文本)文件,Word的DOC文件等等,都可以看成是利用SGML的例子。假如你用記事本打開一個RTF文件,就可以看到同HTML相近的一些東西,那就是RTF的源數(shù)據(jù)描敘,也是通過SGML定義的。SGML從出生到現(xiàn)在已經(jīng)有上10年的時間了,可以說已經(jīng)發(fā)展的十分成熟。XML和HTML都可以算的上是SGML的徒子徒孫了,他們都是從SGML發(fā)展而來的文檔格局描敘語言。因此他們都有一些共通的特征,比如相近的語法,都應用尖括號標簽等等。但是準確的說來,HTML是SGML的一個利用,而XML是SGML的一個精簡子集。
這其間的差別是本質上的。簡略的說來,HTML不能夠用來定義(或者說衍生)一個新的利用,而XML卻能夠做到。例如,資源描敘格局和頻道定義格局就是由XML定義出來的新的利用。理論上講,甚至可以用XML來重新改寫HTML。對于它們之間的關系,W3C給出了一個圖例(見圖),活潑的闡明了這一點。
XML事實上是與SGML相兼容的——XML文檔能夠被任何的SGML編纂和瀏覽器所解析。但是,XML比SGML要簡略的多,并且他是特別的為傳輸帶寬有限的Internet所設計的。Tim Bray是XML尺度的編制職員之一,根據(jù)他的說法,XML就是要持續(xù)SGML的長處,但往處SGML的復雜性,并使之能夠在網(wǎng)上很好的工作。
HTML,SGML,和XML都將在必定時間內(nèi)守住自己的崗位,暫時不會有哪一種會被其他的所淘汰。HTML仍然是網(wǎng)上宣布信息的最為快捷的方法。假如要宣布的數(shù)占領長期的利用價值并且需要一些結構化的內(nèi)容,網(wǎng)站建設者應當考慮轉而應用XML。和HTML與XML不同,SGML將不會在網(wǎng)上得到廣泛的贊成,由于它并不是為網(wǎng)上傳輸而特別設計的。但對于高真?zhèn)€利用,那些高度結構化的文檔利用,SGML仍將施展起作用。
4.XML是如何被實現(xiàn)的?
XML能夠被利用到很多不同的方面。其中之一是用來在人和機器之間交換信息,比如把信息從一個網(wǎng)站服務器說明了在傳遞給用戶瀏覽器共用戶瀏覽。在有就是在不同的機器,不同的系統(tǒng),不同的利用程序之間進行數(shù)據(jù)交換。
在上面的兩種利用中,你可能都需要一種三層模式各構架:一個數(shù)據(jù)庫服務器是一層,用來存貯數(shù)據(jù)。一個作為中間層的服務器,用來對數(shù)據(jù)進行適當?shù)恼f明和表達,然后就是客戶端,數(shù)據(jù)被顯示出來,并能夠做進一步的利用。數(shù)據(jù)庫服務器能夠從多個數(shù)據(jù)源接收信息,或許它們已經(jīng)是作為XML格局存在了的。中間層能夠把所有的數(shù)據(jù)整合起來,然后發(fā)送到客戶端往。
現(xiàn)在,很多的Web網(wǎng)頁就是這樣被天生的。并且,一個結構的比擬好的XML文檔,能夠答應客戶端程序修正文檔的外端來顯示在不同的媒介中,比如在打印機中打印出來。
5.什么是DTD?
一個文檔類型定義(Document Type Definition)是一套標簽的語法定義。它告訴你在一個XML文檔中你能夠應用那些標簽,標簽呈現(xiàn)的次序以及能夠應用那些屬性等等。DTD最先是在SGML中工作的,在XML中也引進了DTD,但它不是構成一個XML文檔所必需的。而且,它通常也并不與XML一起呈現(xiàn)在一個文檔中(當然也可以在一起),而是在一個單獨的DTD文件中,這樣,一個單獨的DTD就可以被多個XML文件所引用了。
由于XML本身并不是一個語言,而是用來定義其他語言的尺度方法,因此他并沒有一個像HTML那用的通用的DTD。因而,每個想用XML的公司和個人,都可以定義其合適的DTD,來滿足不同的請求。
關于DTD也有很多的爭辯。一些人認為它為很重要,是最為本質性的東西。一些人為它限制了發(fā)明性,還有一些人認為它很有用,但還不是足夠的好。微軟試圖用他的XML-Data來結束這些爭辯,但批評家們認為應當從DTD的本質定義上對其進行改良。
微軟的schema包含微軟在內(nèi)的一些公司,針對DTD的一些標題提出了一個DTD的代替計劃,稱為schema,并且已經(jīng)作為XML-Data提交給W3C。和DTD類似,一個schema供給了關于文檔的一些規(guī)矩,并給出了能夠應用的標簽,屬性以及標簽之間的屬性,等等。
但與DTD所不同的是,schema能夠用來定義數(shù)據(jù)類型。例如,假如在DTD中定義了一個名為<PRICE>的標簽,此時包含在標簽中的內(nèi)容可以是數(shù)字或者字符串。但是假如應用schema,就可以強迫其中輸進的內(nèi)容只能是數(shù)字,而不能夠輸進其他類型的數(shù)據(jù)。
這種方法顯然是有效的,特別是在不同的利用程序,對象或者數(shù)據(jù)庫之間交換數(shù)據(jù)的時候。唯一的標題就是:schema能否成為DTD尺度的一部分,或著僅僅是一個獨立的XML的擴大。
6.什么是well-formed和valid文檔?
在本質上存在著兩種類型的XML文檔:well-formed(結構良好的)和 valid(有效的)。一個結構良好的XML文檔服從XML語法的一般規(guī)矩。這個規(guī)矩說起來要比HTML和SGML都要嚴格的多。HTML的語法規(guī)矩有很大的隨便性,經(jīng)常可以有一些省略和不規(guī)范的寫法存在。但XML文檔卻不能夠這樣,必需嚴格的以XML的語法規(guī)矩來撰寫XML文檔。下面給出了well-formed的XML應當遵照的幾條規(guī)矩:
1. XML文件的第一列必需是XML的文檔聲名;
2. XML文件中只能有一個根節(jié)點。
3. 開端標簽與結束標簽必需稱對呈現(xiàn)。
4. 空的標簽必需要有“/”符號。
5. 首有的標簽不能夠交叉呈現(xiàn),必需滿足巢狀的結構。
6. 英文的大小寫是有差別的。
7. 屬性指必需用雙引號包抄起來。
8. 特別字符有特別的表達方法,包含“&”,“<”,“>”,“"”,“'”這五個字符。
一個有效的XML文檔要比結構良好的XML文檔請求更為嚴格一些。它除了要滿足所有上面列出的八條規(guī)矩外,還必需遵照一個DTD文檔的定義。前面說過,DTD對于一個XML不是必需的,但對于一個有效的XML文檔來說,必需有一個對應的DTD定義存在。
確認XML文檔的有效性,很大程度上是那些出版和撰寫工具所要考慮的標題。對于一般的XML瀏覽器而言,要顯示出XML的內(nèi)容,只需要是滿足well-formed的定義就可以了。
7.瀏覽器是如何解讀XML文檔的?
用來解讀XML的工具一般的被稱為XML分析器(parser),不過它正式的名稱應當是XML處理器(processor)。XML為那些用來撰寫,出版,搜索,或者顯示的利用程序傳遞數(shù)據(jù)。XML并沒有供給一套API(利用程序接口)來節(jié)制其行動,他只是簡略的把解析后的XML文檔傳遞給利用程序。當然,前面已經(jīng)說過,對于不滿足well-formed條件的XML文檔,XML是不會進行解析的。網(wǎng)景和微軟都已經(jīng)在其最新版本的瀏覽器中內(nèi)置了XML解析器。這樣,當XML被傳遞到客戶端瀏覽器時,首先經(jīng)過解析器的解析,然后才傳遞給瀏覽器把內(nèi)容顯示出來。
8,RDF,CDF和XML之間有什么關系?
假如XML有才能說出某種語言,那么XML利用程序就可以看成被說出的那種具體的語言。RDF(Resource Description Format)就是那樣的一種XML利用。它也是一種語言,只不過是遵照XML的語法,由XML衍生出來的。
RDF是用來描序和存取數(shù)據(jù)的一種方法。這意味著RDF是關于數(shù)據(jù)的數(shù)據(jù),或者稱為元數(shù)據(jù)(metadata)。在WEB上,這種元數(shù)據(jù)可以被用來建立尺度的網(wǎng)站輿圖,得到更為準確的搜索成果,以及網(wǎng)站主體的分級描序。
RDF還能夠用來創(chuàng)立智能書簽,當書簽所引用的網(wǎng)頁地址產(chǎn)生轉變的時候,書簽本身也能夠主動的轉變。這對于那些內(nèi)容經(jīng)常更新的網(wǎng)站來說尤為有用。對于網(wǎng)站的建設者而言,應用metadata是一件很簡略但能夠收效頗大的事情。
同樣的,CDF也是有XML發(fā)展而來的。CDF(Channel Definition Format)是由微軟提出并大力提倡的。通過它的XML解析器,Internet Explorer 4.0能夠讀懂CDF文件并更具其內(nèi)容進行相干的網(wǎng)頁提取把持。這也就是所謂的“推”技巧。網(wǎng)景也有相應的“推”技巧,但在語法構成上與微軟的CDF并不雷同。
9,作風頁和XML的關系是什么?
由于XML把內(nèi)容和表現(xiàn)情勢離開來了,所以網(wǎng)站設計者們需要一種新的方法來節(jié)制版面的和外觀的顯示。作風頁這時候挺身而出了。到現(xiàn)在,共有三種不同的作風頁能夠和XML一起工作,它們是:
1. Cascading Style Sheets (CSS)。
2. Extensible Style Language (XSL)。
3.Document Style Semantics and Specification Language (DSSSL)。
XML對于現(xiàn)在的CSS尺度支撐的很好,CSS也能夠完成大部分基礎的作風和外形的設定。但是CSS并不能夠滿足一些高真?zhèn)€利用。這時候或許更多的請求助于DSSSL,這項ISO尺度。它曾經(jīng)和XML的先輩SGML合作得很好,現(xiàn)在對付XML當然不會有什么標題——唯一的標題是:她太復雜了,而且大多數(shù)是為了出版業(yè)而設計的,并沒有太多地考慮網(wǎng)上傳輸?shù)奶貏e性。
于是,剩下的就是XSL了,它基礎上就是專為XML所設計的?,F(xiàn)在XSL正作為W3C的一項議案有待于通過討論,所以現(xiàn)在只有在IE5中得到了支撐,其他瀏覽器都還不熟悉XSL。XSL給網(wǎng)頁設計者和用戶以更大的彈性,它很多的特征在HTML中基本是無法想象的。例如:HTML的<H2> 標簽在所有的瀏覽器中顯示都是一成不變的,但在XSL中,社記者能夠指定任意的頁面元素按他們的想法顯示出來。而用戶也可以通過個人的設定來決定<H2>到底該如何顯示。 XSL是被設計成可以和一些腳本語言比如javascript協(xié)同工作的。你甚至可以寫這樣的腳本:“if 某個XML元素的某個屬性值=10 then 讓它顯示成綠色,else 讓它顯示成藍色”,等等。和XSL在一起,XML顯得無所不能。
10.XML對于超鏈接有那些改良?
XML對HTML的超鏈接做了一些改良,增加了一些特征,包含能夠建立“智能”鏈接,可以省往不少手工編寫JavsScript的麻煩。在XML中,鏈接是作為一個對象呈現(xiàn)的,可以向把持任何的其它對象那樣,對超鏈接進行方便的把持。
本來的關于鏈接的的尺度——XLL,XML鏈接語言(XML Linking Language)現(xiàn)在被分為兩種新的尺度:Xpointer和XLink.
Xpointer:在HTML中,可以通過書簽鏈接到一個頁面的任何處所。通過Xpointer你將能夠“尋址到(address to)”(而不是“鏈接到(link to)”)其他頁面的任何一部分的內(nèi)容。顯然的,這對于在文檔引用方面是非常有用的。
Xlink:當用戶點擊了HTML中的一個超鏈接后,當前的網(wǎng)頁被一個新的網(wǎng)頁所調換。Xlink能夠讓Web開發(fā)者為鏈接這個對象添加一些動作(behaviors)。例如:在現(xiàn)在你必需用javascript來實現(xiàn)把鏈接的網(wǎng)頁在一個新的窗口中顯示出來,但Xlink通過給鏈接對象添加了一些行動,實現(xiàn)彈出窗口輕易到只是簡略的調用對象的方法而已。其他的一些有用的利用,像彈出的警告對話框,需要用戶做出確認的對話框等等,通過Xlink的對象機制都可以很輕易地實現(xiàn)。但現(xiàn)在,我們還都必需求助于腳本編程采能夠解決。
對于一系列相干的鏈接,XML能夠讓Web開發(fā)者創(chuàng)立擴大鏈接(Extended Links)來方便的實現(xiàn)像www.webring.com這樣的網(wǎng)站或網(wǎng)頁,把一些雷同主題的網(wǎng)頁主動的鏈接在一起?,F(xiàn)在實現(xiàn)這個功效需要應用到CGI腳本,但是擴大鏈接將供給尺度的方法來建立資源之間的關聯(lián)。
現(xiàn)在還有一些標題需要得到進一步的討論,特別是在“行動”機制方面還有一些工作要作。但這并不妨礙在不久的將來,Xpinter和Xlink作為新的尺度被廣泛應用。
11.XML的國際化標題
XML的呈現(xiàn),使得網(wǎng)站的國際化變得空前的輕易。和Java一樣,XML也是應用的Unicode(ISO 10646)作為其編碼尺度,這是的網(wǎng)站建設者們能夠很輕易的寫出各國的文字和符號,而不必過多的擔心亂碼的標題。Unicode 包含了所有的ASCII字符,以及簡體中文,繁體中文,日文,韓文,希臘文等等。在XML中甚至可以答應有混雜的編碼呈現(xiàn),例如,一個顯示中文的網(wǎng)頁可以引用一個德文的單詞,而不必擔心呈現(xiàn)亂碼。
開發(fā)者不需要專門為了Unicode而在往學習什么新的東西,網(wǎng)頁一經(jīng)寫好后,在客戶真?zhèn)€瀏覽器中顯示時,瀏覽器會主動的應用合適的字符集把網(wǎng)頁顯示出來