3.格式正確的XML文檔VS有效的XML文檔
一個正確編寫的XML文檔可以有兩種形式:它可以是格式正確的或者是有效的.如果一個XML文檔在編寫時遵從了XML標准中所列的規則,那麼它就被認為是格式正確的.如果一個XML文檔在編寫時還遵循了一個標准的文件數據格式或組織架構,那麼它就被認為是有效的.
在使用XML交換數據時,有效性是相當重要的.如果我有一個有關發票的XML文檔而且我想和我的商業伙伴通過它來交換數據,那我該怎麼辦呢?顯然,我首先要告訴我的伙伴我想要的文件格式和我的文檔將遵從的格式.
目前有兩種方法可以用來詳細定義XML文檔的格式:Document Type Definition(DTD)和XML Schema.DTD是XML1.0標准中的一部分,所以它們目前是最流行的定義方法.但是問題在於DTD使用的語法非常不直觀,這就與XML的宗旨背道而馳.而且DTD不能讓你自己指定不同元素的類型.
XML Schemas說明規格則是由微軟和其他XML業界公司提出來的,被W3C視為未來DTD的替代者.XML Schemas使用一種類XML語法來描述XML文檔.另外,XML Schemas提供了在文件中描述元素類型的功能(通過XML-Data).在我們看來,對那些非SGML專業人員而言,Schemas比DTD更容易閱讀,更容易理解,也更容易編寫.
XML能夠讓你輕松地定義自己的文件格式和標簽,不過如果每一個人都使用他自己定義的文件格式的話,恐怕就沒有人能彼此交換相似的文件信息了.目前有兩個比較正式的"通用文件"標准組織,而且兩者相互對立.在這種對峙的情況下,很多公司不得不痛苦地游離在兩大陣營之間.
BizTalk.這個由微軟公司領導的組織希望建立一個為通用商務文件(發票,訂單等)服務的平台.
XML.org.這個組織則站在與微軟公司對立的角度上,提倡用DTD來定義基本商務文件格式.
究竟哪一個標准會在這場游戲中取得最後的勝利,現在評論還為時過早.將來最有可能出現的情況是有兩到三種流行的文件格式,而轉換工具會幫助人們把文件從一種格式轉換到另一種格式.
4.XML Document Object Model
如果你現在已經有了一個XML文件,你該如何對它進行操作呢?在下一節中,我們將介紹如何將一個XML文件轉換成一個HTML文件在浏覽器上顯示出來,這一節我們要介紹的是使用XML Document Object Model(DOM)來讀寫XML文件.當一個XML處理器解析了一個XML文檔後,處理器把該文檔保存到一個內存空間樹中.DOM是訪問該樹的程序化接口,通過它你可以讀,添加,刪除和編輯樹中的節點.
圖A展示了我們的實例文件保存到一個內存空間樹中的情況.每一個DOM樹都以一個文件對象為起點,所有的數據都保存其中.
圖A
在IE5中,可以通過任何一個程序或腳本語言對XML DOM進行訪問.例如,在表B中的JavaScript將改變美洲航空公司第一個航班的航線:
表B: 用JavaScript將改變美洲航空公司第一個航班的航線
var myDocument = new ActiveXObject("microsoft.xmldom");
myDocument.load("flights.xml");
myDocument.documentElement.childNodes.item(0).childNodes.item(3).text
= "American Airlines";
程序的第一行創建了一個空的DOM對象.第二行通過document.load()方法把我們的數據文件引入到DOM對象中.最後,在最後一行用一個很長的命令去訪問第一航班的航線的節點並改變其中屬於"美洲航空公司"的節點的內容.這一切是通過childNodes屬性實現的,它使我們可以通過一個數字索引來訪問某個子節點.DOM還提供了很多其他的方法讓我們可以通過名稱或其他屬性來訪問節點.
上面的例子顯然很一般,不過它很好地向我們展示了有關DOM的程序是個什麼樣子.如果你想用XML進行一些工作,就必須要了解DOM,同時還要學會如何操作、訪問文檔對象樹.