delphi操作xml學習筆記 之二 簡單讀寫

作者: cactus123456標題: delphi操作xml學習筆記 之二 簡單讀寫 關鍵字: xml 簡單讀寫 dom 分類: 個人專區 密級: 公開XML的二十個熱點問題翻譯:Chen Zhihong這些日子,幾乎每個人都在談論XML (Extensible Markup Language),但是很少有人真正理解其含義。XML的推崇者認為它能夠解決所有HTML不能解決的問題,讓數據在不同的操作系統或應用之間進行靈活交換。確實,所有的觀察家們都同意XML將引發一場內容發布和知識交換的革命。誰先進入這個領域,誰就能夠大獲其利。這裡的20個有關XML的熱門問題能夠讓你成為一XML「專家」,或至少讓你能夠在今後看準XML的發展方向。 1 什麼是XML? 11 OSD和CDF與XML的關係如何? 2 XML何以重要? 12 電子商務(e-commerce)和XML? 3 SGML、HTML和XML有什麼聯繫? 13 XML中的層疊樣式? 4 如何實現XML? 14 XML如何改進超鏈接? 5 什麼是文件類型定義(DTD)? 15 伺服器上支持XML嗎? 6 什麼是格式完整和有效的文件? 16 誰應該學習XML? 7 如何在瀏覽器中閱讀XML? 17 有哪些編寫XML的工具可供我使用? 8 RDF和XML有何聯繫? 18 XML的國際化? 9 Netscape瀏覽器中如何實現XML? 19 XML的未來在哪裡? 10 Microsoft瀏覽器中如何實現XML? 20 哪裡能學到更多的XML知識? 1.什麼是XML?XML代表擴展標識語言(Extensible Markup Language). 由萬維網聯盟(W3C)帶頭, XML在1998年2月10日成為正式的規範. XML開發者會告訴你XML不是一種語言,而是一個定義其他語言的系統. 你可能已經聽說過, 或使用過這些語言中的一種,--如Microsoft支持"推技術"的 Channel Definition format(CDF).正從事於XML相關建議工作的W3C, 稱XML為"表達數據中結構 的共同語法". 結構化的數據指的是其內容,意義或應用被標記的數據. 例如, HTML中<H1>標記指定文本為某一字體和大小, XML的標記將明確確定信息的種類: <BYLINE>標記可以識別文檔的作者, <PRICE>標記可以在一個存貨清單中包含某一項目的成本 . 通過將結構,內容和表現分離, 同一個XML源文檔只寫一次, 可以用不同的方法表現出來: 在計算機屏幕上, 在手提電話顯示屏上, 在為盲人服務的設備上翻譯成語音, 等等. 它可以在可能開發的任何通訊產品上工作. 一個XML文檔因此可以比其書寫時的作者和顯示技術生存得更久.所以, XML將不僅限於Internet, 例如, 可以服務於整個出版業, 特別是對於想製作可出現在多種媒體上的文檔的人. 一些使用Standard Generalized Markup Language (SGML)多年的大型文檔出版商將轉向XML. 還有, 獨立於平台的XML是為Web開發的, 這是它將最具影響的地方. XML在Web的真正實力在於它是如何與文檔對象模型(Document Object Model,DOM)交互的. DOM定義了訪問XML文檔數據的介面. 程序員利用DOM可以用標準的方法編寫動態的內容. 換句話說, 他們可以使用它來使瀏覽器文檔樹中的一部分特定內容按照一定的方式表現, 例如, 當用戶將滑鼠移至文字上時, 這些文字變成藍色. Netscape Navigator 和 Microsoft Internet Explorer瀏覽器都有各自的DOM, 但是他們都稱將在其下一版本的瀏覽器中支持W3C 的標準DOM. 2.XML何以重要?Web領袖之間的說法是內容至上.可是不幸地是:內容經常和其表現緊密結合.請問你多少次在網頁中遇到一個小小的提示:"最好在800x600像素的解析度上顯示"? XML將幫助解決以上問題, 因為網站建設者不用再指明在哪裡顯示什麼, 而是指明文檔 的結構. 例如, 你可以說明文檔的標題, 作者, 關聯文檔的清單, 等等. 然後, 任何一個有XML瀏覽器的設備都可以給出最適合它的文檔版本, 這樣的設備可以是一個掌上型計算機, 置頂盒, 或高速的工作站. 但是, 也許XML的最佳特性是其內在的可擴展性. 公司和組織能夠擴展XML來滿足新的挑戰和應用. 一個基於XML的語言已經在使用--微軟的Channel Definition format (CDF)-- 還有更多將出現, 包括 Resource Definition format (RDF) 和 Open Software Description (OSD). XML 也允諾成為交換數據 和文檔的標準機制. 例如, XML可能成為不同廠商的資料庫在Internet上交換信息的一種方法.現在準確地決定XML的方向還有一些早. 但是, 其各種可能性是令人敬畏的,這就是為什麼圍繞著XML有如此多的激動的一個重要原因. 3.SGML、HTML和XML有什麼聯繫? SGML是在文字處理應用中表達數據的一個方法. 它已經出現十多年了, XML和HTML都是從SGML 發展而來的文檔形式. 因此, 它們都有一些共同點, 如相似的語法和標記的使用.但是HTML是SGML的一個應用, 而XML是SGML的一個子集. 區別是重要的. 基本上HTML不能用來定義新的應用, 而XML可以. 例如,RDF和CDF都是使用XML定義的應用. XML和HTML更象表兄弟, 而不是親兄弟. 事實上, XML和SGML是兼容的 -- XML文檔可以通過任何SGML製作或瀏覽工具閱讀. 但是, XML沒有SGML那麼複雜, 它是設計用於有限帶寬的網路的, 如Internet. XML規範的合作者Tim Bray說, XML的設計出發點是取SGML的優點, 去除複雜的部分, 使其保持輕巧, 可以在Web上工作. HTML,SGML和XML將繼續用於其合適的地方, 它們中的任何一個不會使其他一個廢棄. HTML仍是在Web上快速出版數據的最簡單的方法, 大部分短期的數據, 如會議議程或廣告宣傳冊. 如果數據會長期使用, 並且需要更多的一些結構, Web建造者將願意使用XML. 不同於HTML和XML, SGML可能永遠不會在Internet上被廣泛接受, 因為它從來沒有為某個網路協議的需求而設計或優化過. 對於高端的, 複雜結構的出版應用, SGML將繼續適用. 4.如何實現XML? XML將以幾個不同的方式應用. 一個是在人機之間交換數據, 如從Web伺服器至用戶的瀏覽器. 另外一個是在不同的應用之間交換數據, 或者是機器之間交換數據. 在這些情況下, 你都可能需要三層架構: 後端資料庫, 針對數據的處理邏輯的中間層伺服器, 以及數據進一步顯示和處理的客戶端. 資料庫可以從多個數據來源接收信息, 可能已經是XML格式的數據. 中間層然後收集數據並在最終的表現層上輸出和表現.. 現在, 網頁有時候以這種方法傳送 --CNET的NEWS.COM從一個資料庫中發表數據.但是要獲得一頁的新的視圖,如NEWS.COM的新的「印表機友好」選項, 伺服器必須產生一個新的頁面. 一份適當格式化的XML文檔將允許客戶端的應用為不同的媒體修改文檔的表現形式, 比如為印表機.5.什麼是DTD?文檔類型定義(DTD)是一套關於標記符的語法規則.它告訴你可以在文檔中使用哪些標記符,它們應該按什麼次序出現,哪些標記符可以出現於其它標記符中,哪些標記符有屬性,等等.DTD原來是為使用SGML開發的, 它可以是XML文檔的一部分, 但是它通常是一份單獨的文檔或者一系列文檔 因為XML本身不是一種語言,而是定義語言的一個系統,它沒有象HTML一樣擁有一個通用的DTD.相反, 想使用XML進行數據交換的工業或組織可以定義它們自己的DTD. 如果一個組織想用XML來標識僅在內部使用的文檔, 它可以創造自己私有的DTD. 比如 華爾街雜誌交互版本擁有一個 DTD 來詳細說明每一版, 其中有關於頁, 文章, 概要, 標題下署名等等的信息.刊物目前使用SGML DTD,但是它也正在開發一個XML版本. 關於DTD並不是沒有爭議的. 一些人感到它給商業業務增加了實實在在的價值, 而一些人感覺它限制了創造性. 還有一些人認為DTD有用, 但是還做得不夠. 微軟正嘗試用它的XML數據提議來解決上一個抱怨, 但是批評者說這些改進應該在DTD規範本身進行. 一些供應商, 包括微軟, 已經提議了替代DTD的一個方法, 稱為schema. 他們已經將其以XML數據提交給了W3C. 就象DTD, Schema提供了文檔的規則, 並指出用什麼標記符, 標記符的屬性, 之間的聯繫, 等等.但是,不同於DTD, schema可以定義數據類型. 例如, DTD可能有一個標記符 <PRICE>, 而標記符之間的內容可以是數字或字元串. Schema 可以規定只輸入數字.這個方法顯然有其優點, 特別是用於應用,對象,或資料庫之間的數據傳輸. 唯一的問題是它將成為DTD規範, 還是XML的一個擴展.6.什麼是結構良好和有效的文件? 基本上有兩類相關的XML文檔: 結構良好的和有效的. 結構良好的 XML文檔遵守XML語法的一般規則, 這些規則比HTML和SGML的更為嚴格. XML的字元數據決不會弔在那裡, 沒有某種結束標識符, 或者是象<MYTAG></MYTAG> 成對出現的 結束標識符, 或者是一個特別的在右尖括弧前帶有一個斜杠的 空元素 標記, 比如 <MYTAG/>; XML 標識總是以左尖括弧或 & 開始; 元素類型和屬性名稱是大小寫區分的; 屬性需要引號; 等等. 有效的 XML 文檔遵守某個特定的DTD.確認XML文檔正確性的工作主要由製作出版工具承擔, 而XML瀏覽器為讀取XML文檔, 只需要檢查其構造的良好性. 這樣, 製作工具中的解析器得要檢查構造良好性 和 有效性, 而瀏覽器僅要考慮尋找已經構造良好的XML. 7 如何在瀏覽器中閱讀XML? 閱讀XML文檔的工具一般稱為XML解析器, 雖然其更正式的名稱是XML處理器. XML處理器將數據傳送到應用軟體, 以做製作, 出版, 查詢, 或顯示. XML不給應用軟體提供 應用程序介面 (API), 它只是把數據傳給應用軟體. XML處理器不解析非結構良好的數據. Netscape 和 Microsoft 都已經將XML解析器包含在其瀏覽器中, 或正計劃將其包含到瀏覽器中. XML開發者團體提供免費的XML閱讀器和解析器, 來應用到應用軟體或XML製作軟體:Textuality的 Lark, 來自XML標準的作者之一. Microstar的 AElfred, 一個基於Java的解析器. DataChannel的 DXP, 前身為著名的NXP, 或已經增加了API的Norbert的 (Mikula) XML 解析器.8 RDF和XML有何聯繫?如果XML提供了表達語言的能力,那麼XML應用則是特定的語言.資源描述框架(Resource Description Framework,RDF) 是這樣的一個應用軟體:使用XML的語法進行數據建模. RDF是一種描述和訪問數據方法. 這意味著RDF是關於數據的數據, 或者說元數據. 在Web中, 這些元數據將被用於建立標準的站點地圖, 更精確的搜索結果, 和分層次的主題索引. RDF也允許智能書籤, 當被索引的網頁變化時, 書籤隨之發生變化. 如果你跟蹤內容定期更新的站點, 比如CNET的 NEWS.COM, 將很有用.對於網站建設者,建立可被搜索引擎引用的其網站內容的元數據並不困難. 我們很快就會有商業化的軟體, 來自動產生給定站點的RDF文件.XML元數據也將活躍數據描述和評估的市場. 有許多評級機構在網上出現, 他們評估一切數據, 從保護孩子安全的站點到最佳電影或葡萄酒站點. RDF可以使用的等級的語法來描述評級機構.人們將選擇有他們感覺最合適的辭彙表的評級機構,辭彙表指的是評級機構給不同類型內容評級使用的特別的一套術語 -- 從性和暴力到葡萄酒酸度.9 Netscape瀏覽器中如何實現XML?Netscape將在Communicator/Navigator 5.0中以一個代號為Aurora的交付部件來支持XML元數據. Aurora利用RDF來獲得Netscape所稱的"桌面信息全面集成." Aurora在網路、桌面和資料庫之間查找和管理信息.它將在桌面上以"窗口"菜單的界面出現,會聚指向當前項目, 研究主題或日常活動等資源的指針.RDF使Aurora的導航條指向不同數據類型(文字處理文檔、表格數據、電子郵件消息、資料庫內容)的本地文件, 也指向Internet 或Intranet 伺服器上的資源(搜索和查詢的結果、書籤鏈接等). Netscape 5.0 版瀏覽器中提供了一個讀取RDF的XML解析器,在產品最終交付前會以beta版出現.除了該RDF的實現, Netscape正計劃將一個通用的XML解析器包含在瀏覽器中, 而其瀏覽器可以和其他的XML應用軟體一起工作, 比如化學標記語言(CML)和數學標記語言(MathML). "我們要使Navigator成為一個XML平台,"Netscape原理工程師R.V. Guha這樣說.Guha 原來開發過MCF (Meta Content format), MCF 後來加入了RDF規範.10 Microsoft瀏覽器中如何實現XML?微軟的 Internet Explorer 4.0 是第一個實現XML的網路瀏覽器. 微軟提供了一對XML處理器:瀏覽器所攜帶的用C++寫的解析器, 和一個Web建造者可以從中下載和加入他們自己的應用程序的Java解析器的源代碼. Java解析器是一個有效的 解析器, 就是說它根據一個DTD或Schema來進行檢查.為了提高性能,瀏覽器所帶的C++版的解析器是一個非有效的解析器.據微軟的產品經理Steve Sklepowich稱, 這兩個解析器都是"通用的", 因為它們不依靠特定的XML應用, 如CDF.由於XML數據和其表現分離, 在一個瀏覽器本身實際顯示XML的能力需要樣式表,例如XSL. 同時, 微軟使用了它所稱的XML數據源對象(XML Data Source Object,XML DSO).它應用了動態HTML的數據捆綁能力, 將一端的XML數據和另一端的HTML數據相鏈接.IE 4.0訪問XML文檔,從中查詢數據, 然後作為HTML顯示出來. 微軟也使用了 XML對象模型來讓開發者與瀏覽器中的XML數據進行交互. 它的實現是通過將HTML作為基於文檔對象模型(DOM)的對象顯現, 儘管HTML 和 DOM 並非直接兼容. DOM 讓腳本和程序訪問結構化的XML數據. Sklepowich說, 雖然目前在微軟, XML的重心在瀏覽器, XML將最終出現在"任何HTML已經出現了的地方".Bill Gates 已經公開宣布微軟Office 未來的版本將支持 XML, 而且公司也計劃支持電子郵件包和製作XML工具的標準.11 OSD和CDF與XML的關係如何?CDF和OSD是微軟支持的兩個XML應用.通過其XML解析器,微軟的 Internet Explorer 4.0讀CDF文件來驅動和控制推頻道所帶來的頁.根據RDF所做的工作, CDF提議又遞交給W3C,以利用RDF的能力來顯示不同數據元素之間的聯繫. Open Software Description 是用於描述軟體部件的辭彙表, 帶有語法如從屬, 版本和平台. OSD 描述如何表現一個部件的特性, 以及如何將該部件安裝到計算機上. 它可以用於下載一個完整的軟體包, 但是它主要設計用於不斷增加的更新. OSD 單獨工作或和CDF一起工作, 來定義應用頻道. OSD建議由微軟和Marimba領導的一組銷售商於1997年8月提供給W3C. 12 電子商務(e-commerce)和XML?CommerceNet是著名的非贏利性網上商務協會,它擁有500多個成員.數年來CommerceNet努力幫助e-commerce 產品和系統一起工作. 其概念是允許信息在不同目錄之間, 從目錄到付款系統, 在付款系統之間交換. 已經發現XML可以在兩個重要方面幫助實現以上概念: 內容定義和信息交換. 內容定義:CommerceNet 正在定義通用於多種商業事務的數據元素. 這個稱作商務核心(Commerce Core)的東西將定義如何給諸如公司名稱、地址、價格、條款和數量等事物作標識. 信息交換:開放,基於文本的XML用於伺服器之間交換事務信息很理想.CommerceNet 提議用基於XML的通用商務語言(Common Business Language,CBL)來描述產品和服務目錄軟體, 關於商業規則和系統的元數據, 以及表格和消息的軟體. 許多CBL 取自已經存在的 Electronic Data Interchange (EDI) 辭典, EDI辭典識別公認的術語, 如發票和採購訂單. 但是CBL超越EDI的商業-到-商業的重點, 包含了零售事務和橫向的供應鏈 -- 從供應商到批發商到零售商. 這樣的一個CBL應用是為使目錄互用的產品信息互換( Product Information Exchange,PIX)規範. CommerceNet設計PIX, 以幫助供應商和他們的分銷商更容易地交換產品數據. 長遠的目標是工業組織--而非 CommerceNet--來將CBL作為特定的DTD的一個共同基礎使用. 一些著重於工業的初步嘗試已經宣布了: Internt開放支付(OBI): 一個在Internet上進行國際性的商業間購物的標準.OBI基於目前的Internet標準, 如SSL(安全性)、SET(信用卡交易)和X.509(數字認證). OBI的支持者有Commerce One、Connect、Intelisys、InterWorld、Microsoft、Netscape、Open Market、和Oracle. 開放貿易協議(OTP): 一個在Web上向消費者售物的一致的, 可共同操作的環境. 規則將包括從如何降價促銷, 付款選擇, 到產品運輸, 接收和問題解決. OTP由MasterCard International, DigiCash, CyberCash, Hewlett-Packard, IBM, AT&T Universal Card, Netscape, Royal Bank of Canada, 和一些 其他金融機構和技術公司支持. Internet內容交換標準(ICE): Vignette, Firefly Network, 和 一些其他公司--包括微軟--正在開發一個叫作ICE的規範, 使能夠在站點之間交換在線資產, 無論那是內容, 應用程序, 或是元數據. ICE將利用現有的標準, 包括 OPS/P3P (使個人數據可靠交換), CDF,OSD和RDF.13 XML中的層疊樣式?因為XML將內容和表現分離, Web建造者需要新的方法來控制設計, 顯示和輸出. style sheet 是問題的答案. 目前, 有三種可用於XML的 樣式表: Cascading style Sheets (CSS) Extensible style Language (XSL) Document style Semantics and Specification Language (DSSSL). 如果5.0版的瀏覽器支持XML, XML對現有的CSS標準的支持將會處理大部分基本的風格和頁面問題. 但是CSS對於專業出版商可能不夠強大. 所以, 另一端存在著DSSSL, 一個在使用SGML的高端出版商中流行的ISO (國際標準組織)標準. 然而, DSSSL是複雜的, 它處理的列印文檔管理在Web上很少有用. 現在剩下了XSL,特別為XML而寫的樣式表.XSL目前上交給了W3C作為一個建議標準,其中的XSL轉換部分(XSLT)已經於1999年11月成為正式的規範. 它給了Web開發者和用戶較HTML更多的表現靈活性. 例如, HTML的<H2>標識符在所有瀏覽器上的表現是基本一樣的, 但是XSL讓開發者指定他們的頁面元素如何表現(儘管用戶可以在個人設置中重載它). XSL較CSS更強大, 因為它使Web建造者創建可以動態改變其表現的文檔. 例如, 你可以包含這樣的程序語句, "如果一個XML元素的屬性為數值10, 顯示為綠色, 否則為黑色." 或者你可以將"僅供內部使用"作為屬性給一個段落標上, 這樣它在某些情況下不會出現. XSL被設計用於腳本語言如javascript.14 XML如何改進超鏈接?XML超鏈接比基本的HTML風格的超鏈接多了一些新的特性, 包括無需手寫許多javascript代碼就能創建"聰明的"鏈接. 而且在XML, 鏈接本身成為了對象, 可以象其他對象一樣被管理.原來的鏈接規範--XLL, 或XML鏈接語言--正被分為兩個不同的規範: XPointer 和 XLink. XPointer: 在HTML, 要鏈接到一個頁面的中間, 頁面作者必須在那兒加上定位標識符. 使用XPointer, 你可以"取址到" (不是"連接到")其他人的文本的任何部分. 顯而易見, 這樣將有助於工作於法律文件, 科學和學術論文, 甚至W3C規範! XLink: 當用戶點擊一個HTML超鏈接時, 當前的網頁被連接到的文件替代. XLink令Web建立者給鏈接增加行為. 例如, 現在, 你必須用一些javascript, 使在鏈接處彈出一個獨立的窗口, 但是XLink讓Web建立者對鏈接進行編碼來執行一系列動作, 包括彈出一個鏈接選擇的菜單. 另一個應用可以是彈出一個對話框, 可能是一個提醒用戶它們正要更新資料庫的警告. 鏈接彈出菜單可能需要用戶點擊一個框來表示在進一步處理前他們接受義務. 現在, 實現這樣的功能要寫許多的腳本代碼. XML也讓Web建立者創建類似Web環工作的Extended Link, Web環是通過"下一個/前一個"行進來導航的自己選擇出來的關於相同主題的網站組. 對於彈出菜單太長的相關鏈接站點表, Web建立者可以創建一個鏈接表, 這個表在不同的站點, 頁面時會有變化. 用戶可以點擊一個圖標來自動轉移到環中的下一個成員. 現在這樣的功能需要 CGI scripts, 而Extended Links 提供了一個標準的, 非私有的建立資源間聯繫的方法. 仍然有更多的問題需要解決, 特別是在行為政策方面. 必須由一種方法來協調以下三方面的關係: 文檔作者對鏈接所建議的行為, 用戶所喜好的顯示鏈接信息的方式, 以及是否和何時忽視用戶的意願的政策.15 伺服器上支持XML嗎?XML被設計成供長久使用的, 高價值的文檔的儲存格式. XML不是只讓你定義標識符, 它也允許你定義文檔的儲存結構. 一篇HTML文檔僅存在於一個文件中, 而一個XML文檔可以由存放在不同地點的多個文件(稱為實體)組成. 這提出了作為文檔存儲庫的XML伺服器的概念. 伺服器軟體供應商已正在支持XML: Enigma, Insight 4.0這是一個提供給出版商處理大型文檔的專業電子出版軟體解決方案. 目前和Insight捆綁在一起的Enigma SGML/XML style Sheet Editor, 也可以作為一個獨立產品提供. Hynet Technologies, Digital Library SystemDigital Library System (DLS) 將文檔和文檔部件作為標準軟體對象進行管理, 允許引入在Adobe FrameMaker和Microsoft Word中創建的文檔, 或者SGML/XML文件. Inso, DynaText Professional Publishing System這是一個進行索引, 搜索和製作腳本的軟體, 它可以工作於運行在Windows NT 3.51 或 4.0, 或 Sun Solaris 2.5上的Microsoft的 IIS和 Netscape的 Enterprise and FastTrack servers. Open Market, FolioOpen Market的 Folio 4 信息管理和發送產品將XML文檔引入帶索引的資料庫, 以在IP網路上傳遞內容, 或將內容送至CD-ROM. 在一月份, Open Market宣布增強對XML的支持, 允許文檔以它們的本身格式進行索引和保證安全. 同時, Folio產品也將可以和其它基於標準的製作, 解析和生成XML文檔的解決方案相互操作. 它的產品包括 Folio siteDirector (分發信息), Folio SecurePublish (事務管理軟體), 和 Folio Publisher (電子出版).WebMethods, Web Automation ServerWeb Automation Server 幫助公司將基於瀏覽器的應用軟體和其它應用軟體的數據相結合. 它是基於XML的伺服器, 使用 WebMethods自己的在機器間進行Web數據交換的WIDL (Web Interface Definition Language). (該公司已經將WIDL作為標準提議上交給 World Wide Web Consortium.)16 誰應該學習XML?所有的Web建立者需要足夠了解XML,以決定是否使用它.E-commerce站點和管理資料庫中大量文檔的站點是顯然的首選對象.經理可能不需要學習XML語法或如何建立DTD,他們仍要理解XML的潛力並加以利用.如果最終的目的只是讓人來讀信息, HTML能足夠滿足標識信息的要求. 但是如果你想要為自動處理數據作準備, 你必須考慮將XML納入你的出版系統. 並非每一個工作在Web站點的HTML製作者必須成為XML製作者, 但是某些員工應該精通於XML--特別當站點的工作對象是值得為將來使用而管理的數據和文檔時.當然,XML的功能也意味著複雜性--一些Web建立者已經發現他們可以在幾天內掌握HTML的基礎, 而他們可能需要花幾個星期來適應XML.只有你自己才能決定是否值得花這些時間. 17 有哪些編寫XML的工具可供我使用?幸運的是, Web建立者不用完全靠他們自己從頭開始創建XML了. 市場上已經有了創建, 管理和發送XML的工具, 並且一些公司也在進行開發. Adobe: 在1998年中期, Adobe將介紹可以輸出到XML的 FrameMaker 和 FrameMaker+SGML 的過渡版本. 這些產品的完整版本將能夠輸入XML. Adobe有 一名代表在 W3C的XML工作組, Adobe也參與了XLink, Cascading style Sheets和 RDF的工作, 所以我們可以期待這些技術將在Adobe未來的產品中出現. Allaire: HomeSite 4.0 和 Cold Fusion 4.0 都預計在今年夏天出品, 它們將支持XML, 包括style sheets. HomeSite 3.0中已經提供了一個CDF附加軟體. ArborText: 在SGML領域內長期工作的ArborText, 於一月份發布了XML styler, 一個免費的基於Java的XSL編輯器. 它的圖形用戶界面可以讓我們勿需知道XML語法就能進行編輯. 將來, ArborText 會把XML styler集成到Adept中, Adept是公司給列印出版提供的XML製作工具. DataChannel: 一個免費的, 基於Java的有效的解析器, 稱為 DXP (DataChannel XML Parser; 基於 Norbert Mikula 著名的NXP). 可以從該公司的Web站點獲得. 它新發布的是免費的XML工具包, XML 開發環境, 它包括了一套部件, 幫助人們開始學習和應用XML. Inso: 該公司提供它稱為的"首個集成的, 端對端的, 創建, 轉換, 存儲, 管理, 索引, 查詢XML內容, 將其發布到Web, CD-ROM和印表機上的出版解決方案." 其產品包括 DynaTag 4.0, DynaBase 3.0, DynaText 3.1, 和所附的工具 DynaWeb. IntraNet Solutions: Intra.doc Management System的下一版本, IntraNet Solution的基於Web的文檔管理系統, 將會管理XML部件和文檔之間的關係, 提供和第三方XML製作工具的集成鏈接管理, 完善在瀏覽器中XML對象的使用, 並在Intra.doc存儲庫和XML編輯器之間提供一個交互的元數據模型. Microsoft: 微軟希望在年底交付Office 9.0, 據報道, 它將有對XML的支持. Microstar: ActiveSG/XML 是一套在Internet上設計和配置基於事務的XML/SGML系統的工具和技術. Microstar也提供了免費的&AElig;lfred XML 解析器. SoftQuad: HTML 編輯器 HotMetal Pro 將很快提供 Live Data Base Pages, 一個讓開發者將HTML數據拉入資料庫並以XML來返回的附加軟體. Vignette: StoryServer 3.2 在Web上交付能使用XML的應用和內容. 它結合了關係型資料庫, 多媒體和XML內容創建的工具. StoryServer 是一個Web內容應用平台, 供建立, 管理, 和交付基於服務的Web應用之用, 比如在線出版, 知識管理, 和電子商務系統. (注: CNET對Vignette有財政上的興趣.) XPublish: XPublish是一個XML出版系統, 供Web站點開發和管理, 允許開發者以XML進行製作, 或用XML構件延展目前的HTML文檔, 然後將站點以HTML來發布, 以讓任何的標準Web瀏覽器可以訪問. 它包含了一個Cascading style Sheets編輯器. WebMethods: 該公司製作基於XML的Web Automation 軟體, 提供商業應用軟體和Web數據的快速集成和直接訪問. 它的 Web Interface Definition Language (WIDL) 將和HTML/XML和表格的所有交互自動化, 提供在標準Web協議上表現要求-回答交互方式的一個通用方法. 當然, 如果XML在Web上無處不在, 你可以看到幾乎每一種基於Web的應用, 特別是HTML編輯器, 資料庫軟體, 和電子商務軟體, 會迅速加入對XML的各個級別的支持.18 XML的國際化?XML將使Web建立者創建真正的國際性站點變得比以前都容易. 因為, 比如 Java, 它由Unicode (ISO 10646)定義, Unicode是一個國際接受的標準, 用於描述世界上所有的字母, 字型, 字元和表意符, 它包括 ASCII ISO 拉丁字元, 日本, 韓國, 中國, 印度, 希臘, 阿拉伯和其它字元. 它甚至允許字符集的混合, 例如, 一篇以日文顯示的XML文檔可以通過一個母音變音參照到一個德文辭彙. 開發者不需要學習任何腳本語言, 以使Unicode在XML文檔中生效, 文檔在用戶的瀏覽器中用合適的字符集顯示出來.19 XML的未來在哪裡?就圍繞著XML的所有活動, 很難預測六個月後它會是什麼樣. XML和XLL 規範的合作者Tim Bray說, "我們已經製作了一個設計用於通用目的的工具, 大範圍的人們對它的關注和應用證明我們是成功的." 在短期內, XML將可能出現在元數據應用上,如RDF.下一個大的影響將隨著文檔對象模型規範的批准而到來.Bray聲稱"XML和DOM的結合確實是給Web帶來活力的神奇子彈." XML也應該會幫助電子商務.XML將使電子商務供應商以共同的方法給產品和其相關信息(價格,尺寸,顏色,特性)進行標識, 使用戶在Web上對不同的商店進行比較. 同時, Netscape和Microsoft會繼續擴大對XML瀏覽器的支持, 包括有效的和構造良好的XML文檔, 更多的XML應用, 為XML設計的style-sheet支持, 和XML超連接協議. 請關注這兩個公司以及其它軟體供應商在XML製作和出版工具上的進展.20 哪裡能學到更多的XML知識?XML是一個複雜的事物, 對於所有Web建立者都具有深刻的含意. 如果你想學習更多的東西, 這裡是一些可以查看的好地址: 萬維網聯盟(W3C): XML規範. 關於XML規範的討論. Extensible style Language (XSL) W3C注釋. Document Object Model 規範. 參與W3C規範開發的XML開發者的郵件地址清單. XML常見問題解答: ArborText的 XML鏈接和資源. 微軟的XML 站點提供了XML如何在一個天氣預報和拍賣中工作的演示. Textuality收集了XML規範合作者Tim Bray的關於XML的FAQ和到其它資源的一些鏈接. 由愛爾蘭Cork University College的Peter Flynn代表W3C的XML特別興趣組維護的XML FAQ.XML信息頁面, 達拉斯Summer Institute of Linguistics 的Robin Cover創建的SGML/XML Web頁面的一部分. 組織、持續教育: 中國XML聯盟圖形通信協會的XML文件 SGML Open 是一個國際性的非盈利性協會, 它提倡基於SGML家族標準的結構化文檔和數據交換. 它的InterX.org旨在成為"XML開發者和用戶的論壇和資源中心". huihoo.com Copyright (2001,2002,2003,2004) Allright Reseved看完了基礎知識,下面就實踐以下吧本實例應用了MS的MSXML2_TLB,請自行查找下載//用於讀寫XML的最簡單的單元unit XMLPurserUnit;interfaceuses SysUtils, Classes, Windows, ActiveX, MSXML2_TLB;type //本例子通過DOM方式演示XML文件的讀寫過程 TDOMXMLpurser=class public { 創建並保存XML文檔,XMLDoc:=CoDOMDocument.Create沒有辦法將文檔類型對象填加 到XMLDoc中,因為它沒有引用相應的DTD} procedure SavePropertiesToXML(Filename: string; Props: TStrings); { 解析已有的XML文檔 } //適用於節點名稱不同的情況 procedure LoadPropertiesFromXML(Filename: string; Props: TStrings); //適用於節點相同的情況 procedure LoadFromXML(Filename: string; Props: TStrings); end;implementationconst XMLTag = "xml"; XMLPrologAttrs = "version="1.0" encoding="UTF-8""; XMLComment = " Sample XML document with data about movies"#13 + "and when and where they are showing"#13 + "Developed by Keith Wood, 28 May 1999 "; MovieWatcherTag = "movie-watcher"; MoviesTag = "movies"; MovieTag = "movie"; Id = "id"; Rating = "rating"; StarringTag = "starring"; TitleTag = "title";//保存XMLprocedure TDOMXMLpurser.SavePropertiesToXML(Filename: string; Props: TStrings);var XMLDoc: IXMLDOMDocument; i:integer; //---------------------------------------------------------------------------- procedure AddSimpleElement(Parent: IXMLDOMElement; Field: string; AsCDATA: Boolean = False); var Internal: IXMLDOMElement; begin Internal := IXMLDOMElement(Parent.AppendChild( XMLDoc.CreateElement(("Field.FieldName")))); if AsCDATA then Internal.AppendChild(XMLDoc.CreateCDATASection(Field)) else Internal.AppendChild(XMLDoc.CreateTextNode(Field)); end; procedure GenerateHeaders; var Title: IXMLDOMElement; begin XMLDoc.AppendChild(XMLDoc.CreateProcessingInstruction(XMLTag, XMLPrologAttrs)); XMLDoc.AppendChild(XMLDoc.CreateComment(XMLComment)); XMLDoc.AppendChild(XMLDoc.CreateElement(MovieWatcherTag)); Title := IXMLDOMElement(XMLDoc.DocumentElement.AppendChild( XMLDoc.CreateElement(TitleTag))); Title.AppendChild(XMLDoc.CreateTextNode("焦點新聞")); end; procedure GenerateStars(Starring: IXMLDOMElement); begin AddSimpleElement(Starring, "(StarField)"); end; procedure GenerateMovies(moviename:string); var Movies, Movie: IXMLDOMElement; begin Movies := IXMLDOMElement(XMLDoc.DocumentElement.AppendChild( XMLDoc.CreateElement(MoviesTag))); Movie := IXMLDOMElement(Movies.AppendChild( XMLDoc.CreateElement(MovieTag))); Movie.SetAttribute(Id, "123"); Movie.SetAttribute(Rating, "456"); AddSimpleElement(Movie, "789"); AddSimpleElement(Movie, moviename); AddSimpleElement(Movie, ""(DirectorField)""); GenerateStars(IXMLDOMElement(Movie.AppendChild( XMLDoc.CreateElement(StarringTag)))); AddSimpleElement(Movie, "FieldByName(SynopsisField)", True); end; //----------------------------------------------------------------------------begin try XMLDoc := CoDOMDocument.Create; GenerateHeaders; i:=0; repeat GenerateMovies(Props.Strings[i]); inc(i); until i>=Props.Count; Props.Text := XMLDoc.XML; XMLDoc.save(Filename); //u8-dos格式 //Props.SaveToFile(Filename); //dos格式 finally { Release the DOM } XMLDoc := nil; end;end;//載入無重複屬性的XMLprocedure TDOMXMLpurser.LoadPropertiesFromXML(Filename: string; Props: TStrings);var XMLDoc: IXMLDOMDocument; i: Integer; procedure LoadSubProperties(Element: IXMLDOMNode; PropPrefix: string); var Index: Integer; begin if (Element.NodeType = NODE_TEXT) or (Element.NodeType = NODE_CDATA_SECTION) then Props.Values[Copy(PropPrefix, 2, Length(PropPrefix) - 1)] := Element.NodeValue else for Index := 0 to Element.ChildNodes.Length - 1 do LoadSubProperties(Element.ChildNodes[Index], PropPrefix + "." + Element.NodeName); end;begin XMLDoc := CoDOMDocument.Create; Props.Clear; try if XMLDoc.Load(Filename) then with XMLDoc.DocumentElement do for i := 0 to ChildNodes.Length - 1 do LoadSubProperties(ChildNodes[i], ""); finally XMLDoc := nil; end;end;//載入XMLprocedure TDOMXMLpurser.LoadFromXML(Filename: string; Props: TStrings);var XMLDoc: IXMLDOMDocument; i: Integer; procedure LoadSubProperties(Element: IXMLDOMNode; PropPrefix: string); var Index: Integer; begin if (Element.NodeType = NODE_TEXT) or (Element.NodeType = NODE_CDATA_SECTION) then Props.Add(Copy(PropPrefix, 2, Length(PropPrefix) - 1)+"="+ Element.NodeValue) else for Index := 0 to Element.ChildNodes.Length - 1 do LoadSubProperties(Element.ChildNodes[Index], PropPrefix + "." + Element.NodeName); end;begin XMLDoc := CoDOMDocument.Create; Props.Clear; try if XMLDoc.Load(Filename) then with XMLDoc.DocumentElement do for i := 0 to ChildNodes.Length - 1 do LoadSubProperties(ChildNodes[i], ""); finally XMLDoc := nil; end;end;initialization { Initialise COM } CoInitialize(nil);finalization { Tidy up } CoUninitialize();end.//調用XML讀寫unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, SHDocVw,XMLPurserUnit;type TForm1 = class(TForm) WebBrowser1: TWebBrowser; Memo1: TMemo; Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } FXMLpurser:TDOMXMLpurser; public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);begin FXMLpurser:=TDOMXMLpurser.Create;end;procedure TForm1.FormDestroy(Sender: TObject);begin FXMLpurser.Free;end;procedure TForm1.Button1Click(Sender: TObject);var filename:string;begin memo1.Lines.Clear; filename:=ExtractFilePath(application.ExeName)+"MailTemplate.xml"; FXMLpurser.LoadPropertiesFromXML(filename,memo1.Lines);end;procedure TForm1.Button2Click(Sender: TObject);var filename:string;begin memo1.Lines.Clear; filename:=ExtractFilePath(application.ExeName)+"MailTemplate.xml"; FXMLpurser.LoadFromXML(filename,memo1.Lines);end;procedure TForm1.Button3Click(Sender: TObject);begin FXMLpurser.SavePropertiesToXML(ExtractFilePath(application.ExeName)+"MailTemplate1.xml",memo1.Lines);end;end.//unit1對應的formobject Form1: TForm1 Left = 192 Top = 107 Width = 696 Height = 480 Caption = "Form1" Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = "MS Sans Serif" Font.Style = [] OldCreateOrder = False OnCreate = FormCreate OnDestroy = FormDestroy PixelsPerInch = 96 TextHeight = 13 object WebBrowser1: TWebBrowser Left = 8 Top = 8 Width = 321 Height = 361 TabOrder = 0 ControlData = { 4C0000002D2100004F2500000000000000000000000000000000000000000000 000000004C000000000000000000000001000000E0D057007335CF11AE690800 2B2E126208000000000000004C0000000114020000000000C000000000000046 8000000000000000000000000000000000000000000000000000000000000000 00000000000000000100000000000000000000000000000000000000} end object Memo1: TMemo Left = 336 Top = 8 Width = 345 Height = 361 Lines.Strings = ( "星球大戰1" "星球大戰2" "星球大戰3" "星球大戰前傳1" "星球大戰前傳2" "星球大戰前傳3") ScrollBars = ssBoth TabOrder = 1 end object Button1: TButton Left = 192 Top = 384 Width = 147 Height = 25 Caption = "LoadPropertiesFromXML" TabOrder = 2 OnClick = Button1Click end object Button2: TButton Left = 344 Top = 384 Width = 83 Height = 25 Caption = "LoadFromXML" TabOrder = 3 OnClick = Button2Click end object Button3: TButton Left = 432 Top = 384 Width = 121 Height = 25 Caption = "SavePropertiesToXML" TabOrder = 4 OnClick = Button3Click endend//一個最簡單的XML文件 MailTemplate.xml<?xml version="1.0"?><mailTemplate> <smtp> <host>mail.ncisystems.com</host> <port/> <user>keith</user> <from>kbwood@thingies.com</from> </smtp> <database> <alias>mailtemp</alias> <user/> <password/> </database> <settings> <pauseTime>2000</pauseTime> <template>MailMessage.xml</template> <testing>Y</testing> </settings></mailTemplate>


推薦閱讀:

誰在為英國投票?丨單讀
深愛的事物無法久存 | 單讀
我們憑什麼羞恥?丨單讀
單讀
先鋒與褻瀆 | 單讀

TAG:學習 | 筆記 | 簡單 | 單讀 |