在很多研討會(huì )和培訓班上我遇到過(guò)許多人,他們還不明白為什么要使用XML也不知道如何在他們的應用中使用XML。一些來(lái)自諸如Gartner公司的報告建議說(shuō),商業(yè)公司不能再做局外人了,不能對XML置之不理。如果你還不清楚XML到底有什么好處的話(huà),你并不是唯一的人。
我決定把與人們和媒體關(guān)于XML話(huà)題的交談?wù)沓晌?,列出XML在應用中的五個(gè)最令人喜愛(ài)的用法。盡管這些并不能包含XML的所有潛在應用,至少是些最重要的領(lǐng)域。
1、數據交換
用XML在應用程序和公司之間作數據交換已不是什么秘密了,毫無(wú)疑問(wèn)應被列為第一位。那么為什么XML在這個(gè)領(lǐng)域里的地位這么重要呢?原因就是XML使用元素和屬性來(lái)描述數據。在數據傳送過(guò)程中,XML始終保留了諸如父/子關(guān)系這樣的數據結構。幾個(gè)應用程序可以共享和解析同一個(gè)XML文件,不必使用傳統的字符串解析或拆解過(guò)程。
相反,普通文件不對每個(gè)數據段做描述(除了在頭文件中),也不保留數據關(guān)系結構。使用XML做數據交換可以使應用程序更具有彈性,因為可以用位置(與普通文件一樣)或用元素名(從數據庫)來(lái)存取XML數據。
2、Web服務(wù)
Web服務(wù)是最令人激動(dòng)的革命之一,它讓使用不同系統和不同編程語(yǔ)言的人們能夠相互交流和分享數據。其基礎在于Web服務(wù)器用XML在系統之間交換數據。交換數據通常用XML標記,能使協(xié)議取得規范一致,比如在簡(jiǎn)單對象處理協(xié)議(Simple Object Access Protocol, SOAP)平臺上。
SOAP可以在用不同編程語(yǔ)言構造的對象之間傳遞消息。這意味著(zhù)一個(gè)C#對象能夠與一個(gè)Java對象進(jìn)行通訊。這種通訊甚至可以發(fā)生在運行于不同操作系統上的對象之間。DCOM, CORBA或Java RMI只能在緊密耦合的對象之間傳遞消息,SOAP則可在松耦合對象之間傳遞消息。
3、內容管理
XML只用元素和屬性來(lái)描述數據,而不提供數據的顯示方法。這樣,XML就提供了一個(gè)優(yōu)秀的方法來(lái)標記獨立于平臺和語(yǔ)言的內容。
使用象XSLT這樣的語(yǔ)言能夠輕易地將XML文件轉換成各種格式文件,比如HTML, WML, PDF, flat file, EDI, 等等。XML具有的能夠運行于不同系統平臺之間和轉換成不同格式目標文件的能力使得它成為內容管理應用系統中的優(yōu)秀選擇。
4、Web集成
現在有越來(lái)越多的設備也支持XML了。使得Web開(kāi)發(fā)商可以在個(gè)人電子助理和瀏覽器之間用XML來(lái)傳遞數據。
為什么將XML文本直接送進(jìn)這樣的設備去呢?這樣作的目的是讓用戶(hù)更多地自己掌握數據顯示方式,更能體驗到實(shí)踐的快樂(lè )。常規的客戶(hù)/服務(wù)(C/S)方式為了獲得數據排序或更換顯示格式,必須向服務(wù)器發(fā)出申請;而XML則可以直接處理數據,不必經(jīng)過(guò)向服務(wù)器申請查詢(xún)-返回結果這樣的雙向“旅程”,同時(shí)在設備也不需要配制數據庫。
甚至還可以對設備上的XML文件進(jìn)行修改并將結果返回給服務(wù)器。想像一下,一臺具有互聯(lián)網(wǎng)功能并支持XML的電冰箱將會(huì )給市場(chǎng)帶來(lái)多么大的沖擊吧。你從此不必早起去取牛奶了!
5、配制
許多應用都將配制數據存儲在各種文件里,比如.INI文件。雖然這樣的文件格式已經(jīng)使用多年并一直很好用,但是XML還是以更為優(yōu)秀的方式為應用程序標記配制數據。使用.NET里的類(lèi),如XmlDocument和XmlTextReader,將配制數據標記為XML格式,能使其更具可讀性,并能方便地集成到應用系統中去。使用XML配制文件的應用程序能夠方便地處理所需數據,不用象其他應用那樣要經(jīng)過(guò)重新編譯才能修改和維護應用系統。
如前所述,這里提到的五種使用XML的途徑不包括全部場(chǎng)合。我希望這些可以有助于你思考如何
頂
好
================================================================
CSDN 論壇助手 Ver 1.0 B0402提供下載。 改進(jìn)了很多,功能完備!
★ 瀏覽帖子速度極快![建議系統使用ie5.5以上]。 ★ 多種帖子實(shí)現界面。
★ 保存帖子到本地[html格式]★ 監視您關(guān)注帖子的回復更新。
★ 可以直接發(fā)貼、回復帖子★ 采用XML接口,可以一次性顯示4頁(yè)帖子,同時(shí)支持自定義每次顯示帖子數量??梢詾g覽歷史記錄!
★ 支持在線(xiàn)檢測程序升級情況,可及時(shí)獲得程序更新的信息。
★★ 簽名 ●
可以在您的每個(gè)帖子的后面自動(dòng)加上一個(gè)自己設計的簽名喲。
Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解壓]
頂上去。
1
up
很好!還有沒(méi)有高手補充??
補充:
==========================================================
xml的應用是什么?xml到底能做什么,我把自己的經(jīng)驗和體會(huì )整理了一下。
首先說(shuō),xml的技術(shù)有兩項的很顯著(zhù)的特點(diǎn)。
1,數據和現實(shí)的分離。
2,數據的自描述性。
下面我就從這兩個(gè)方面,結合自己的經(jīng)驗和叢書(shū)中了解的知識,簡(jiǎn)單的談一下。
第一:數據和現實(shí)的分離。
比如說(shuō)你手頭上有一篇的資料(我們這里先假定是文字的資料,因為如果涉及到圖,影像等范圍就太廣了,也不是我只能力所及),是xml的數據的格式,好了,如果你的客戶(hù)想通過(guò)互聯(lián)網(wǎng)看看你的資料。你就可以使用一個(gè)aaa.xsl把你的xml的數據格式化為HTML的格式,同時(shí)這里面有個(gè)補充一點(diǎn),因為你可以控制你要顯示的內容,你可以過(guò)濾掉對于客戶(hù)不能看到的信息。但是這里面你并沒(méi)有動(dòng)原來(lái)的數據。
如果你的老板想把資料打印出來(lái),作為報表向上級匯報,還是用原來(lái)的數據,再寫(xiě)一個(gè)bbb.xsl,把xml的數據輸出為一個(gè)漂亮的報表的形式。ok了。
如果你以前的數據是txt的格式,你就必須從新的要做兩種的格式,
一個(gè)html的,一個(gè)報表的。你的工作最多時(shí)copy,copy的
2,數據的自描述性。
比如說(shuō)我的個(gè)人信息。
對于數據庫來(lái)說(shuō),可能建立一個(gè)users的表。建立不同的字段。
數據取得可以是
rs("name")="jiangtianpeng"
rs("Emial")="wfxian@263.net"
rs("Id")="dadapeng"
但是沒(méi)有了rs或者對于外部來(lái)說(shuō)又如何的區分id和name的區別。
dadapeng是id?還是name?
jiangtianpeng是name?還是id?
ok
用xml描述一下個(gè)人信息
<person>
<name>jiangtianpeng</name>
<id>dadapeng</id>
<natio>china</nation>
....
<email>wfxian@263.net</email>
</person>
是不是一目了然。
實(shí)際上面的問(wèn)題就涉及到了不同系統之間的xml的交換。xml是不同系統之間的橋梁。
我談一下我工作的xml經(jīng)驗
我現在的工作是一個(gè)中文,英文,俄文三種語(yǔ)言的網(wǎng)站,
比如我們通過(guò)com組件的得到一個(gè)用戶(hù)的信息
可能是
<user id=‘feiddd‘ name_CN="王" name_EN="ddddf"
name_RU=‘這里是俄文‘ 。。。。等等的信息 />
在中文上就寫(xiě)一個(gè)顯示中文的xsl,
在英文上就寫(xiě)一個(gè)顯示英文信息的xsl。
如果不用這種技術(shù),將會(huì )很麻煩的。
哪個(gè)xml解析器好用呢?最好通用一些的
我覺(jué)得配置文件用xml 不如ini, 我以前有兩個(gè)應用程序都是用xml保存配置信息,后來(lái)都改成ini
xml修改起來(lái)不太直觀(guān)
內容管理?我看不出來(lái)有什么必要用xml.
我所做的程序都用數據庫保存數據,送到客戶(hù)邊都是HTML,用jsp 和 php ,asp 之類(lèi)的程序。
如果 Dreamweaver 支持直接“所見(jiàn)即所得”地編輯,我倒可以考慮用xml .現階段不考慮用xml
難的一見(jiàn)的好論題?。?!是這幾個(gè)月來(lái),論壇中最好的,我對你們的努力表示感謝
怎么沒(méi)人續了
還有一個(gè)不知道是不是優(yōu)點(diǎn)或者缺點(diǎn)。
它把服務(wù)器端的壓力轉移到客戶(hù)端了。
"它把服務(wù)器端的壓力轉移到客戶(hù)端"我認為是好事。
XML 就是運行效率慢了些。
你要知道目前有很多人向我抱怨打開(kāi)貼子的速度太慢了。
當然這跟目前對ie5.5以上,以下版本的機制處理不一樣也有關(guān),但如果貼子回復過(guò)長(cháng),就是ie6.0也很慢
very?。纾铮铮?br>
收藏
UP一下,呵呵
UP
xml 解析起來(lái)好像是有點(diǎn)慢,不過(guò)以后肯定會(huì )有改變的,
哈哈,這是一好論文 ,thanks
UP
什么UP,UP,UP呀?同志們,發(fā)點(diǎn)有意義的回復吧。
我個(gè)人認為這個(gè)論題十分有意義,自從XML發(fā)布以來(lái),對于論述它的應用文章不多,而且不夠深入(也許有些我沒(méi)看到,也不可能全部都看到),所以XML在系統設計方面,得不到快速的應用與發(fā)展,請CSDN的各位高手多拋磚引玉,討論研究一下XML在實(shí)際中的應用問(wèn)題,XML絕對是以后網(wǎng)絡(luò )世界的應用大趨勢。
再來(lái)!
收藏
我做了N年的編程,綜觀(guān)整個(gè)計算機軟件幾十年的發(fā)展,只有3種技術(shù)是驚天動(dòng)地的:
(1) OOP
(2) Visubal Basic (世界上最優(yōu)秀的可視化編程語(yǔ)言,程序員對VB不精通是一種莫大的悲哀)
(3) XML
一個(gè)計算機人員如果把精力過(guò)多地放在了解不同的數據格式,學(xué)習不同的編程語(yǔ)言,使用不同的操作系統,炫耀不同的小技巧,鉆研不同的硬件接口,分析不同的通訊協(xié)議,那么,他必將一事無(wú)成。因為這些所謂的技術(shù)只是今后軟件工人或機器人就可以完成的一些機械的,重復的,簡(jiǎn)單的工作。
我,ERPBug,世界頂級編程大師,曾經(jīng)說(shuō)過(guò)一句名言:“編程就是對字符串的操作”,而XML正是對我所說(shuō)的話(huà)的一種驗證。當一個(gè)程序員真正體會(huì )到我這句話(huà)時(shí),他就可以稱(chēng)得上是一個(gè)高手了。
當你真正知道編程是多么的簡(jiǎn)單時(shí),你才能集中精力構思數據模型和軟件結構,你才能把你的創(chuàng )造性發(fā)揮淋淋盡至。一個(gè)程序員的生命就在于創(chuàng )新。
“可視化編程”是OOP發(fā)展的必然結果,“字符串”是OOP的一個(gè)縮影。OOP是細胞,分子的數學(xué)符號。
XML的編程就是對字符串的編程,只有受過(guò)良好的正規訓練的人,即,精通數據結構,精通編譯原理,具有很強的數學(xué)邏輯思維能力的人,才知道怎樣進(jìn)行“字符串編程”
只有知道“字符串編程”的人才知道怎樣開(kāi)發(fā)操作系統,怎樣開(kāi)發(fā)數據庫系統,怎樣開(kāi)發(fā)編程語(yǔ)言,怎樣開(kāi)發(fā)高性能的應用軟件,怎樣發(fā)揮中國人的聰明才智。
XML的靈活性,XML的擴充性,XML的簡(jiǎn)單性,XML的“字符串”性,正是XML的精華所在。
去體會(huì )XML吧,用心去體會(huì )?。?!
最科學(xué)的東西,一定是最簡(jiǎn)單的。
世人皆醉,唯我獨醒,我是一個(gè)智者,但我已經(jīng)老了。
寫(xiě)于 2002/04/11 深夜
呵呵
我才看了xml一點(diǎn)點(diǎn)皮毛,我想問(wèn)一下,xml用文本傳輸數據,怎么對數據進(jìn)行加密~!
你的體會(huì )應該是那些發(fā)明這些技術(shù)的人的感慨吧:)
可能你終于理解了人家的思維了
然而當你明白的時(shí)候,可能你還不算智者,這只是別人的思維。你的呢?期待...
大哥,你就是神,你是雅典娜,你是圣母馬力亞,你是耶蘇,你是宙斯!
反正瀏覽CSDN就經(jīng)常死機,而且是用WIN2K。
即使它有很多好處,單就這一點(diǎn)就會(huì )讓人不喜歡,或許等它更成熟些,再來(lái)用吧。
To scarab(沒(méi)有尾巴的鯊魚(yú)):
不好意思,我吹牛吹過(guò)頭了。XML重要之處不在于關(guān)于XML的技術(shù),而是XML成為一種“標準”,有了標準之后,我們才能減少很多重復的,繁瑣的,沒(méi)有任何價(jià)值和意義的工作,我們才能抽出時(shí)間來(lái)思考,我們才能有我們自己的思想。
我相信我有很多好的思想,但我能把它變成標準嗎?我有很多好的技術(shù),我要費多少精力才能把它變成產(chǎn)品?我終于有了我一流的產(chǎn)品,我如何才能把它變成商業(yè)效益。你要知道,在中國,想做一點(diǎn)事情有多么難。
這個(gè)社會(huì ),腳踏實(shí)地干活的人無(wú)法生存,無(wú)法立足,坑蒙拐騙的公司生意日漸紅火。有的軟件公司靠“炒作概念”,“銷(xiāo)售思想”就能賺大把的賺錢(qián),而一些小的軟件公司有一流的產(chǎn)品,卻無(wú)人問(wèn)津。再摘抄幾句名言,送給大家:
(1) 國內某位大型酒廠(chǎng)的老總曾說(shuō)過(guò):“只要廣告做的好,我連地上的土都能賣(mài)出大價(jià)錢(qián)來(lái)。
(2) 大唐電訊的老總曾說(shuō)過(guò):“三流的企業(yè)賣(mài)產(chǎn)品,二流的企業(yè)賣(mài)技術(shù),一流的企業(yè)賣(mài)標準(賣(mài)概念)
另:我吹牛的目的,無(wú)非想激一激中國的程序員,希望大家不要見(jiàn)怪。我對中國的程序員真是“恨鐵不成鋼”。
真希望能經(jīng)常與大家一起神侃,但還得去為生活奔波啊。
呵呵
相信自己
“編程就是對字符串的操作”
?????
to ERPBug:
我的偶像終于出現了?。。。?!
只不過(guò)-----------
你的想法是否有點(diǎn)過(guò)于悲觀(guān)呢?
1) 國內某位大型酒廠(chǎng)的老總曾說(shuō)過(guò):“只要廣告做的好,我連地上的土都能賣(mài)出大價(jià)錢(qián)來(lái)。
(2) 大唐電訊的老總曾說(shuō)過(guò):“三流的企業(yè)賣(mài)產(chǎn)品,二流的企業(yè)賣(mài)技術(shù),一流的企業(yè)賣(mài)標準(賣(mài)概念)
這兩句說(shuō)的對,確實(shí)如此呀?。?!
看完!走!
我們公司既象二流企業(yè),又象三流企業(yè),又還跟一流企業(yè)沾點(diǎn)邊,這算什么企業(yè)???:(
至于XML的作用,ChinaOK(藍蝶)已經(jīng)講得和好了。
我本人并不太關(guān)心XML的具體技術(shù),我只需要XML的設計思想,用來(lái)補充我自己的東西。
我對XML并不太了解,但當我第一次看到XML的格式的時(shí)候,我就知道它是我要找的東西,我也更加堅信我以前的設計思想都是正確的。
有意義
xml的偉大意義在于:它使數據標準化成為了可能。
計算機的實(shí)質(zhì)就是數據處理機。不管是什末計算機,它們都在程序的控制下重復的做著(zhù)三件事,數據接收,數據存儲,數據輸出。
從宏觀(guān)上看,這些程序只有一個(gè)區別,那就是數據描述的標準不同。應用程序除了流程控制外,所做的另一件事就是數據解析。由于沒(méi)有通用的數據描述標準,所以,不同的數據定義需要定義者提供專(zhuān)門(mén)的程序進(jìn)行處理。
在以前,運行環(huán)境以單機或局域網(wǎng)為主,還好控制。但進(jìn)入互聯(lián)網(wǎng)時(shí)代,情況就不同了。企業(yè)之間面臨著(zhù)巨大的數據交換的需求,但誰(shuí)也不能要求對方采用自己定義的數據標準,處理的方法有兩個(gè):一是在處理對方數據前,將其轉換為與己方標準兼容的數據格式;另一種,則是定義一個(gè)數據表達標準,大家的數據都準循該標準。這樣,各方的程序都可以直接處理這些數據??梢钥闯?,第一種方法的效率低,而且數據轉換的兼容性差,而后者則沒(méi)有這些問(wèn)題。XML就是在這種需求下出現的,它是一種元數據描述語(yǔ)言,人們可以用它定義一套數據表達標準,然后在此標準下提供數據。
1,在瀏覽這張XML頁(yè)面時(shí),確實(shí)要消耗大量的內存,我打了好幾次,都是IE死掉,
想上面那位老兄說(shuō)的死機是可能的
2
,"這個(gè)社會(huì ),腳踏實(shí)地干活的人無(wú)法生存,無(wú)法立足,坑蒙拐騙的公司生意日漸紅火。有的軟件公司靠“炒作概念”,“銷(xiāo)售思想”就能賺大把的賺錢(qián),而一些小的軟件公司有一流的產(chǎn)品,卻無(wú)人問(wèn)津。"
我也有同感
3
請教,在BROWSER里如何把XML數據傳給WEB服務(wù)器,謝謝
1. 你可以使用我的這個(gè)小程序來(lái)瀏覽csdn
2. 的確如此。
3. 可以用XMLHTTP來(lái)發(fā)送
================================================================
CSDN 論壇助手 Ver 1.0 B0402提供下載。 改進(jìn)了很多,功能完備!
★ 瀏覽帖子速度極快![建議系統使用ie5.5以上]。
★ 多種帖子實(shí)現界面。
★ 保存帖子到本地[html格式]
★ 監視您關(guān)注帖子的回復更新。
★ 可以直接發(fā)貼、回復帖子
★ 采用XML接口,可以一次性顯示4頁(yè)帖子,同時(shí)支持自定義每次顯示帖子數量。
可以瀏覽歷史記錄!
★ 支持在線(xiàn)檢測程序升級情況,可及時(shí)獲得程序更新的信息。
★★ 簽名 ●
可以在您的每個(gè)帖子的后面自動(dòng)加上一個(gè)自己設計的簽名喲。
Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
本簽名由 CSDN 論壇助手自動(dòng)添加!
XML方是,我認為千萬(wàn)不要用在程序內部,太浪費資源了!XML本身就是為了和外界進(jìn)行接口的。我們公司的一些項目,就走入了這個(gè)誤區:什么參數交換、傳遞,都是用XML.faint!在COM+方式下,搞的復雜無(wú)比?。?!
xml是種簡(jiǎn)單易學(xué)的標準,但XSL就沒(méi)有這么簡(jiǎn)單
我想知道如何在寫(xiě)XML的時(shí)候分頁(yè)?比如是CSDN的文章就沒(méi)有分頁(yè)?
還有CSDN 怎么沒(méi)有提供回復者對自己回復文章的刪除功能??
XML的確是就劃時(shí)代,用字符文本的辦法解決了數據的格式
gz
看了以上高見(jiàn),有些說(shuō)得有理,但有些就不大明白了。比如,我現在有一個(gè)系統,可能是MSSQLSERVER做數據庫,也有可能是用ORACLE或SYBASE之類(lèi)的做數據庫。前端用的是PB做的C/S程序。這時(shí)我想將之改成B/S ,這時(shí)XML能做什么呢?我的資料存在DATABASE中,要說(shuō)數據格式,恐怕XML是沒(méi)法與之相比的。再說(shuō),現在的資料庫越來(lái)越大,幾百M甚至上G的數據庫并不是稀奇事,想象一下,這些資料不是存放在數據庫中而是用XML文件存放,是否會(huì )好恐怖?而又假如,這些資料原是存放在數據庫中,然后后你要將之轉成XML,又是多么恐怖的一件事?
不過(guò)也許我是因為對XML不了解才這樣說(shuō)?!〉以I(mǎi)了本機械工業(yè)出版社的≤XML技術(shù)內幕≥,從頭翻到尾,還是搞不清XML有什么用。呵呵,我太笨了
XML最好不要解析,而只是用適當的數據生成,這樣的方向最快
XML分頁(yè)是可以的在樣例中有一些函數,可以的
但是很多函數有爭議,不統一,兼容性不好
說(shuō)白了就兩種
數據交換和數據存儲。
xml到底好不好?我想問(wèn)問(wèn)csdn就可以得到一些答案,改用xml以后對他們的整個(gè)網(wǎng)站建設維護是不是起到了事半功倍的效果,好壞就可見(jiàn)其一斑。xml是標準?那么是不是以后我們就沒(méi)有所謂的txt,jpg,doc等等的類(lèi)型文件?通通.xml,然后通通xml解析?只是好奇,呵呵。我現在想保存本頁(yè),下載了xml,可是沒(méi)有xsl就看不到頁(yè)面,是不是ie6就可以做到保存成html?是不是這就是所謂的把問(wèn)題拋給了客戶(hù)端?html變成了xml和xsl兩,總覺(jué)得有點(diǎn)怪怪的,數據和格式(處理)分離真很‘爽’嗎??
peifu, peifu
XML不是萬(wàn)能的,它有它的適用返回。
它是計算機發(fā)展到現在階段的產(chǎn)物,它的思想也沒(méi)有什么特別,只不過(guò)是它成為標準而已,所以才重要。
話(huà)又回到“他是計算機發(fā)展到現在階段的產(chǎn)物”,如果在286時(shí)代,絕對是即時(shí)有XML也不會(huì )通用。因為沒(méi)有這么多空間、內存。XML使用的方法太笨。但它的思想是很好的--一種方便,明晰的表現數據和之間關(guān)系。(我想)
XML值得去學(xué)(我以為)
我始終在希望,標準與標準之間應該能溝通才是。
XML只是一種數據格式
但是這種格式能擺脫運作平臺的影響
我用XML是把它當作數據交換的標準格式
現在國內的XML標準還很少
正需要大家共同努力
呵呵,我是一個(gè)低手,只看了一點(diǎn)點(diǎn)
請問(wèn)一下xml對于數據的安全性?
歡迎各位高手赤腳
收藏
收藏
shou chang
mark!
前面有幾位伙計談到了XML的安全性(尤其在EDI中),我也想知道。不知那位可以告知。
轉貼neilchen(我菜)的文章:
啟用 XML 安全性
XML 加密和 XML 簽名簡(jiǎn)介
XML 是因特網(wǎng)以及近來(lái) Web 服務(wù)持續增長(cháng)和開(kāi)發(fā)的主要支持者。但是,在實(shí)現 XML 語(yǔ)言的全部能力之前,還有許多與安全性相關(guān)的工作要做。目前,加密整個(gè) XML 文檔、測試其完整性和確認其發(fā)送方的可靠性是一個(gè)簡(jiǎn)單的過(guò)程。但是,越來(lái)越有必要對文檔的某些部分也使用這些功能,以便以任意順序加密和認證以及涉及不同用戶(hù)或發(fā)起方。目前,在與 XML 相關(guān)的安全性領(lǐng)域方面開(kāi)發(fā)規范的最重要部分是 XML 加密、XML 簽名、XACL、SAML 和 XKMS。本文介紹前兩個(gè)。
簡(jiǎn)介
XML 已經(jīng)成為一種用于在因特網(wǎng)上交換數據的有價(jià)值機制。SOAP,這種發(fā)送 XML 消息的方式,促使進(jìn)程以一種前所未有的方式相互通信,而 UDDI 看起來(lái)正在快速成為整合 Web 服務(wù)的供應商和用戶(hù)的標準;服務(wù)本身是 XML 以 WSDL (即“Web 服務(wù)描述語(yǔ)言”)形式描述的。如果沒(méi)有 XML,將不可能有這種靈活性和能力,并且,正如許多人所說(shuō)的,將有必要發(fā)明元語(yǔ)言。
安全性領(lǐng)域是另一個(gè)快速增長(cháng)的領(lǐng)域。在不同團體之間建立信任的傳統方法在公共因特網(wǎng)上已不合適,實(shí)際上,在大型 LAN 和 WAN 上也不合適。在這些情況下,基于非對稱(chēng)密碼術(shù)的信任機制可能會(huì )非常有用,但實(shí)際上,部署和密鑰管理的方便性、互操作性的范圍和提供的安全性遠不如各種的“公鑰基礎設施”(Public Key Infrastructures (PKI))的熱情的供應商曾讓我們相信的那樣。處理層次數據結構,以及帶有機密、訪(fǎng)問(wèn)權限或完整性等不同需求的數據的子集特別困難。另外,具有不同于 XML 文檔的現今標準安全性控制的應用程序一點(diǎn)都不簡(jiǎn)單。
目前,一些團體正積極投身于檢查這些問(wèn)題和開(kāi)發(fā)標準的活動(dòng)中。其中主要的相關(guān)開(kāi)發(fā)是 XML 加密和相關(guān)的 XML 簽名、“可擴展訪(fǎng)問(wèn)控制語(yǔ)言(XACL)”和相關(guān)的“安全性斷言標記語(yǔ)言(SAML — 以前是互為競爭對手的 AuthML 和 S2ML 的結合)”。所有這些都由 OASIS 和“XML 密鑰管理規范(XKMS)”驅動(dòng)。本文將 介紹 XML 加密和 XML 簽名。
XML 加密和 XML 簽名
象其它任何文檔一樣,可以將 XML 文檔整篇加密,然后安全地發(fā)送給一個(gè)或多個(gè)接收方。例如,這是 SSL 或 TLS 的常見(jiàn)功能,但是更令人感興趣的是如何對同一文檔的不同部分進(jìn)行不同處理的情況。XML 的一個(gè)有價(jià)值的好處是可以將一整篇 XML作為一個(gè)操作發(fā)送,然后在本地保存,從而減少了網(wǎng)絡(luò )通信量。但是,這就帶來(lái)了一個(gè)問(wèn)題:如何控制對不同元素組的授權查看。商家可能需要知道客戶(hù)的名稱(chēng)和地址,但是,無(wú)需知道任何正在使用的信用卡的各種詳細信息,就像銀行不需要知道購買(mǎi)貨物的詳細信息一樣??赡苄枰乐寡芯咳藛T看到有關(guān)個(gè)人醫療記錄的詳細信息,而管理人員可能正好需要那些詳細信息,但是應該防止他們查看醫療歷史;而醫生或護士可能需要醫療詳細信息和一些(但不是全部)個(gè)人資料。
密碼術(shù)現在所做的遠遠不止隱藏信息。消息摘要確定文本完整性,數字簽名支持發(fā)送方認證,相關(guān)的機制用于確保任何一方日后無(wú)法拒絕有效事務(wù)。這些都是遠程交易必不可少的元素,現在,用于處理整個(gè)文檔的機制開(kāi)發(fā)得相當好。
有了一般的加密,對 XML 文檔整體進(jìn)行數字化簽名不是問(wèn)題。然而,當需要對文檔的不同部分(可能由不同的人)簽名,以及需要與選擇性的方法一起來(lái)這樣做時(shí),就會(huì )出現困難。也許不可能或者不值得強制不同部分的加密工作由特定人員按特定順序進(jìn)行,然而成功地處理文檔的不同部分將取決于是否知道這點(diǎn)。此外,由于數字簽名斷言已經(jīng)使用了特定專(zhuān)用密鑰來(lái)認證,所以要小心簽名人是以純文本形式查看文檔項的,這可能意味著(zhù)對由于其它原因而加密的部分內容進(jìn)行了解密。在另一種情況下,作為更大集合中的一部分,可能對已經(jīng)加密過(guò)的數據進(jìn)行進(jìn)一步加密。在牽涉單一 XML 文檔(可能由一些不同的應用程序和不同的用戶(hù)處理在工作流序列中使用的 Web 表單或一系列數據)的事務(wù)集中考慮的不同可能性越多,就越可能看到巨大的潛在復雜性。
還有其它問(wèn)題。XML 語(yǔ)言的強項之一是,搜索是明確的,無(wú)二義性的:DTD 或 Schema 提供了相關(guān)語(yǔ)法的信息。如果將包括標記在內的文檔的一部分作為整體加密,就會(huì )喪失搜索與那些標記相關(guān)的數據的能力。此外,如果標記本身被加密,那么一旦泄漏,它們將被利用對采用的密碼術(shù)進(jìn)行純文本攻擊。
這些是工作組正在考慮的一些方面。
XML 加密示例
XML 加密語(yǔ)法的核心元素是 EncryptedData 元素,該元素與 EncryptedKey 元素一起用來(lái)將加密密鑰從發(fā)起方傳送到已知的接收方,EncryptedData 是從 EncryptedType 抽象類(lèi)型派生的。要加密的數據可以是任意數據、XML 文檔、XML 元素或 XML 元素內容;加密數據的結果是一個(gè)包含或引用密碼數據的 XML 加密元素。當加密元素或元素內容時(shí),EncryptedData 元素替換 XML 文檔加密版本中的該元素或內容。當加密的是任意數據時(shí),EncryptedData 元素可能成為新 XML 文檔的根,或者可能成為一個(gè)子代元素。當加密整個(gè) XML 文檔時(shí),EncryptedData 元素可能成為新文檔的根。此外,EncryptedData 不能是另一個(gè) EncryptedData 元素的父代或子代元素,但是實(shí)際加密的數據可以是包括現有 EncryptedData 或 EncryptedKey 元素的任何內容。
加密工作草案給出了一些示例來(lái)演示:加密的顆粒度如何根據要求的不同而不同,以及可能出現什么結果。清單 1 中的代碼片斷顯示了帶有信用卡和其它個(gè)人信息的未加密 XML 文檔。在某些情況下(例如,隱藏支付機制的信息),可能希望加密除客戶(hù)名稱(chēng)以外的所有信息,清單 2 的代碼片斷演示了如何這樣做。
轉貼neilchen(我菜)的文章:
清單 1. 顯示 John Smith 的銀行帳戶(hù)、5000 美元限額、卡號和有效期的的信息
<?xml version=‘1.0‘?>
<PaymentInfo xmlns=‘http://example.org/paymentv2‘>
<Name>John Smith<Name/>
<CreditCard Limit=‘5,000‘ Currency=‘USD‘>
<Number>4019 2445 0277 5567</Number>
<Issuer>Bank of the Internet</Issuer>
<Expiration>04/02</Expiration>
</CreditCard>
</PaymentInfo>
清單 2. 除名稱(chēng)之外全部被加密的加密文檔
<?xml version=‘1.0‘?>
<PaymentInfo xmlns=‘http://example.org/paymentv2‘>
<Name>John Smith<Name/>
<EncryptedData Type=‘http://www.w3.org/2001/04/xmlenc#Element‘
xmlns=‘http://www.w3.org/2001/04/xmlenc#‘>
<CipherData><CipherValue>A23B45C56</CipherValue></CipherData>
</EncryptedData>
</PaymentInfo>
但是,在其它情況下,可能只需要隱藏一些敏感內容 — 可能來(lái)自商家或其它第三方 — 清單 3 演示了這點(diǎn)。(請注意,顯示了與加密內容相關(guān)的標記名。)
清單 3. 只隱藏了信用卡號的加密文檔
<?xml version=‘1.0‘?>
<PaymentInfo xmlns=‘http://example.org/paymentv2‘>
<Name>John Smith<Name/>
<CreditCard Limit=‘5,000‘ Currency=‘USD‘>
<Number>
<EncryptedData xmlns=‘http://www.w3.org/2001/04/xmlenc#‘
Type=‘http://www.w3.org/2001/04/xmlenc#Content‘>
<CipherData><CipherValue>A23B45C56</CipherValue>
</CipherData>
</EncryptedData>
</Number>
<Issuer>Bank of the Internet</Issuer>
<Expiration>04/02</Expiration>
</CreditCard>
</PaymentInfo>
可能還有必要加密文檔中的所有信息,清單 4 演示了這點(diǎn)。
清單 4. 隱藏了全部?jì)热莸募用芪臋n
<?xml version=‘1.0‘?>
<EncryptedData xmlns=‘http://www.w3.org/2001/04/xmlenc#‘
Type=‘http://www.isi.edu/in-notes/iana/assignments/media-types/text/xml‘>
<CipherData><CipherValue>A23B45C56</CipherValue></CipherData>
</EncryptedData>
CipherData 可以封裝,也可以引用原始加密數據。在第一種情況下,CipherValue 元素的內容顯示原始數據,而在第二種情況,使用 CipherReference 元素,這包括了一個(gè)指向加密數據位置的 URI。
轉貼neilchen(我菜)的文章:
規范的 XML
對應用了密碼散列算法的消息進(jìn)行最輕微的更改也會(huì )產(chǎn)生不同的值。這為消息完整性方面提供了信任,并適于通常用法,但是也引入了進(jìn)一步的復雜性 — 兩個(gè) XML 文檔雖然在邏輯上相等,但可能在確切文本比較中不同。象行定界符、空標記、在屬性中使用十六進(jìn)制而不是名稱(chēng)以及在特定情況下存在注釋或注釋變體這樣的事情都可以成為文檔的邏輯結構不受影響而實(shí)際彼此不同的實(shí)例。規范的 XML 規范描述了一種生成文檔的物理表示(也成為范式)的方法,該范式解釋允許的變體,以便如果兩個(gè)文檔具有同一范式,則認為兩個(gè)文檔在給定應用程序上下文中是邏輯相等的。
對于加密、特別是數字簽名來(lái)說(shuō),這尤為重要,因為很明顯,邏輯上相同的文本變體不應該表示文檔的完整性及其發(fā)送方的認證是可疑的。用不同工具(譬如,解析器)生成不同文本(并因而生成不同消息摘要)進(jìn)行處理時(shí)也可能發(fā)生這樣的事。因此,在生成簽名和驗證計算期間,應該在范式上進(jìn)行消息摘要。如果摘要匹配,這將確定:即使文本形式可能不同,它們在其上計算的范式也匹配。
XML 簽名示例
可以將 XML 簽名應用到任意數據內容。那些應用到相同 XML 文檔中數據的簽名稱(chēng)為封裝或被封裝的簽名,而那些數據在簽名元素外部的簽名稱(chēng)為分離簽名。清單 5 取自簽名候選推薦文檔,它是一個(gè)簡(jiǎn)單分離簽名的實(shí)例。
清單 5. 一個(gè)簡(jiǎn)單分離簽名的示例
[s01] <Signature Id="MyFirstSignature"
xmlns="http://www.w3.org/2000/09/xmldsig#">
[s02] <SignedInfo>
[s03] <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/
REC-xml-c14n-20010315"/>
[s04] <SignatureMethod Algorithm="http://www.w3.org/2000/09/
xmldsig#dsa-sha1"/>
[s05] <Reference URI="http://www.w3.org/TR/2000/REC-xhtml1-20000126/">
[s06] <Transforms>
[s07] <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-
20010315"/>
[s08] </Transforms>
[s09] <DigestMethod Algorithm="http://www.w3.org/2000/09/
xmldsig#sha1"/>
[s10] <DigestValue>j6lwx3rvEPO0vKtMup4NbeVu8nk=</DigestValue>
[s11] </Reference>
[s12] </SignedInfo>
[s13] <SignatureValue>MC0CFFrVLtRlk=...</SignatureValue>
[s14] <KeyInfo>
[s15a] <KeyValue>
[s15b] <DSAKeyValue>
[s15c] <p>...</p><Q>...</Q><G>...</G><Y>...</Y>
[s15d] </DSAKeyValue>
[s15e] </KeyValue>
[s16] </KeyInfo>
[s17] </Signature>
實(shí)際簽名的信息是位于 s02 行和 s12 行之間,即 SignedInfo 元素。在簽名的部分中包含用于計算 SignatureValue 元素的算法的引用,而那個(gè)元素本身位于簽名部分之外(在 s13 行上)。s04 行上的 SignatureMethod 引用的是將規范的 SignedInfo 轉換成 SignatureValue 所用的算法。它是密鑰相關(guān)的算法和摘要算法(在這里是 DSA 和 SHA-1)的組合,可能還具有象填充這樣的操作。KeyInfo 元素(在這里位于 s14 行和 s16 行之間 — 該元素是可選的)指出用來(lái)驗證簽名的密鑰。
轉換
正如前面所提到的,加密、簽名、修改和可能進(jìn)行的更多簽名所發(fā)生的順序有很多種可能性。用戶(hù)可能需要向已經(jīng)部分加密或部分簽名的表單字段中輸入更多數據,并且需要能夠在不妨礙以后的驗證和解密的前提下這樣做。為解決這種情況,W3C 最近發(fā)布了一個(gè)有關(guān) XML 簽名的解密轉換工作草案。(請參閱參考資料。)
下面這個(gè)示例摘自那個(gè)文檔,它演示了如何建議文檔接收方采用正確的解密和簽名驗證順序。第一個(gè)代碼段顯示了要簽名的文檔部分 — order 元素;其中,第 7 行到第 11 行的 cardinfo 元素是關(guān)于個(gè)人和財務(wù)方面的詳細信息,它是純文本,但也存在一些加密數據(第 12 行)。
清單 6. XML 文檔中的 order 元素
[01] <order Id="order">
[02] <item>
[03] <title>XML and Java</title>
[04] <price>100.0</price>
[05] <quantity>1</quantity>
[06] </item>
[07] <cardinfo>
[08] <name>Your Name</name>
[09] <expiration>04/2002</expiration>
[10] <number>5283 8304 6232 0010</number>
[11] </cardinfo>
[12] <EncryptedData Id="enc1"xmlns="http://www.w3.org/
2001/04/xmlenc#">...</EncryptedData>
[13] </order>
清單 7. 經(jīng)過(guò)簽名和進(jìn)一步加密、且現在顯示轉換信息的 order 文檔
[01] <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
[02] <SignedInfo>
[03] ...
[04] <Reference URI="#order">
[05] <Transforms>
[06] <Transform Algorithm="http://www.w3.org/2001/04/
xmlenc#decryption">
[07] <DataReference URI="#enc1"
xmlns="http://www.w3.org/2001/04/xmlenc#"/>
[08] </Transform>
[09] <Transform Algorithm="http://www.w3.org/TR/2000/
CR-xml-c14n-20001026"/>
[10] </Transforms>
[11] ...
[12] </Reference>
[13] </SignedInfo>
[14] <SignatureValue>...</SignatureValue>
[15] <Object>
[16] <order Id="order">
[17] <item>
[18] <title>XML and Java</title>
[19] <price>100.0</price>
[20] <quantity>1</quantity>
[21] </item>
[22] <EncryptedData Id="enc2"
xmlns="http://www.w3.org/2001/04/xmlenc#">...</EncryptedData>
[23] <EncryptedData Id="enc1"
xmlns="http://www.w3.org/2001/04/xmlenc#">...</EncryptedData>
[24] </order>
[25] </Object>
[26] </Signature>
第 1 行到 第 26 行的 Signature 元素現在包含前面的 order 元素(位于第 16 行到第 24 行),和以前的加密純文本 cardinfo(顯示在第 22 行這一行中)。有兩個(gè)轉換引用:解密(第 6 行到第 8 行)和規范化(第 9 行)。解密轉換指示簽名驗證器解密除 DataRef 元素中第 7 行指定的數據之外的所有加密數據。解密了第 22 行中的 EncryptedData 元素之后,規范化 order 元素并且恰當地驗證簽名。
其它相關(guān)語(yǔ)言和規范
隱藏 XML 文檔中的敏感信息、建立完整性以及認證這些文檔的不同部分的來(lái)源主要通過(guò)遵循加密和簽名規范中列出的步驟來(lái)處理的,在引用的 W3C 草案中描述該規范(請參閱參考資料)。另外,還有其它緊密相關(guān)的領(lǐng)域,例如認證用戶(hù)或系統、標識授權級別和管理密鑰,所有這些都與 XML 安全性相關(guān)。
SAML 是一個(gè)由 OASIS 驅動(dòng)的模型,它嘗試融合相互競爭的 AuthML 和 S2ML 規范,使認證和授權信息的互換便于進(jìn)行?!翱蓴U展訪(fǎng)問(wèn)控制標記語(yǔ)言”是與 SAML 緊密相關(guān)的,但它更著(zhù)重于特定 XML 文檔的上下文中的面向主題特權對象的安全性模型,它也由 OASIS 指導,又是被稱(chēng)為 XACML 或 XACL(即使在同一些文檔中)。通過(guò)用 XACL 編寫(xiě)規則,策略制訂者可以定義,對于特定 XML 文檔和前面所述的情況中的相關(guān)事情,由誰(shuí)來(lái)實(shí)施哪些訪(fǎng)問(wèn)特權。
W3C 委員會(huì )現在正在考慮 XKMS,它打算建立一個(gè)位于 XML 簽名標準頂部的密鑰管理協(xié)議。有了 SAML、XACL 和其它倡議,XKMS 是構成應用于 XML 文檔的安全性這個(gè)大框架中的重要元素。有了它,可以立桿見(jiàn)影地極大簡(jiǎn)化認證和簽名密鑰的管理;它通過(guò)將數字證書(shū)處理功能、撤回狀態(tài)檢查和認證路徑位置和驗證從所涉及的應用程序分離來(lái)做到這點(diǎn) — 例如,通過(guò)把密鑰管理委托給因特網(wǎng) Web 服務(wù)。
在滿(mǎn)足使用的便利性、可靠性和強健性方面,XML 安全性還有很多路要走。但是目前,正在取得良好的進(jìn)展。
參考資料
• Jayanthi Suryanarayana 編寫(xiě)的 developerWorks 教程 SOAP 消息的數字簽名解釋了如何因安全性考慮而對您的 SOAP 消息進(jìn)行數字簽名和加密。
• Doug Tidwell 著(zhù)的“XML 安全性套件”:增加電子商務(wù)的安全性演示了一些 Web 安全性的基礎,描述了“XML 安全性套件”的組件并給出了一些示例來(lái)演示“XML 安全性套件”中的技術(shù)如何增加 Web 貿易的安全性。
• OASIS 聯(lián)盟站點(diǎn)包括 The XML Cover Pages: XML and Encryption、Robin Cover 的有關(guān)這些活動(dòng)的活動(dòng)目錄和有關(guān)出版物。該站點(diǎn)還有一份詳細說(shuō)明“安全性斷言標記語(yǔ)言(SAML)”的草案文檔。
• W3C 工作草案 XML Encryption Requirements 列出了“XML 加密”的設計原則、范圍和需求。它包括與加密語(yǔ)法、數據模型、格式、密碼處理以及外部要求和協(xié)調相關(guān)的要求。
• XML Encryption Syntax and Processing 詳細說(shuō)明了加密數據并以 XML 顯示結果的過(guò)程。數據可以是任意數據(包括一份 XML 文檔)、一個(gè) XML 元素或 XML 元素內容。
• XML-Signature Requirements 列出了設計“XML 數字簽名”規范的設計原則、范圍和要求。它包括與簽名語(yǔ)法、數據模型、格式、密碼處理以及外
收藏此版面,沒(méi)辦法,明天要考試了,大后天再慢慢體會(huì )。
to ErpBug
大蝦: 我對你的佩服簡(jiǎn)直如滔滔江水延綿不決...
“一個(gè)計算機人員如果把精力過(guò)多地放在了解不同的數據格式,學(xué)習不同的編程語(yǔ)言,使用不同的操作系統,炫耀不同的小技巧,鉆研不同的硬件接口,分析不同的通訊協(xié)議,那么,他必將一事無(wú)成。因為這些所謂的技術(shù)只是今后軟件工人或機器人就可以完成的一些機械的,重復的,簡(jiǎn)單的工作?!?
就我個(gè)人粗淺的學(xué)識我也能體會(huì )到這句話(huà)的好來(lái)。太多的開(kāi)發(fā)人員把精力過(guò)分投入到一些小技巧的鉆研上,進(jìn)而沉醉于這樣的成就并且志得意滿(mǎn);他們津津樂(lè )道于什么什么語(yǔ)言速度更快,或者因為數據庫表中增加了一列一個(gè)字節長(cháng)度的字段而驚呼“浪費了存儲空間”;但是如何抽象現實(shí)的業(yè)務(wù)、怎樣的系統框架才更利于未來(lái)的擴展都被忽視了;在一些人眼里“解決方案”一詞是那么遙遠而陌生,實(shí)際上呢,用戶(hù)需要的是什么? solution,solution還是solution。
申明一點(diǎn),我不是反對在具體技術(shù)或技巧上的鉆研,只是想給那些“唯技術(shù)論”者提提醒,防止撿了芝麻丟西瓜的遺憾。