Vincent.Chan‘s Blog

          常用鏈接

          統計

          積分與排名

          網站

          最新評論

          XML問題解答

          級別: 初級

          郭 路, Technical Manager

          2001 年 7 月 01 日

          自我們推出“XML在傳統制造業供應鏈中的應用分析”專欄以來,受到了廣大讀者的歡迎。專欄作家郭路收到了大量讀者的來信,提出了很多問題。現將讀者提出的問題一一做了解答并總結整理出來,以期幫助廣大讀者更好的了解XML。

          1、問:我用記事本建立的XML文件,使用中文的元素標記名,在IE中可以正常顯示,但是在XML Notepad中報告卻出錯,請問XML元素名能否使用中文字符?

          答:可 以,XML元素名可以由字母、除英文外的別國文字、下劃線、冒號、數字、連字符、句號,其中數字、連字符、句號不能為首字符,當然,如果你使用中文元素 名,應該在句首指定 或 。至于XML Notepad不能識別中文元素名,應該說這是其軟件自身的不足,目前對于各種XML解析工具或XML文本工具,均要求其支持UTF-8和UTF-16編 碼,這是最基本的,但并不是所有工具都支持非Unicode編碼,這就好像并不是所有瀏覽器都支持JavaScript一樣,盡管HTML標準本身支持腳 本嵌入。需要說明的是,當我們把XML作為一種交換數據的詞匯標準時,一般都是希望定義的元素標記具有典型性與廣泛性,可以被互聯網上的其它應用輕松識 別,從這個角度說,我們鼓勵大家在建立專用的XML詞匯表時,盡量采用約定俗成的,專業化、標準化、國際化的英文命名。





          回頁首


          2、問:URI和URL有什么不同?

          答:URI 是統一資源標識符(Uniform Resource Identifier)的縮寫,URL是統一資源定位符(Uniform Resoure Locator)的縮寫,另外還有URN也經常使用,它是統一資源名稱(Uniform Resource Name)的縮寫。URL是通過"通訊協議+網絡地址"字符串來唯一標識信息位置及資源訪問途徑的一種方法;URN則主要用于唯一標識全球范圍內由專門機 構負責的穩定的信息資源,URN通常給出資源名稱而不提供資源位置;URI是一種用字符串唯一標識信息資源的工業標準(RFC2396),它使用的范圍及 方式都較為廣泛,在XML中用URI引用來標識元素的命名空間(Namespace),URI包括了URL和URN,是二者的超集。





          回頁首


          3、問:我想在VC、VB中使用SAX可以嗎?

          答:可 以,在微軟最新發布的MSXML3以及MSXML4 Preview中,已經包含了對SAX2的支持,MSXML開發包是一個COM組件,其V3.0的文件名為MSXML3.dll,V4.0的文件名為 MSXML4.dll,用戶可以到XML技術網中下載它們的安裝文件,其網址為http: //www.chinaasp.com/xml/download/。以下是MSXML3中新增的支持SAX2的COM接口列表:
          IMXAttributes : IDispatch
          IMXReaderControl : IDispatch
          IMXWriter : IDispatch
          IVBSAXAttributes : IDispatch
          IVBSAXContentHandler : IDispatch
          IVBSAXDeclHandler : IDispatch
          IVBSAXDTDHandler : IDispatch
          IVBSAXEntityResolver : IDispatch
          IVBSAXErrorHandler : IDispatch
          IVBSAXLexicalHandler : IDispatch
          IVBSAXLocator : IDispatch
          IVBSAXXMLFilter : IDispatch
          IVBSAXXMLReader : IDispatch
          有關MSXML3中關于SAX2的詳細描述請訪問MSDN的在線幫助 http://msdn.microsoft.com/library/en-us/xmlsdk30/htm/sax2_developersguide_overview.asp.





          回頁首


          4、問:我想通過SAX訪問一個動態的XML數據流可以嗎?

          答:可以,SAX允許所訪問的XML數據為字符流形式,在SAX中用InputSource類表示可能的數據源,以SAX for Java為例,其連接語句如下所示:
          InputSource source = new InputSource(xmlstring); SaxParser.parse(source);





          回頁首


          5、問:我想在瀏覽器中格式化顯示XML,該如何實現?

          答:目前支持XML的瀏覽器只有IE,要在瀏覽器中格式化顯示XML數據,需要指定樣式表,可以使用CSS或XSLT來實現,以下是在XML文件中引用CSS和XSLT樣式表的范句:

          												<?xml:stylesheet href="example.css" type="text/css"?>
          <?xml:stylesheet href="example.xsl" type="text/xsl"?>





          回頁首


          6、問:我知道在微軟新的ADO 2.5版中提供了對XML的支持,能具體解釋一下嗎?

          答:是的,在ADO 2.5中可將一個數據庫記錄集保持為XML文檔格式。同樣,它可以將一個XML文檔當作一個記錄集打開,這就提供了一種在數據庫與XML間數據轉換的方法,以VB為例,可以用如下語句將一個記錄集保存到XML文件:

          												Set connect = New ADODB.Connection
          connect.ConnectionString = "DSN=NorthWind;"
          connect.Open
          Set _recordset = connect.Execute("Select * FROM AGE")
          _recordset.save"MateRecords.xml", adPersistXML





          回頁首


          7、問:聽說在SQL Server 2000中可以通過瀏覽器訪問數據庫并返回XML記錄集,我已經裝了SQL Server 2000,請問要怎樣可以從瀏覽器訪問數據庫?

          答:為 了通過瀏覽器訪問SQL Server 2000數據庫,你還需要安裝IIS 5(如果直接使用Query Analyzer來獲取記錄集就不需要IIS),然后使用SQL Server 2000自帶的SQL XML Support in IIS工具建立一個虛擬目錄與實際的數據庫對應,該虛擬目錄是通過URL訪問SQL Server數據庫的入口,一個典型的HTTP訪問語句如下所述:
          http: // localhost / Northwind ? sql = select +name+ from + employees + for + xml + auto 其中,localhost表示本機,Northwind表示在SQL XML Support in IIS中建立的虛擬目錄名,"?"后面跟SQL查詢語句,for xml auto子句指定了將SELECT語句映射到XML中的具體方式。即將結果集作單個表模型化,所查詢的字段可作為屬性或子元素返回,并且XML結果集的線 性層次關系應與數據庫表在select排列中的順序相一致。





          回頁首


          8、問:請問WAP是XML的一種特定格式嗎?

          答:不 是,WAP是無線應用協議(Wireless Application Protocol)的縮寫,WAP中用到了XML技術,但WAP本身不是XML的一種實現方式。WAP是由一種用于將手機、PDA等掌上設備連接到互聯網 的技術標準,它由一系列的協議規范組成,包括傳輸代理、網絡安全、數據壓縮、事務處理、信息顯示等方面的約定。WAP技術由WAP Forum制定并發布,該論壇的會員包括愛立信、摩托羅拉、諾基亞、Phone.com、阿爾卡特、微軟、IBM、Oracle、松下、西門子、三星、朗 訊等IT業界的重量級公司,在WAP規范中采用了目前互聯網的多種技術,如IP、UDP、HTTP、XML等。與通常的萬維網采用HTML語言顯示信息不 同,在WAP中采用了WML作為客戶端交互顯示的語言,WML是無線標記語言(Wireless Markup Language)的縮寫,WML標記語言完全符合XML規范,我們可以將它視作為無線應用專門定制的一個XHTML子集,之所以要制定WML而不直接使 用HTML或XHTML,主要原因在于無線應用具有帶寬窄,客戶端屏幕較小、分辨率低,不需要很復雜的顯示功能的特點,而經過裁剪優化過的WML更符合其 需求。





          回頁首


          9、問:請問目前中國有自己的XML組織嗎?

          答:有,其中中國XML聯盟應該是國內最早的XML研究組織,其網站為 http://www.xml.org.cn,成員以上海交大電子工程系的學生為主,而由中國科學院電子商務研究中心成立的cnXML聯盟則是我國XML規范制定的官方機構,其網站為 http://www.cnxml.org.cn,現在國內的企業可以在cnXML上登記和發布自己的XML詞匯表。另外cnXML聯盟正在研究制定cnXML規范,這是一個符合中國特色的電子商務語言規范,目前cnXML草案的最新版本是v0.83。





          回頁首


          10、問:WIDL也可以實現分布式系統的組件調用,它與XMLRPC、SOAP有什么不同?

          答:WIDL 是Web接口定義語言(Web Interface Definition Language)的縮寫,是用XML表示IDL的一種規范,WIDL由WebMethods公司研究制定并已提交W3C。我們知道IDL(包括OMG IDL和MS IDL)是一種用于編寫接口規范的語言,而WIDL的目的就是定義一種用于Web的接口規范,使不同應用可以通過Web站點實現交互和相互調用。在 WIDL3.0中,WIDL由IDL組件(定義接口信息)與文檔映射組件組成(定義應用接口與XML調用消息之間的映射)組成,與XML-RPC、 SOAP不同的是,WIDL指定的是應用程序所需交換的信息,而不管消息調用的網絡通信實現。





          回頁首


          11、問:請問cXML與cnXML有什么關系?

          答:雖 然只有一字之差,但二者沒有直接關系,cXML即CommerceXML,它是由Ariba公司制定的一種基于XML規范,面向B2B模式電子商務交易的 行業標準。它在眾多的電子商務交易中抽象出一種以訂單為中心、并緊密圍繞供貨方和采購方的交易模型,另外還定義了一種信息交換的機制,進而完成訂單的采 購、處理與交運等一系列過程。而cnXML則是由中科院cnXML聯盟制定的中國電子商務語言規范,其商務流程定義參照國際標準的OBI購買模型。巧合的 是,cXML與cnXML都是有關電子商務交易語言的規范。





          回頁首


          12、問:我想在工作流中使用XML來傳遞數據,我們的開發工具采用IBM的WebSphere,請問我應該用DTD還是Schema來制定數據規范?

          答:DTD 是傳統的XML約束規則,與XML Schema相比其局限性是顯見的。如DTD本身采用與XML完全不同的語法;DTD對數據類型的支持極弱;DTD不支持命名空間等等。而W3C已于 2001/5/2日發布了XML Schema的1.0標準,因此在今后實際開發XML中顯然是要優先考慮使用Schema。然而由于XML Schema的正式版本剛剛發布,因此能真正支持它的工具幾乎沒有(目前絕大多數支持Schema校驗的工具遵循的是MS Schema版本,這與XML Schema V1.0是有區別的),而DTD由于發布時間早,有許多XML工具都支持它,因此對于特定的應用而言,能否使用XML Schema還要看環境的限制。總的來說,XML Schema是今后發展的方向,但DTD目前還是主流,另外由于DTD具有龐大的應用群,雖然XML Schema已成為工業標準,但DTD也不會就此被完全淘汰,所以現在選擇DTD的,也不需有什么后顧之憂。還有第三種選擇是使用MS Schema,在IE5、MSXML、BizTalk Server 2000中提供對這種規范的支持,正如我們剛才所說的,MS Schema不是正統的Schema,盡管目前有支持它的工具,仍應謹慎使用,今后Schema校驗工具的發展肯定是要往W3C的XML Schema上靠的(包括IE)。就我個人意見,對于相對封閉的企業內部系統而言,由于系統本身具有較高的! 穩定性與獨立性,數據的出口與入口都是已知的,可以考慮使用MS Schema;但如果受約束的XML數據具有很強的開放性,如面向互聯網應用,要考慮到對XML數據的約束規則今后可以被外部應用所兼容,就應該盡量避免 使用MS Schema。





          回頁首


          13、問:我的課題題目是有關 xml在edi 中的應用。由于是剛剛接觸到 xml 這方面的內容,不知道應該從哪里開始,能介紹一些有關的知識嗎?

          答:EDI 其實是一種傳統的電子數據交換標準,用于在不同的大型系統之間的數據交換,它有一套非常嚴謹的規則,包括報文規則,安全規則,傳輸規則等,EDI的成本很 高,目前在國內海關、銀行用的較多,XML的崛起對EDI沖擊很大,因為XML是完全免費的,而且容易實現,當然它還很不成熟,尤其是關于安全與數據的可 靠傳輸方面,它不像EDI是使用增值網的。XML要完全取代EDI是不太現實的,盡管EDI的商業規則已落伍,然而至少在20年內,我想它還會有很大的生 命力。因此最有可能的就是對現有的EDI實現進行改進,包括使用Web、XML等手段。目前在華盛頓地區的XML/EDI小組正在努力做這方面的事,他們 在研究一套適用于EDI的XML語法規則,可以通過 http://www.xmledi.com了解他們的最新成果,也可以訪問 http://www.cenorm.be/isss/workshop/ec/xmledi/isss-xml.html,這是ISSS下的一個ProjectGroup,也是研究這方面技術的。





          回頁首


          14、問:XML-Data與Schema有什么區別?

          答:在XML 中XML-Data與Schema的區別是細微的。通常我們將對數據的某種約束規則統一稱之為Schema即模式,這種稱法在數據庫中廣泛使用并被XML 所沿襲。從這一角度而言,DTD、XML-Data都可算是用于XML的某種Schema,凡是符合Schema約束的XML文檔我們便稱之為有效的 XML,為了區別起見,我們可以將XML-Data稱之為XML-Data Schema。XML-Data Schema最早由微軟提出,并于1998年1月被W3C接受成為“建議”(Note),隨后,在1999年W3C在XML-Data的基礎上發布了 “XML Schema工作草案”,這也就是我們通常所說的XML Schema,XML Schema于2001.5.2日正式發布為W3C標準。作為XML-Data的創建者,微軟公司在XML Schema V1.0尚未正式出爐前就已經在他的MSXML解析器、IE瀏覽器、Biztalk Server 2000中提供了對XML-Data的廣泛支持(事實上它們支持的是XML-Data的一個子集),鑒于它與XML Schema的血緣關系,我們通常也稱其為Schema,即MS Schema。基于XML-Data及其擴展的Schema有一共同特點,即Schema自身也都是標準的XML文檔,這與傳統的DTD規范是截然不同 的,這也是我們通常將XML約束簡單劃分為DTD與Schema的主要依據。需要指出的是,在IE、MSXML等工具中所支持的MS Schema與目前W3C正式發! 布的XML Schema并不完全兼容(也就是說,在Biztalk Server 2000中建立的xsd文件未必會符合標準的XML Schema規范)。





          回頁首


          15、問:請問如何在XML中實現對二進制數據(如圖象、聲音文件)的封裝?

          答:通常有兩種方法可以實現,第一種采用(外部的)未解析通用實體,如

          												<!NOTATION bmp SYSTEM "bmp">
          <!ENTITY image1 SYSTEM "example.tif" NDATA bmp>

          第二種是將二進制數據文件進行Base64編碼并直接嵌入XML元素中(也可以是其它的編碼方式,但是要注意被編碼的數據中不應包含符號">")。





          回頁首


          16、問:請問使用SOAP的安全性怎樣?

          答:SOAP 本身不提供安全特性,由于SOAP采用HTTP作為實際的數據傳輸協議,因此其安全性也沿襲了HTTP。通常我們可以使用標準的網絡安全協議來實現基于 SOAP的數據傳輸安全,如SSL、S-HTTP、PCT、TLSP等。在某些情況下也可采用數據加密的方式,即在應用層先對輸入參數和返回結果集進行加 密,然后再使用SOAP傳遞已加密的XML數據。





          回頁首


          17、問:在SOAP中一般請求/響應的內容與格式如何去定義?還有如何實現客戶端從服務器上獲取響應的數據。也就是說用戶從客戶端想服務器端發送請求信息,結果用戶是如何得到相應信息的?

          答:SOAP是使用HTTP協議的,其響應報頭為"HTTP/1.1 200 OK",內容類型為" text/xml",你可以直接監聽80端口,如果你是在VS環境中使用Microsoft SOAP toolkit的,可以到 http://msdn.microsoft.com/xml/general/toolkit_intro.asp中下載工具包,只需通過API傳入調用方法和參數值,其底層的調用是屏蔽的。有關SOAP中一般請求/響應的內容與格式定義的詳細信息可參看 《XML 在傳統制造業供應鏈中的應用分析(四):選擇XML信息流傳遞的協議 第一部分》一文,也可訪問 http://www.w3.org/TR/2000/NOTE-SOAP-20000508/查看有關SOAP的最新提案。





          回頁首


          18、問:DOM2與DOM1相比有什么不同?

          答:DOM Level 2較DOM Level 1增加如下功能接口:

          1. 視圖(View):提供視圖與文檔的聯系
          2. 樣式表(Style Sheet):提供訪問和修改樣式表的方法
          3. 層疊樣式表(CSS2):提供CSS2兼容的方法
          4. 事件(Events):提供各種事件的接口
          5. 文檔遍歷(Document traversal):提供遍歷文檔層次的接口
          6. 文檔范圍(Document range):提供分割文檔范圍的接口




          回頁首


          19、問:請問在HTML頁面中該怎么使用DSO?

          答:XML DSO是數據源對象(Data Source Object)的縮寫,它是微軟為了在HTML頁面中綁定使用XML數據所采用的一種專利技術,DSO在Web頁中以數據島的形式實現,即采用一個新的 "XML"標記,"XML"標記中包含一個id屬性用于標識對XML DSO的引用。客戶端的IE瀏覽器可以識別XML DSO,并直接在客戶端操作DSO數據源。一個典型的XML DSO數據源聲明如下:

          												<xml id="exampledso">
          <!--Here is xml data body-->
          <orderform>
          <productname>glove</productname>
          <amount>5000</amount>
          <unit>pair</unit>
          <deadline>2001.8.20</deadline>
          </orderform>
          </xml>

          也可以使用腳本語言定義DSO數據源,如:

          												<xml id="exampledso"></xml>
          <script language="JavaScript">
          exampledso.async=false;
          xmldso.load("example.xml");
          </script>

          成功聲明了XML DSO后,就可以在HTML文檔的其它地方通過"id"標識號(本例中為"exampledso")來實現對DSO數據源的訪問。如通過"datasrc"屬性實現在HTML元素中對XML DSO的綁定:

          												<table datasrc="exampledso" border=1 width=90%>
          <tr>
          <td<span datafld="productname"></span></td>
          <td<span datafld="amount"></span></td>
          <td<span datafld="unit"></span></td>
          <td<span datafld="deadline"></span></td>
          </tr>
          </table>

          或 使用腳本語言來對"exampledso"數據源對象進行操作,如可通過下面的腳本從XML DSO數據源中得到產品的定購數量: Sub getamount() amount.value = exampledso.recordset.Fields("amount") End Sub





          回頁首


          20、問:請問,我要做一個站點,讓互聯網用戶可以了解查詢我們公司的商品,我可以使用XML作為后臺的Web數據庫嗎?

          答:XML 的確與數據庫有相似之處,比如說它們都具有數據存儲、數據有效性驗證、數據查詢、數據訪問編程接口等特征,然而還有許多實際數據庫所具備的功能是XML所 不具備的,如:索引、安全機制、事務機制、數據完整性、多用戶訪問,觸發器、多文檔查詢等等。在實際應用中,對于一些數據量小、訪問用戶少、性能要求不高 的門戶站點而言,將XML文檔直接作為數據庫使用是可能的,然而對于商業應用而言,后臺還是應選擇專門的數據庫,如果訪問數量較大的話,還可以考慮在數據 庫與應用服務器之間采用XML作為信息緩存,其前提是數據庫中對應數據的更新應是定期的,這樣才能保證XML文件緩存中的數據在其生存期內與數據庫中對應 數據相一致。





          回頁首


          21、問:BizTalk Server 2000有哪些具體的功能,我可以用BizTalk Server 2000干什么?

          答:BizTalk Server 2000是微軟公司為商業用戶在計算機網絡應用中的信息交換所開發的企業級軟件。BizTalk Server 2000提供了一系列工具以實現在商業網絡環境中對分散的文檔數據共享,并可編輯約束那些文檔的規范。BizTalk Server 2000支持多種文檔格式,并使用基于XML-Data的XML作為它自己的文檔格式以及不同應用間信息傳遞的中間格式。在BizTalk Server 2000中包含了以下工具:

          1. BizTalk Editor:可以導入、建立、編輯DTD、Schema和XML文檔;
          2. BizTalk Mapper:允許用戶將符合規范A的文檔結構映射到符合規范B的文檔結構;
          3. BizTalk Management Desk:建立、維護網絡環境中不同應用之間的輸入輸出關系;
          4. BizTalk ServerAdministrator Console:BizTalk管理員控制臺用于系統工程師管理、配置BizTalk服務器,包括BizTalk服務器組屬性的設置,直接對文檔隊列進行操作管理等。




          回頁首


          22、問:SAX是W3C的正式標準嗎?哪里可以獲得SAX的資源?

          答:SAX 不是W3C的正式標準,事實上它與W3C沒有任何瓜葛,SAX是Internet上一群XML解析器技術的熱衷者共同研究的成果,David Megginson是SAX研究開發工作的核心人物。作為一種基于事件的XML編程接口,SAX已被各種XML團體廣泛認可,有關SAX的資料和下載可以 訪問http://www.megginson.com/SAX獲得。





          回頁首


          23、問:使用瀏覽器瀏覽XML的速度比HTML快嗎?

          答:通 常不會,XML與HTML的區別并不在于對瀏覽速度的改善,而在于XML是面向數據內容的,HTML是面向格式化顯示的,計算機應用可以自動地理解XML 文檔并實現對其各種操作(包括在瀏覽器中的格式化顯示),XML的出現為萬維網信息瀏覽模式提供了更豐富的空間。但只有在特殊情況下,人們可以在瀏覽 XML文檔時獲得速度上的好處,比如某人要查看新浪商城中的某件商品的詳細信息,共有兩頁,第一頁是關于商品的價格和功能介紹,第二頁是關于生產廠家的背 景介紹,若采用HTML表示,需要建立兩個HTML文件,而采用XML,只需建立一個XML文件(需結合XSLT使用),由于XML文件在瀏覽第一頁時已 經獲得,因此在瀏覽第二頁時無需與Web服務器交換,當然,由于將兩個文件的信息合一,因此在第一次瀏覽XML文檔時速度會較慢。





          回頁首






          回頁首


          關于作者

          郭路

          郭 路,杭州大學計算機系92屆本科應用專業,曾先后就職于浙江省紡織經貿總公司計算機中心、思能軟件、華企、飛時達等軟件公司,擔任技術主管,主要從事于企 業 MIS、GIS、ERP 及電子商務項目的開發管理和系統分析,對 IBM、微軟、SUN、Autodesk 等公司的企業級產品有較深的研究及理解。 mailto:gl2_public@sina.com

          posted on 2006-03-21 23:44 Vincent.Chen 閱讀(290) 評論(0)  編輯  收藏 所屬分類: XML

          主站蜘蛛池模板: 仁布县| 时尚| 越西县| 阿合奇县| 凤山县| 特克斯县| 友谊县| 平邑县| 商南县| 濉溪县| 深泽县| 岢岚县| 汉源县| 香港| 临桂县| 荃湾区| 托里县| 临潭县| 叙永县| 东兰县| 若羌县| 吴堡县| 龙海市| 连云港市| 东台市| 水城县| 平定县| 长垣县| 彭阳县| 叙永县| 油尖旺区| 禹城市| 嘉禾县| 定襄县| 乌拉特前旗| 磴口县| 洪雅县| 鄂州市| 宜昌市| 绩溪县| 宿州市|