您的位置:寻梦网首页编程乐园Java天地小龙亭之JSP实践之旅
闂傚倸鍊搁崐鎼佸磹閹间礁纾圭€瑰嫭鍣磋ぐ鎺戠倞妞ゆ帒顦伴弲顏堟偡濠婂啰绠绘鐐村灴婵偓闁靛牆鎳愰悿鈧俊鐐€栧Λ浣肝涢崟顒佸劅濠电姴娲﹂埛鎴犳喐閻楀牆绗掑ù婊€鍗抽弻娑㈡偐閹颁焦鐣堕梺浼欑悼閸忔ê鐣烽敐鍡楃窞濠㈣泛鐬奸悾鐐繆閻愵亜鈧牠鎮уΔ鍛殞濡わ絽鍟粻鏍煙鐎电ǹ浜煎ù婊勭矒閺岀喖鏌囬敂璺ㄦ晼闂佹椿鍘介悷鈺呭蓟閿涘嫪娌柣鏃堟敱椤ョ娀鏌i妶鍌氫壕闂傚倷鐒︾€笛呮崲閸岀偛绠犵€广儱娲╂慨鎶芥煢濡警妯堟繛鎾愁煼閺屾洟宕煎┑鍡忓亾閻熸壋鏋嶉柛娑卞灙閸嬫挸鈻撻崹顔界亪闂佺粯鐗曢崥瀣┍婵犲洦鍋ㄧ紒瀣硶椤︽澘顪冮妶鍡欏婵ǜ鍔戦、娆撳箳濡や胶鍘介柟鍏肩暘閸斿秴鈽夎閺岀喖鎳為妷褏鐓夐梺璇″櫍缁犳牠骞冮埄鍐╁劅妞ゆ棁妫勯惁婊堟⒒娓氣偓濞佳囨偋閸℃あ娑樷枎閹存粎鍓ㄩ梺姹囧灩閹诧繝鎮¢悢鍏肩叆闁哄啫鍊告禍楣冩煛娴g儤纭€闂傚倸鍊搁崐鎼佸磹閹间礁纾圭€瑰嫭鍣磋ぐ鎺戠倞妞ゆ帒顦伴弲顏堟偡濠婂啴鍙勯柕鍡楀暣婵$柉顦撮柣顓熺懇閺屾盯寮婚婊冣偓鎰板磻閹捐閿ゆ俊銈勮閹峰搫顪冮妶鍡楀潑闁稿鎸剧槐鎺撳緞婵犲骸娈舵繝銏n潐濞叉ḿ鎹㈠┑鍡╂僵妞ゆ挾濮撮獮妤佺節绾版ɑ顫婇柛銊ㄤ含閳ь剛鐟抽崶銊ヤ户濡炪倕绻愭繛濠囨偡閹佃櫕鏁犻梺鍓茬厛閸犳帡宕戦幘鏂ユ斀閻庯綆浜i幗鏇㈡⒑鐠恒劌鏋斿┑顔碱嚟缁牓宕橀鐣屽弳濠电娀娼уΛ娆撳闯缁嬫鐔嗛悷娆忓缁€鍫㈢磼鏉堛劍宕岀€规洘甯掗埢搴ㄥ箣椤撶啘婊勪繆閻愵亜鈧牠宕归悽绋跨疇婵せ鍋撶€殿噮鍋婂畷姗€顢欓懞銉︾彇闂備胶枪閺堫剙顫濋妸鈺佺闁挎洍鍋撴い顏勫暣婵″爼宕卞Δ鍐噯闂備焦瀵уú鈺備繆閸モ晛鍨濋柡鍐ㄧ墛閸嬨劑鏌涘☉姗堝姛闁告﹢浜堕弻锝嗘償椤栨粎校婵炲瓨绮嶇换鍫濈暦閻㈢ǹ鐐婃い鎺嶈兌閸橀亶姊洪崘鍙夋儓闁稿﹨顕х叅闁圭虎鍠楅悡娑樏归敐鍫綈鐎规洖鐭傞弻鈩冩媴鐟欏嫬纾抽梺杞扮劍閹瑰洭寮幘缁樻櫢闁跨噦鎷�
濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌熼梻瀵割槮缁炬儳顭烽弻锝夊箛椤掍焦鍎撻梺鎼炲妼閸婂潡寮诲☉銏╂晝闁挎繂妫涢ˇ銉х磽娴e搫小闁告濞婂濠氭偄閸忓皷鎷荤紒鐐劤椤戞劙宕ぐ鎺撯拺闂侇偆鍋涢懟顖涙櫠閸撗呯<闁绘ǹ娅曞畷灞绢殽閻愭彃鏆欐顏冨嵆瀹曞ジ鎮㈡搴㈩€嶆繝鐢靛О閸ㄥ綊宕㈠⿰鍫濇闁稿瞼鍋涚壕鍧楁煟閵忊懚褰掓嫅閻斿吋鐓忓┑鐐靛亾濞呭棝鏌涚€n亝顥㈤柡灞剧〒娴狅箓宕滆濡插牆顪冮妶鍛寸崪闁瑰嚖鎷�闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鍓у垝椤撶偐妲堟俊顖滅帛閹瑧绱撴担鎻掍壕闂佸憡鍔戦崝澶愬绩娴犲鐓熸俊顖濇閺嬪啫顭跨憴鍕х細缂佽鲸甯¢幃顏堝焵椤掑嫬鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛銈呭閺屻倝宕妷锔芥瘎婵炲濮靛銊ф閹捐纾兼繛鍡樺姉閵堟澘顪冮妶鍡樿偁闁搞儯鍔屾禍閬嶆⒑鐟欏嫬鍔ょ痪缁㈠弮瀵娊鏁冮崒娑氬幐闂佹悶鍎崕閬嶆倶椤忓懌浜滈柕澶堝劤婢ф稓绱掔紒妯笺€掑瑙勬礈閳ь剨缍嗛崑鍡氥亹瑜斿娲倻閳哄倹鐝﹂梺鎼炲姀濞夋盯顢氶敐澶樻晝闁挎洍鍋撶紒鐘哄吹缁辨挻鎷呴懖鈩冨灥閳诲秹濮€閵堝棌鎷洪柣鐘充航閸斿苯鈻嶉幇鐗堢厵闁告垯鍊栫€氾拷闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鍓у垝椤撶偐妲堟俊顖滅帛閹瑧绱撴担鎻掍壕闂佸憡鍔戦崝澶愬绩娴犲鐓熸俊顖濇閺嬪啫顭跨憴鍕х細缂佽鲸甯¢幃顏堝焵椤掑嫬鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷EJB闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鍓у垝椤撶偐妲堟俊顖滅帛閹瑧绱撴担鎻掍壕闂佸憡鍔戦崝澶愬绩娴犲鐓熸俊顖濇閺嬪啫顭跨憴鍕х細缂佽鲸甯¢幃顏堝焵椤掑嫬鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷J2EE闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鍓у垝椤撶偐妲堟俊顖滅帛閹瑧绱撴担鎻掍壕闂佸憡鍔戦崝澶愬绩娴犲鐓熸俊顖濇閺嬪啫顭跨憴鍕х細缂佽鲸甯¢幃顏堝焵椤掑嫬鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷婵犵數濮烽弫鍛婃叏閹绢喗鍎夊鑸靛姇缁狙囧箹鐎涙ɑ灏ù婊呭亾娣囧﹪濡堕崟顓炲闂佸憡鐟ョ换姗€寮婚敐澶婄闁挎繂妫Λ鍕磼閹冣挃缂侇噮鍨抽幑銏犫槈閵忕姷顓哄┑鐐叉缁绘帗绂掓總鍛娾拺婵懓娲ら埀顑惧€濆畷鎶芥晲婢跺﹨鎽曢梺闈涚墕椤︻垳绮诲☉妯忓綊鏁愰崨顔藉枑婵炲濮电划宥囨崲濞戞埃鍋撳☉娆嬬細闁活厼锕︾槐鎾愁吋閸滃啳鍚悗娈垮枛椤攱淇婇幖浣哥厸闁稿本鐭花浠嬫⒒娴e懙褰掑嫉椤掑倻鐭欓柟杈惧瘜閺佸倿鏌ㄩ悤鍌涘闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鍓у垝椤撶偐妲堟俊顖滅帛閹瑧绱撴担鎻掍壕闂佸憡鍔戦崝澶愬绩娴犲鐓熸俊顖濇閺嬪啫顭跨憴鍕х細缂佽鲸甯¢幃顏堝焵椤掑嫬鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷JSP缂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ゆ繝鈧柆宥呯疅闁归棿鐒﹂崑瀣煕椤愶絿绠橀柣鐔哥叀濮婅櫣绮欏▎鎯у壈濡炪倖鍨靛Λ娑㈠箲閵忕姭鏀介柛銉㈡櫇閻﹀牓姊虹粙鎸庢拱缂侇喖鐭傞妴鍌毭洪鍛嫼缂傚倷鐒﹁摫閻忓繑澹嗙槐鎺旀嫚閼碱剙鈪甸悗娈垮枛椤攱淇婇幖浣哥厸闁稿本鐭花浠嬫⒒娴e懙褰掑嫉椤掑倻鐭欓柟杈惧瘜閺佸倿鏌ㄩ悤鍌涘闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鍓у垝椤撶偐妲堟俊顖滅帛閹瑧绱撴担鎻掍壕闂佸憡鍔戦崝澶愬绩娴犲鐓熸俊顖濇閺嬪啫顭跨憴鍕х細缂佽鲸甯¢幃顏堝焵椤掑嫬鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷闂傚倸鍊搁崐鎼佸磹閹间礁纾圭€瑰嫭鍣磋ぐ鎺戠倞鐟滃繘寮抽敃鍌涚厱妞ゎ厽鍨垫禍婵嬫煕濞嗗繒绠婚柡灞稿墲瀵板嫮鈧綆浜濋鍛攽閻愬弶鈻曞ù婊勭箞瀵彃鈹戠€n偆鍘遍柣蹇曞仦瀹曟ɑ绔熷鈧弻锝嗘償椤旂厧绫嶅┑顔硷攻濡炶棄鐣峰⿰鍫濈闁瑰搫绉堕崙瑙勭節閻㈤潧浠滅€殿喖鐖奸幃褔鎮╅懠顒佹濠电偛妫欓幐濠氬磻閹邦喚纾藉ù锝堢柈缂傛岸鏌涘▎蹇旑棦婵﹨娅g槐鎺懳熼懡銈庢К闂備胶枪閿曘倕锕㈤柆宥呯劦妞ゆ帊鑳堕崯鏌ユ煙閸戙倖瀚�闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鍓у垝椤撶偐妲堟俊顖滅帛閹瑧绱撴担鎻掍壕闂佸憡鍔戦崝澶愬绩娴犲鐓熸俊顖濇閺嬪啫顭跨憴鍕х細缂佽鲸甯¢幃顏堝焵椤掑嫬鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷闂傚倸鍊搁崐鎼佸磹瀹勬噴褰掑炊椤掑鏅悷婊冪Ч閿濈偛鈹戠€n偅娅囬梺绋跨焿婵″洨绮欒箛鏃傜瘈闁靛骏绲介悡鎰版煕閺冣偓濞叉粎鍒掓繝姘唨妞ゆ挾鍠撻崢鍗烆渻閵堝棗濮х紒鎻掑⒔缁牓鍩€椤掑倻纾奸柣鎰靛墮閸斻倖绻涚亸鏍ゅ亾閹颁焦缍庡┑鐐叉▕娴滃爼寮崱娑欑厓鐟滄粓宕滃☉姘灊闁哄啫鐗嗙粻缁樸亜閺冨洦顥夐柛鎾舵嚀閳规垶骞婇柛濠冩礋楠炲﹨绠涘☉娆忎簵闂侀潧顦弲婊堟偂閻斿吋鐓涢柛銉㈡櫅娴犳粓鏌嶈閸撴瑥锕㈤柆宥呯劦妞ゆ帊鑳堕崯鏌ユ煙閸戙倖瀚�闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鍓у垝椤撶偐妲堟俊顖滅帛閹瑧绱撴担鎻掍壕闂佸憡鍔戦崝澶愬绩娴犲鐓熸俊顖濇閺嬪啫顭跨憴鍕х細缂佽鲸甯¢幃顏堝焵椤掑嫬鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷Java闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鍓у垝椤撶偐妲堟俊顖滅帛閹瑧绱撴担鎻掍壕闂佸憡鍔戦崝澶愬绩娴犲鐓熸俊顖濇閺嬪啫顭跨憴鍕х細缂佽鲸甯¢幃顏堝焵椤掑嫬鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷AppServer闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鍓у垝椤撶偐妲堟俊顖滅帛閹瑧绱撴担鎻掍壕闂佸憡鍔戦崝澶愬绩娴犲鐓熸俊顖濇閺嬪啫顭跨憴鍕х細缂佽鲸甯¢幃顏堝焵椤掑嫬鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷Web闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鍓у垝椤撶偐妲堟俊顖滅帛閹瑧绱撴担鎻掍壕闂佸憡鍔戦崝澶愬绩娴犲鐓熸俊顖濇閺嬪啫顭跨憴鍕х細缂佽鲸甯¢幃顏堝焵椤掑嫬鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧湱鈧懓瀚崳纾嬨亹閹烘垹鍊為悷婊勭矊闇夐柡宥庡幗閻撳繐鈹戦悙闈涗壕婵炲懎妫濋弻娑㈠Χ閸涱収浼冮梺鍝勮閸婃鍒掑▎鎴炲磯闁靛ǹ鍊楁す铏節閻㈤潧浠滈柟铏姈閹便劑宕归銈傛敵婵犵數濮村ú銈呮纯闂備胶枪閺堫剟鎯岄鐣岀彾闁哄洢鍨洪埛鎺懨归敐澶樻濞戞捁灏欑槐鎺楃叓椤撶姷鐓撻梺璇″枟閿氭い顐g箘閹瑰嫰鎼圭拠鈥虫暩闂傚倷绀侀幉鈩冪瑹濡ゅ懎鍨傞梺顒€绉寸粣妤呮煕閳╁啰鈯曢柣鎾存礋閺岋繝宕堕妷銉ヮ瀳婵炲瓨绮嶇划宀勫煘閹达箑鐒洪柛鎰╁妷閺嬫瑥鈹戦纭峰姛缂侇噮鍨堕獮蹇涘川鐎涙ê娈熼梺闈涳紡娴f彃浜惧┑鐘叉处閳锋垿姊婚崼姘珖缂佸澧庣槐鎺楁偐閾忣偄纾抽梺缁樹緱閸犳稓绮诲☉妯锋婵炲棙鍔栭鐔兼⒒娴h姤纭堕柛锝忕畵楠炲繘鏁撻敓锟�闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鍓у垝椤撶偐妲堟俊顖滅帛閹瑧绱撴担鎻掍壕闂佸憡鍔戦崝澶愬绩娴犲鐓熸俊顖濇閺嬪啫顭跨憴鍕х細缂佽鲸甯¢幃顏堝焵椤掑嫬鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷XML闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鍓у垝椤撶偐妲堟俊顖滅帛閹瑧绱撴担鎻掍壕闂佸憡鍔戦崝澶愬绩娴犲鐓熸俊顖濇閺嬪啫顭跨憴鍕х細缂佽鲸甯¢幃顏堝焵椤掑嫬鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亝鎹i柣顓炴闇夐柨婵嗙墛椤忕姷绱掗埀顒佺節閸屾鏂€闂佺粯蓱瑜板啴鍩€椤掆偓椤曨厾妲愰幘鎰佹僵閺夊牄鍔岄弸鎴︽⒑閸濆嫬鏆欓柣妤€瀚伴崺鈧い鎴f硶缁愭梻鈧鍠曠划娆撱€佸鈧幃娆撳传閸曨剚姣嗛梻鍌氬€风欢姘缚瑜旇棟濞寸姴顑呯粣妤佷繆閵堝懏鍣归柣銈夌畺閺屽秹宕崟顒€娅ら梺鎶芥敱閸ㄥ潡骞冭ぐ鎺戠畳闁圭儤鍨甸‖鍫濃攽閻愬弶鍣洪柛鏃€鐟╁濠氭偄閻撳海顦╅梺闈涚墕濡顢旈敓锟�闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鍓у垝椤撶偐妲堟俊顖滅帛閹瑧绱撴担鎻掍壕闂佸憡鍔戦崝澶愬绩娴犲鐓熸俊顖濇閺嬪啫顭跨憴鍕х細缂佽鲸甯¢幃顏堝焵椤掑嫬鍨傞柛顐f礀閽冪喖鏌曟繛鐐珕闁稿妫濋弻娑氫沪閸撗€妲堝銈呴獜閹凤拷闂傚倸鍊搁崐鎼佸磹閹间礁纾圭€瑰嫭鍣磋ぐ鎺戠倞妞ゆ帒顦伴弲顏堟偡濠婂啰绠绘鐐村灴婵偓闁靛牆鎳愰悿鈧俊鐐€栧Λ浣肝涢崟顒佸劅濠电姴娲﹂埛鎴犳喐閻楀牆绗掑ù婊€鍗抽弻娑㈡偐閹颁焦鐣堕梺浼欑悼閸忔ê顕f繝姘ㄩ柨鏇楀亾闁逞屽墰閺佸寮婚妸銉㈡斀闁糕剝鐟ラ崵顒傜磽娴i潧濡奸柣掳鍔嶇粚杈ㄧ節閸パ咁唽闂佸湱鍎ら弻銊╁焻閻㈠憡鈷戦柛婵嗗椤箓鏌涢弮鈧崹鍧楃嵁閸愵喖围濠㈣泛锕﹂敍婊冣攽閻愭潙鐏﹂柨鏇楁櫆鐎靛ジ鏁撻敓锟�

XML/JSP濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌熼梻瀵割槮缁炬儳顭烽弻锝夊箛椤掍焦鍎撻梺鎼炲妼閸婂潡寮诲☉銏╂晝闁挎繂妫涢ˇ銉╂⒑閽樺鏆熼柛鐘崇墵瀵寮撮悢铏诡啎闂佺粯鍔﹂崜姘舵偟閿曞倹鈷戦弶鐐村椤︼箓鎮楀顐㈠祮鐎殿喛顕ч埥澶愬閻橀潧濮堕梻浣告啞閸旀宕戦幘娲绘晣闁荤喐澹嬮弨浠嬫煟閹邦厼绲婚柟顔藉灴閺岋絽螖閸愩劉鏋呴悗娈垮枛椤攱淇婇幖浣哥厸闁稿本鐭花浠嬫⒒娴e懙褰掑嫉椤掑倻鐭欓柟杈惧瘜閺佸倿鏌ㄩ悤鍌涘

Hello,XML
XML&Java/JSP婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繘鏌i姀鐘差棌闁轰礁锕弻鈥愁吋鎼粹€崇缂備焦鍔栭〃鍡樼┍婵犲洤围闁告侗鍘藉▓鏌ユ⒑閸濆嫭顥炵紒顔芥崌瀵鎮㈤崗鐓庘偓缁樻叏濡も偓濡瑩鎮鹃崜浣虹<闁诡垎鍐f寖闂佺娅曢幑鍥э耿娓氣偓濮婅櫣绱掑Ο蹇d簻铻e┑鐘叉搐绾惧潡鐓崶銊р姇闁抽攱鍨块弻娑樜旈崘銊ゆ勃闂佸摜濮甸敃銏ゅ蓟閿涘嫪娌悹鍥ㄥ絻椤洭姊虹拠鈥虫灁闁稿﹥绻傞悾鐑藉箳閹存梹顫嶅┑顔筋殔濡梻妲愰敓锟�
JSP+XML闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛銈呭閺屾盯顢曢敐鍡欘槬缂備胶濮锋繛鈧柡宀€鍠栧畷婊嗩槾閻㈩垱鐩弻娑欑節閸屾粌鐓熼梺鍝勬湰閻╊垶銆侀弴銏″亹闁圭粯甯掗~鎾剁磽娴e搫浜鹃柛搴㈠▕閳ワ箓鎮滈挊澶庢憰闂佺粯姊婚崢褏绮堥崼銏″枑闊洦娲橀弳婊勭箾閹存瑥鐏柣鎾跺枛閺岀喖骞嗚閸ょ喐绻涢崣澶嬪唉闁哄矉绱曟禒锕傚礈瑜庨崚娑橆渻閵堝啫鐏繛鑼枛閵嗕線寮撮~顔剧◤濡炪倖鎸炬慨宄扳枖閸ф鈷掗柛灞剧懄缁佺増銇勯弴鍡楀濞堜粙鐓崶銊︾缂佽翰鍊濋幃褰掑箒閹烘垵顬夊銈庡亝濞茬喖寮婚悢鐓庣闁逛即娼у▓顓㈡⒒娴gǹ鑸规繛宸弮瀵鏁愭径濠冾棟濠电偛妫涢崑鎾绘偪閸パ€鏀介柍钘夋娴滄粍淇婇锝囩畵妞ゎ偄绻橀幖鍦喆閸曨偄骞戦梻浣告啞娓氭宕㈤悙顒€绶為柛鏇ㄥ灡閳锋垿鏌涘☉妯风湅婵炲牊娲栭埞鎴︽倷鐠囇冧紣濡炪倖娲╃紞渚€銆侀弴銏℃櫇闁逞屽墰缁鎳¢妶鍥╋紳婵炶揪缍€閸嬪倿骞嬪┑鍐╃€洪梺闈涚箞閸婃牠鍩涢幋锔藉仯闁诡厽甯掓俊鍏肩箾閸涱喖濮嶉柡宀€鍠栧畷娆撳Χ閸℃浼�
JSP+XML闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亝鎹i柣顓炴閵嗘帒顫濋敐鍛婵°倗濮烽崑鐐烘偋閻樻眹鈧線寮撮姀鈩冩珕缂傚倷鐒﹁摫婵炲懎鐗撳缁樻媴閸涘﹤鏆堟繛鎾寸椤ㄥ﹤鐣疯ぐ鎺濇晜闁割偅绻勯敍娑㈡⒑閸︻厼浜鹃柛鎾磋壘宀e潡鍩¢崨顔惧幗闂佽鍎抽崯鍧楊敆閵忋倖鐓熸繝闈涙川缁犵偞鎱ㄦ繝鍛仩闁归濞€閸ㄩ箖鎼归銈勫闂傚倷娴囧銊х矆娓氣偓閳ワ箓鎮滈挊澹┿儱霉閿濆洨銆婃俊鎻掔墛娣囧﹪顢涢悙瀛樻殸闂佽桨鑳舵繛鈧慨濠呮閹风娀鍨惧畷鍥e亾婵犳碍鐓曢悘鐐村劤閸ゎ剚淇婇锝囩煉婵﹤顭峰畷鎺戔枎閹寸姷宕叉繝鐢靛仩婢瑰牆鐣烽悽绋跨劦妞ゆ帒瀚☉褔鏌i鐐测偓鎼佹偩閻戣棄顫呴柕鍫濇噽椤ρ囨⒑閸忚偐銈撮柡鍛櫅闇夐柛鏇ㄥ灡閳锋垿鏌涢敂璇插箹闁告柨顑嗛幈銊︾節閸涱厼鎯炴繝銏n潐濞叉ḿ缂撴禒瀣窛濠电姴鍊烽崠鏍р攽閻愯埖褰х紒鎻掓健閹椽寮柊椋庣窗闂佽澹嗘晶妤呭磹閸偅鍙忔俊顖滃帶娴滈箖鎮楀鐐-Sparks.com
Serving XML with JSP
XML缂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鎯у⒔閹虫捇鈥旈崘顏佸亾閿濆簼绨奸柟鐧哥秮閺岋綁顢橀悙鎼闂傚洤顦甸弻銊モ攽閸℃ɑ鎮欓梺鍛婃煥椤戝洭鍩€椤掑喚娼愭繛鍙夛耿閹繝鏁撻悩鑼舵憰闂佺粯鏌ㄩ崥瀣磻鐎n喗鐓曟い鎰╁€曢弸鏃堟煕閹搭垳绡€闁哄矉缍侀幃銏ゅ传閵夛箑娈忕紓鍌欒兌婵敻骞戦崶褜鍤曢悹鍥ф▕閸氬鏌涢顐簼妞ゅ骸娲缁樻媴閸涘﹤鏆堥梺瑙勬倐缁犳牕鐣烽悧鍫熷劅妞ゎ厽甯炵粙蹇涙椤愩垺澶勬慨濠呭吹瀵囧焵椤掆偓閳规垿顢欓弬銈勭返闂佸憡鎸婚惄顖炲极瀹ュ應鍫柛顐ゅ暱閹锋椽姊婚崒姘卞缂佸鎸婚弲鍫曞即閵忥紕鍘甸梺鍛婂姌鐏忔瑧绮绘繝姘厵妞ゆ梹鏋婚懓鎸庮殽閻愮榿缂氱紒杈ㄥ笒铻i梺鍨儏椤忓綊姊婚崒娆掑厡缂侇噮鍨跺畷褰掓偄閻撳海鏌у┑鐘诧工閻楃偟绱為弽褜鐔嗛柤鎼佹涧婵牓鏌i幘瀵告噰闁哄本鐩獮瀣枎韫囧﹤浜鹃柡宥庡亐閸嬫挸顫濋悙顒€顏�
IBM闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮撮悙娴嬪亾瑜版帒纾块柟瀵稿У閸犳劙鏌eΔ鈧悧鍡欑箔閹烘梻纾奸柍褜鍓氬鍕沪缁嬪じ澹曢梺绋跨箰椤︻垱绂嶆ィ鍐┾拺闁告稑锕ユ径鍕煕鐎n亜顏柟顔筋殜椤㈡﹢濮€閳锯偓閹锋椽姊洪崨濠勭畵閻庢凹鍓熼、鏃堝煛閸涱喖鈧爼鐓崶銉ュ姕閻庢熬鎷�/Java闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧湱鈧懓瀚崳纾嬨亹閹烘垹鍊為悷婊勭矊闇夐柡宥庡幗閻撳繐鈹戦悙闈涗壕婵炲懎妫濋弻娑欑節閸屾稑浠撮梺鍝勮閸旀垵顕i幘顔藉€锋繛鏉戭儏娴滃墽鎲搁悧鍫濈瑨缁炬儳顭烽弻銊モ槈濡警浠鹃梺鍝ュУ閸旀瑩寮婚敓鐘茬闁靛ě鍐炬毇闂備礁鎼€氥劑宕曢悽绋胯摕闁哄浄绱曢悿鈧柣搴秵娴滄牠宕戦幘璇插唨妞ゆ挾鍋熼弻褔姊鸿ぐ鎺擄紵闁绘帪绠撻幃锟犲Ψ閳哄倻鍘介梺鍝勬川閸嬫盯鍩€椤掆偓濠€閬嶅焵椤掍胶鍟查柟鍑ゆ嫹
**闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧湱鈧懓瀚崳纾嬨亹閹烘垹鍊為悷婊勭矊闇夐柡宥庡幗閻撳繐鈹戦悙闈涗壕婵炲懎妫濋弻娑欑節閸屾稑浠撮梺鍝勮閸旀垵顕i幘顔藉€锋繛鏉戭儏娴滃墽鎲搁悧鍫濈瑨缁炬儳顭烽弻銊モ槈濡警浠鹃梺鍝ュУ閸旀瑩寮婚敓鐘茬闁靛ě鍐炬毇闂備礁鎼€氥劑宕曢悽绋胯摕闁哄浄绱曢悿鈧柣搴秵娴滄牠宕戦幘璇插唨妞ゆ挾鍋熼弻褔姊鸿ぐ鎺擄紵闁绘帪绠撻幃锟犲Ψ閳哄倻鍘介梺鍝勬川閸嬫盯鍩€椤掆偓濠€閬嶅焵椤掍胶鍟查柟鍑ゆ嫹 缂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻锝夊箣閿濆憛鎾绘煕婵犲倹鍋ラ柡灞诲姂瀵挳鎮欏ù瀣壕闁割偅娲栭悞鍨亜閹哄棗浜鹃梺鍝ュ枑閹告娊鎮伴鈧畷鍫曨敆閳ь剛鐥閹绗熼婊冨弗闂佸摜鍋熼弫璇差潖缂佹ɑ濯撮柤鎭掑劤閵嗗﹪姊洪棃鈺冪Ф缂佺姵鎹囬悰顔跨疀濞戞瑦娅㈤梺璺ㄥ櫐閹凤拷1-3缂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻锝夊箣閿濆憛鎾绘煕婵犲倹鍋ラ柡灞诲姂瀵潙螖閳ь剚绂嶆ィ鍐╃叄闁煎鍊曟禒閬嶆煛瀹€鈧崰鎰缚韫囨稑绀堢憸蹇涘汲閻樼數纾藉ù锝呮惈椤庡矂鏌涢妸銉у煟鐎殿喖顭锋俊鎼佸煛閸屾矮绨介梻浣呵归張顒傜矙閹达富鏁傞柨鐕傛嫹
**闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧湱鈧懓瀚崳纾嬨亹閹烘垹鍊為悷婊勭矊闇夐柡宥庡幗閻撳繐鈹戦悙闈涗壕婵炲懎妫濋弻娑欑節閸屾稑浠撮梺鍝勮閸旀垵顕i幘顔藉€锋繛鏉戭儏娴滃墽鎲搁悧鍫濈瑨缁炬儳顭烽弻銊モ槈濡警浠鹃梺鍝ュУ閸旀瑩寮婚敓鐘茬闁靛ě鍐炬毇闂備礁鎼€氥劑宕曢悽绋胯摕闁哄浄绱曢悿鈧柣搴秵娴滄牠宕戦幘璇插唨妞ゆ挾鍋熼弻褔姊鸿ぐ鎺擄紵闁绘帪绠撻幃锟犲Ψ閳哄倻鍘介梺鍝勬川閸嬫盯鍩€椤掆偓濠€閬嶅焵椤掍胶鍟查柟鍑ゆ嫹 缂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻锝夊箣閿濆憛鎾绘煕婵犲倹鍋ラ柡灞诲姂瀵挳鎮欏ù瀣壕闁割偅娲栭悞鍨亜閹哄棗浜鹃梺鍝ュ枑閹告娊鎮伴鈧畷鍫曨敆閳ь剛鐥閹绗熼婊冨弗闂佸摜鍋熼弫璇差潖缂佹ɑ濯撮柤鎭掑劤閵嗗﹪姊洪棃鈺冪Ф缂佺姵鎹囬悰顔跨疀濞戞瑦娅㈤梺璺ㄥ櫐閹凤拷4缂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻锝夊箣閿濆憛鎾绘煕婵犲倹鍋ラ柡灞诲姂瀵潙螖閳ь剚绂嶆ィ鍐╃叄闁煎鍊曟禒閬嶆煛瀹€鈧崰鎰缚韫囨稑绀堢憸蹇涘汲閻樼數纾藉ù锝呮惈椤庡矂鏌涢妸銉у煟鐎殿喖顭锋俊鎼佸煛閸屾矮绨介梻浣呵归張顒傜矙閹达富鏁傞柨鐕傛嫹
**闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧湱鈧懓瀚崳纾嬨亹閹烘垹鍊為悷婊勭矊闇夐柡宥庡幗閻撳繐鈹戦悙闈涗壕婵炲懎妫濋弻娑欑節閸屾稑浠撮梺鍝勮閸旀垵顕i幘顔藉€锋繛鏉戭儏娴滃墽鎲搁悧鍫濈瑨缁炬儳顭烽弻銊モ槈濡警浠鹃梺鍝ュУ閸旀瑩寮婚敓鐘茬闁靛ě鍐炬毇闂備礁鎼€氥劑宕曢悽绋胯摕闁哄浄绱曢悿鈧柣搴秵娴滄牠宕戦幘璇插唨妞ゆ挾鍋熼弻褔姊鸿ぐ鎺擄紵闁绘帪绠撻幃锟犲Ψ閳哄倻鍘介梺鍝勬川閸嬫盯鍩€椤掆偓濠€閬嶅焵椤掍胶鍟查柟鍑ゆ嫹 缂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻锝夊箣閿濆憛鎾绘煕婵犲倹鍋ラ柡灞诲姂瀵挳鎮欏ù瀣壕闁割偅娲栭悞鍨亜閹哄棗浜鹃梺鍝ュ枑閹告娊鎮伴鈧畷鍫曨敆閳ь剛鐥閹绗熼婊冨弗闂佸摜鍋熼弫璇差潖缂佹ɑ濯撮柤鎭掑劤閵嗗﹪姊洪棃鈺冪Ф缂佺姵鎹囬悰顔跨疀濞戞瑦娅㈤梺璺ㄥ櫐閹凤拷5缂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻锝夊箣閿濆憛鎾绘煕婵犲倹鍋ラ柡灞诲姂瀵潙螖閳ь剚绂嶆ィ鍐╃叄闁煎鍊曟禒閬嶆煛瀹€鈧崰鎰缚韫囨稑绀堢憸蹇涘汲閻樼數纾藉ù锝呮惈椤庡矂鏌涢妸銉у煟鐎殿喖顭锋俊鎼佸煛閸屾矮绨介梻浣呵归張顒傜矙閹达富鏁傞柨鐕傛嫹
**闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧湱鈧懓瀚崳纾嬨亹閹烘垹鍊為悷婊勭矊闇夐柡宥庡幗閻撳繐鈹戦悙闈涗壕婵炲懎妫濋弻娑欑節閸屾稑浠撮梺鍝勮閸旀垵顕i幘顔藉€锋繛鏉戭儏娴滃墽鎲搁悧鍫濈瑨缁炬儳顭烽弻銊モ槈濡警浠鹃梺鍝ュУ閸旀瑩寮婚敓鐘茬闁靛ě鍐炬毇闂備礁鎼€氥劑宕曢悽绋胯摕闁哄浄绱曢悿鈧柣搴秵娴滄牠宕戦幘璇插唨妞ゆ挾鍋熼弻褔姊鸿ぐ鎺擄紵闁绘帪绠撻幃锟犲Ψ閳哄倻鍘介梺鍝勬川閸嬫盯鍩€椤掆偓濠€閬嶅焵椤掍胶鍟查柟鍑ゆ嫹 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮诲☉妯锋斀闁告洦鍋勬慨澶愭⒑缁嬫鍎愰柟鍛婃倐閿濈偛鈹戠€n偄浜楅柟鑲╄ˉ濡插懎岣挎ィ鍐┾拻濞撴埃鍋撻柍褜鍓涢崑娑㈡嚐椤栨稒娅犳い鏍仦閻撴洟鏌熺€涙ḿ绠樼紒澶庢閳ь剝顫夊ú妯煎垝瀹€鍕叀濠㈣泛饪村ḿ鈺傘亜閹炬瀚粙鎰版⒒閸屾瑨鍏岀紒顕呭灦瀹曟繂螖閸涱厾锛熼梺闈涚墕椤︻垶鎮挎ィ鍐╃厵闂傚倸顕崝宥夋煟閹惧崬鍔﹂柡宀嬬秮瀵挳鎮欏ù瀣壕闁革富鍘搁崑鎾愁潩閻愵剙顏�1 婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繘鏌i幋锝嗩棄闁哄绶氶弻娑樷槈濮楀牊鏁鹃梺鍛婄懃缁绘帡鍩€椤掆偓缁犲秹宕曢柆宓ュ洭顢涘⿰鍛劶闁诲函缍嗛崑浣圭濠婂牊鐓欓柟浣冩珪濞呭懘鏌i幒鏂垮妺缂佺粯鐩畷妤呭礂閼测晩妲规繝娈垮枛閿曪妇鍒掗鐐茬闁告稒娼欐导鐘绘煏婢舵稑顩柍褜鍓﹂崰鏍€旈崘顔嘉ч柛鈩兦归崑渚€姊洪幖鐐插妧闁哥姷澧楀ú鐔煎蓟閿濆棙鍎熸い鏍ㄧ矌鏍¢梻浣告憸婵敻鎮у⿰鍛灊閻犲洤妯婂ḿ鈺呮煠閸濄儲鏆╅柛妯绘倐濮婃椽宕ㄦ繝鍌氼潎闂佸憡鏌ㄧ€涒晠寮茬捄琛℃闁靛骏绱曢崢鎼佹⒑閸涘﹣绶遍柛鐘愁殜瀹曟劙骞囬悧鍫㈠幐闁诲繒鍋犻褎鎱ㄩ崒鐐寸厵妞ゆ柨鎼埀顒佺箓閻g兘骞掗幋鏃€顫嶅┑顔筋殔濡梻妲愰敓锟�
**闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧湱鈧懓瀚崳纾嬨亹閹烘垹鍊為悷婊勭矊闇夐柡宥庡幗閻撳繐鈹戦悙闈涗壕婵炲懎妫濋弻娑欑節閸屾稑浠撮梺鍝勮閸旀垵顕i幘顔藉€锋繛鏉戭儏娴滃墽鎲搁悧鍫濈瑨缁炬儳顭烽弻銊モ槈濡警浠鹃梺鍝ュУ閸旀瑩寮婚敓鐘茬闁靛ě鍐炬毇闂備礁鎼€氥劑宕曢悽绋胯摕闁哄浄绱曢悿鈧柣搴秵娴滄牠宕戦幘璇插唨妞ゆ挾鍋熼弻褔姊鸿ぐ鎺擄紵闁绘帪绠撻幃锟犲Ψ閳哄倻鍘介梺鍝勬川閸嬫盯鍩€椤掆偓濠€閬嶅焵椤掍胶鍟查柟鍑ゆ嫹 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮诲☉妯锋斀闁告洦鍋勬慨澶愭⒑缁嬫鍎愰柟鍛婃倐閿濈偛鈹戠€n偄浜楅柟鑲╄ˉ濡插懎岣挎ィ鍐┾拻濞撴埃鍋撻柍褜鍓涢崑娑㈡嚐椤栨稒娅犳い鏍仦閻撴洟鏌熺€涙ḿ绠樼紒澶庢閳ь剝顫夊ú妯煎垝瀹€鍕叀濠㈣泛饪村ḿ鈺傘亜閹炬瀚粙鎰版⒒閸屾瑨鍏岀紒顕呭灦瀹曟繂螖閸涱厾锛熼梺闈涚墕椤︻垶鎮挎ィ鍐╃厵闂傚倸顕崝宥夋煟閹惧崬鍔﹂柡宀嬬秮瀵挳鎮欏ù瀣壕闁革富鍘搁崑鎾愁潩閻愵剙顏�2 婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繘鏌i幋锝嗩棄闁哄绶氶弻娑樷槈濮楀牊鏁鹃梺鍛婄懃缁绘帡鍩€椤掆偓缁犲秹宕曢柆宓ュ洭顢涘⿰鍛劶闁诲函缍嗛崑浣圭濠婂牊鐓欓柟浣冩珪濞呭懘鏌i幒鏂垮妺缂佺粯鐩畷妤呭礂閼测晩妲规繝娈垮枛閿曪妇鍒掗鐐茬闁告稒娼欐导鐘绘煏婢舵稑顩柍褜鍓﹂崰鏍€旈崘顔嘉ч柛鈩兦归崑渚€姊洪幖鐐插妧闁哥姷澧楀ú鐔煎蓟閿濆棙鍎熸い鏍ㄧ矌鏍¢梻浣告憸婵敻鎮у⿰鍛灊閻犲洤妯婂ḿ鈺呮煠閸濄儲鏆╅柛妯绘倐濮婃椽宕ㄦ繝鍌氼潎闂佸憡鏌ㄧ€涒晠寮茬捄琛℃闁靛骏绱曢崢鎼佹⒑閸涘﹣绶遍柛鐘愁殜瀹曟劙骞囬悧鍫㈠幐闁诲繒鍋犻褎鎱ㄩ崒鐐寸厵妞ゆ柨鎼埀顒佺箓閻g兘骞掗幋鏃€顫嶅┑顔筋殔濡梻妲愰敓锟�
闂傚倸鍊搁崐鎼佸磹閹间礁纾圭€瑰嫭鍣磋ぐ鎺戠倞鐟滃繘寮抽敃鍌涚厱妞ゎ厽鍨垫禍婵嬫煕濞嗗繒绠婚柡宀€鍠栭獮鍡涘级閸熷啯鎹囬弻宥夋煥鐎n偀鎷婚梺閫炲苯澧紒鐘茬Ч瀹曟洟鏌嗗畵銉ユ喘椤㈡稑饪伴崘鐐棥闂佽崵鍠愰悷銉р偓姘煎枤缁粯銈i崘鈺冨幍闁诲孩绋掑玻鍧楀箠閸愵喗鐓熼煫鍥风导闁垶鏌$仦鍓р姇闁诡垱妫冮崺銉╁川閺夋寧鍎撻梻鍌欑閹碱偊鎯夋總绋跨獥闁归偊鍠氱粻鏃堟煟閺冨倸甯堕柛銊ュ€归妵鍕籍閸ヨ泛娈梺鎼炲妽閹斤拷 Server
Java濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌熼梻瀵割槮缁炬儳顭烽弻锝夊箛椤掍焦鍎撻梺鎼炲妼閸婂潡寮诲☉銏╂晝闁挎繂妫涢ˇ銉х磽娴e搫小闁告濞婂濠氭偄閸忓皷鎷婚柣搴f暩鏋┑鈥茬矙濮婅櫣绱掑Ο铏诡儌缂備緡鍣崹杈╃矚鏉堛劎绡€闁稿濮ゅΛ鍐ㄧ暦濮椻偓閹瑩顢栭懞銉у幘闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮撮悙娴嬪亾瑜版帒纾块柟瀵稿У閸犳劙鏌eΔ鈧悧鍡欑箔閹烘梻纾奸柍褜鍓氬鍕沪缁嬪じ澹曢梺绋跨箰椤︻垱绂嶆ィ鍐┾拺闂侇偆鍋涢懟顖涙櫠閹绢喗鐓曢柍瑙勫劤娴滅偓淇婇悙顏勨偓鏍暜婵犲嫮鐭嗗〒姘e亾鐎规洜鏁婚、妤呭礋椤掑倸骞堥梻浣筋潐瀹曟ê鈻斿☉銏犲嚑婵炴垶鍩冮崑鎾斥枔閸喗鐏堝銈庡幘閸忔ê顕i锕€绀冩い鏃囧亹閿涙粌鈹戦鐭亜鐣烽鍕祦闁规壆澧楅埛鎺懨归敐鍛暈闁哥喓鍋ら弻娑㈠棘鐠恒劎顔掗悗娈垮枟瑜板啴鍩ユ径濞炬瀻闁规惌鍘界粊顐︽⒒娴e憡璐¢柛搴涘€濋妴鍐幢濞戞瑥浜楅梺缁樻閸嬫劙宕i幘缁樼厱闁靛绲芥俊鐣岀磼閳ь剟鍩€椤掍胶绠鹃悗鐢登硅ⅴ闂佸搫鎳愭繛鈧€殿喛顕ч埥澶婎潩閿濆懍澹曢梺鎸庣箓妤犲憡绂嶅⿰鍐f斀妞ゆ棁鍋愭晥闂佸搫鐬奸崰鏍€佸▎鎾崇畾鐟滃秹鐛€n亶娓婚柕鍫濆暙閻忣亪鏌i埡濠傜仸妤犵偛鍟埢搴ㄥ箣閺傚じ澹曢梺姹囧灮濞呫儴銇愰幒鏂跨ウ濠德板€曢幊蹇涘煕閹烘嚚褰掓晲閸ャ劌娈屽銈嗘礃缁海妲愰幒鏃€瀚氶柟缁樺坊閸嬫挻绻濆顒傤唹闂侀潧绻堥崐鏇犵不閿濆鐓熸慨妤€妫楁禍婊兠瑰⿰鍛壕闁逛究鍔岃灒闁绘挸绨兼竟鏇㈡煟鎼淬垻鍟查柟鍑ゆ嫹
JDOM--XML闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮撮悙娴嬪亾瑜版帒纾块柟瀵稿У閸犳劙鏌eΔ鈧悧鍡欑箔閹烘梻纾奸柍褜鍓氬鍕沪缁嬪じ澹曢梺绋跨箰椤︻垱绂嶆ィ鍐┾拺闁告稑锕ユ径鍕煕鐎n亜顏鐐叉閹瑥霉鐎n偅鏉搁梻浣规灱閺呮盯宕锕€绀夐柕鍫濐槹閻撴洟鐓崶銊︹拻鐎规洘甯″濠氬磼濮橆兘鍋撻幖浣哥9闁归棿绀佺壕褰掓煟閹达絽袚闁搞倕瀚伴弻娑㈩敃閿濆棛锛橀梺閫炲苯鍘搁柣鎺炲閹广垹鈹戠€n亞鍊為梺鑲┣归悘姘枍閺冨牊鐓熼柣鏂挎憸閻﹦绱掔紒姗堣€块柣娑卞櫍楠炲鏁冮埀顒勶綖閸涘瓨鐓熸俊顖濆吹婢ь剚淇婇銏犳殭闁伙絿鍏樻俊鎼佸煛婵犲啯娅嶉梻渚€娼х换鎺撴叏閻㈢ǹ姹叉い蹇撶墛閳锋帡鏌涚仦鍓ф噭缂佷胶澧楃换娑欏緞鐎n偆顦伴悗瑙勬礃婵炲﹪寮崘顔肩<婵﹢纭搁崬鐢告⒒娴h姤纭堕柛锝忕畵楠炲繘鏁撻敓锟�
Apache闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮撮悙娴嬪亾瑜版帒纾块柟瀵稿У閸犳劙鏌eΔ鈧悧鍡欑箔閹烘梻纾奸柍褜鍓氬鍕沪缁嬪じ澹曢梺绋跨箰椤︻垱绂嶆ィ鍐┾拺闁告稑锕ユ径鍕煕鐎n亜顏柟顔筋殜椤㈡﹢濮€閳锯偓閹锋椽姊洪崨濠勭畵閻庢凹鍓熼、鏃堝煛閸涱喖鈧爼鐓崶銊﹀碍妞ゆ帇鍨荤槐鎺旂磼濡偐鐣奸梺鍝ュТ閿曘儱顕ラ崟顐ゆ殕闁逞屽墴閺佸秹鎮㈤崗灏栨嫼缂備礁顑嗛娆撳磿閹扮増鐓曢柕濞垮劤娴犮垽鏌i敐鍥у幋妤犵偛娲鍫曞垂椤旇偐銈梻鍌欒兌缁垶宕归棃娴㈡椽鍩¢崨顓犲姦濡炪倖宸婚崑鎾寸箾绾绡€鐎殿喛顕ч埥澶娢熷⿰鍕棃鐎规洘枪椤︽挳姊婚崒銈呯仩闁宠鍨块幃娆撳矗婢跺棙鐏嗗┑鐐茬摠缁秶鎹㈤崼婵愬殨闁哄被鍎辩粻鐟懊归敐鍛础闁告瑥妫濆铏圭磼濡崵顦ラ梺绋匡工濠€閬嶅焵椤掍胶鍟查柟鍑ゆ嫹
Cocoon闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮撮悙娴嬪亾瑜版帒纾块柟瀵稿У閸犳劙鏌eΔ鈧悧鍡欑箔閹烘梻纾奸柍褜鍓氬鍕沪缁嬪じ澹曢梺绋跨箰椤︻垱绂嶆ィ鍐┾拺闂侇偆鍋涢懟顖涙櫠閹绢喗鐓曢柍瑙勫劤娴滅偓淇婇悙顏勨偓鏍暜婵犲嫮鐭嗗〒姘e亾鐎规洜鏁婚、妤呭礋椤掑倸骞堥梻浣筋潐瀹曟ê鈻斿☉銏犲嚑婵炴垶鐟▓浠嬫煟閹邦厼绲婚柡鍡欏仱閺屾洟宕奸鍌溞滈悗瑙勬礃閿曘垺淇婇崨濠冨劅婵☆垳绮悵鏍⒑鐟欏嫬绲婚柟璇х節楠炲棝寮崼婢晠鏌曟竟顖氬閸旀悂姊婚崒娆掑厡妞ゃ垹锕獮鎾活敂閸啿鎸冮梺鍛婃处閸ㄩ亶宕戦崒鐐寸厪濠㈣泛妫欏▍鍡涙煟閹捐泛鏋涢柡宀嬬節瀹曞爼鍩℃担椋庢崟闂備線鈧偛鑻晶顔界節閳ь剟鏌嗗鍛姦濡炪倖甯婇懗鍫曞疮閺屻儲鐓欓柛鎴欏€栫€氾拷
XML DTD濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌熼梻瀵割槮缁惧墽绮换娑㈠箣濞嗗繒鍔撮梺杞扮椤戝棝濡甸崟顖氱閻犺櫣鍎ら悗楣冩⒑閸涘﹦鎳冪紒缁橈耿瀵鎮㈤搹鍦紲闂侀潧绻掓慨鐢告偟椤曗偓濮婄儤娼幍顕呮М闁诲孩鐭崡鍐差嚕鐠囨祴妲堥柕蹇曞閵娾晜鐓忛煫鍥э工婢ф煡鏌e┑鍥棃婵﹥妞介獮鏍倷閹绘帩鐎寸紓鍌欐祰椤曆囨偋閹炬剚鍤曞┑鐘宠壘鎯熼梺鍐叉惈閸婂憡绂嶉悙鐑樷拺缂佸瀵у﹢鎵磼鐎n偄鐏存い銏℃閺佹捇鏁撻敓锟�
XML Schema闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛銈呭閺屻倝宕妷锔芥瘎婵炲濮靛銊ф閹捐纾兼繛鍡樺姉閵堟澘顪冮妶鍡樿偁闁搞儯鍔屾禍閬嶆⒑鐟欏嫬鍔ょ痪缁㈠弮瀵娊鏁冮崒娑氬幐闂佹悶鍎崕閬嶆倶椤忓懌浜滈柕澶堝劤婢ф稓绱掔紒妯笺€掑瑙勬礈閳ь剨缍嗛崑鍡氥亹瑜斿娲倻閳哄倹鐝﹂梺鎼炲姀濞夋盯顢氶敐澶樻晝闁挎洍鍋撶紒鐘哄吹缁辨挻鎷呴懖鈩冨灥閳诲秹濮€閵堝棌鎷洪柣鐘充航閸斿苯鈻嶉幇鐗堢厵闁告垯鍊栫€氾拷
JSP濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌熼梻瀵割槮缁炬儳顭烽弻锝夊箛椤掍焦鍎撻梺鎼炲妼閸婂潡寮诲☉銏╂晝闁挎繂妫涢ˇ銉х磽娴e搫小闁告濞婂濠氭偄閸忓皷鎷婚柣搴f暩鏋┑鈥茬矙濮婅櫣绱掑Ο铏诡儌缂備緡鍣崹杈╃矚鏉堛劎绡€闁稿濮ゅΛ鍐ㄧ暦濮椻偓閹瑩顢栭懞銉у幘闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮撮悙娴嬪亾瑜版帒纾块柟瀵稿У閸犳劙鏌eΔ鈧悧鍡欑箔閹烘梻纾奸柍褜鍓氬鍕沪缁嬪じ澹曢梺绋跨箰椤︻垱绂嶆ィ鍐┾拺闂侇偆鍋涢懟顖涙櫠閹绢喗鐓曢柍瑙勫劤娴滅偓淇婇悙顏勨偓鏍暜婵犲嫮鐭嗗〒姘e亾鐎规洜鏁婚、妤呭礋椤掑倸骞堥梻渚€娼ф灙闁告柨顑夊畷銉╊敃閵堝洨锛滃銈嗘⒒閳峰牓宕曢弮鈧〃銉╂倷閺夋垹鐟ㄩ柧缁樼墵閺屽秷顧侀柛鎾跺枛瀵崵鈧綆鍠栭悙濠冦亜閹哄秷鍏岄柛姗嗕簼缁绘繈濮€閿濆棛銆愰梺缁橆殔濡繂鐣峰┑瀣ч柛鈩冨姃缁ㄥ姊洪悷鏉库挃闁稿鍔戝畷鎴﹀閳╁啫寮挎繝鐢靛Т閹冲繘顢旈悩缁樼厵闁荤喐婢橀顓炩攽閳╁啯鍊愬┑锛勫厴閺佸倿骞嗚缁嬪牓姊婚崒姘偓鐑芥嚄閸洖绠犻柟鎹愵嚙閸氬綊鏌″搴″箹缂佺媭鍨堕弻銊╂偆閸屾稑顏�
XML濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌熼梻瀵割槮缁炬儳顭烽弻锝夊箛椤掍焦鍎撻梺鎼炲妼閸婂潡寮诲☉銏╂晝闁挎繂妫涢ˇ銉х磽娴e搫小闁告濞婂璇测槈濡攱顫嶅┑顔筋殔閻楀棙鎱ㄥ☉銏♀拺鐎规洖娲ㄧ敮娑欐叏婵犲倹璐¢柟骞垮灩閳藉濮€閻樻鍟嬮梻浣藉亹閳峰牓宕滃☉銏犳辈婵炲本锕㈠濠氬磼濮橆兘鍋撻幖浣哥9闁归棿绀佺壕褰掓煟閹达絽袚闁稿﹤娼¢弻銊╁即閻愭祴鍋撹ぐ鎺戠?闁瑰濮甸崰鎰版煟濡も偓閻楀棛绮幒鏃傜<闁逞屽墯瀵板嫮浠︾粙澶稿闂佺ǹ绻愰ˇ顖涚妤e啯鈷戦梺顐ゅ仜閼活垱鏅堕幘顔界厱闁宠鍎虫禍鐐繆閻愵亜鈧牜鏁繝鍕焼濞撴埃鍋撶€规洜鏁婚、妤呭礋椤掑倸骞堟繝鐢靛仜濡鎹㈤幇鏉挎辈婵炲棙鍔戞禍婊堟煛閸ユ湹绨界紒澶樺枟椤ㄣ儵鎮欓弻銉ュ及闂佺懓纾崑銈嗕繆閻戣棄唯闁靛牆娲ㄥ▔鍧楁⒒閸屾艾鈧兘鎳楅崜浣稿灊妞ゆ牜鍋涚粻鎵磼鐎n偓绱╃憸鐗堝笚閸婅崵绱掑☉姗嗗剱闁哄應鏅滅换婵嬪閿濆棛銆愬Δ妤婁簼濞兼瑩濡撮幒鎾剁瘈婵﹩鍘鹃崢顏堟⒑閸撴彃浜濈紒璇插暣钘熼柣鎰劋閻撶喖鏌熼幆褍鑸归柛鏃€纰嶉妵鍕敇閳ュ啿濮峰銈忕畳娴滎剛妲愰幒妤婃晩闁伙絽鏈崳浼存⒑缂佹ü绶遍柛鐘崇〒缁鈽夊Ο閿嬵潔濠碘槅鍨辨竟鏇㈠疾閻樿钃熺€广儱顦导鐘绘煕閺囥劌浜愰柛瀣崌楠炴牗鎷呴崫銉ュЕ婵$偑鍊栫敮鎺楀磹瑜版帒姹叉い鎺戝閻撴稓鈧厜鍋撻悗锝庡墰琚f俊鐐€ч梽鍕偂閿熺姴钃熼柣鏃傚劋鐎氭氨鎲歌箛鏇烆棜闁秆勵殕閻撳啰鎲稿⿰鍫濈婵ǹ鍩栭崑鍕亜閹烘垵顏╃紒鐙€鍨堕弻銊╂偆閸屾稑顏�

 

Schema

 

<? 此文来自xml.com.cn的入门教程 :) 

?>

 

DTD曾经是体现XML精髓的武器,但不知细心的读者们注意到没有,现在DTD好象不大见了。怎么回事?DTD到底在XML中是举重若轻还是根本就无足轻重呀?其实,回答这个问题只需要大家想一想是不是Schema现在正频频露面。不错,聪明的读者一定猜到了,Schema和DTD的作用异曲同工,而现在的趋势是:DTD正逐渐被Schema所取代!

说起来,DTD源于SGML规范,同时也是XML1.0规范的重要组成部分,它可是描述XML文档结构的“正根儿”。但不可否认的是,它也有一些缺点,比如,它采用了非XML的语法规则、不支持多种多样的数据类型、扩展性较差等等。这些缺点最终使它面临四面楚歌的境地,以微软为首的众多公司提出了XML Schema,在保留并扩充了DTD原有的文档结构说明能力的同时,以期解决DTD与生俱来的种种问题。

事实上,Schema也是XML的一种应用,它是将DTD重新使用XML语言规范来定义。这从某种意义上讲,不正充分体现了我们前面所提到的XML自描述性的优点吗?可别小看了这个利用DTD把DTD改写成的Schema,它可具有许多“青出于蓝而胜于蓝”的优势。

  • 一致性
    学习DTD时,大家一定已经在抱怨DTD的书写结构和XML文件的结构仿佛有着天壤之别,后者清晰直观,前者复杂晦涩。Schema建立在XML之上,它的样子和一般的XML文件完全相同,使得XML达到了从内到外的完美统一。现在,读者不必再为了搞懂DTD而去重新学习,节省了宝贵的时间;另一方面,因为Schema本身也是一种XML,可以被现有的XML编辑制作工具所编辑、被XML语法分析器所解析、被XML应用系统所利用,既有投资得到了最大程度的保护。
  • 扩展性
    如果你只是一个文档编辑人员,平常只进行一些文档的操作或Web页面的设计,那么你可能对数据类型不太敏感。但是,如果你是一位程序员,每天都要和成堆的公式和程序打交道,那么如果有一天领导告诉你,改用一种没有定义数据类型的程序设计语言去开发一套应用系统,我想你很可能会跳起来:什么?没有定义数据类型!这么一来,什么整型、实型、布尔型、日期型统统混为一谈,所有的用户输入数据以及从数据库中取得的数据都要另外编写程序进行类型转换,还有错误检测……。天啊,还有比这更糟的吗?
    的确,没有数据类型,无形之中大大增加了程序员的开发难度和工作量。虽然DTD中也定义了一些数据类型,但那都是针对属性类型而定义的,而且类型非常有限。何况现在电子商务应用日趋火爆,交易过程中不可避免地会出现大量的数据转换,整型、实型、布尔型、日期型的数据层出不穷,DTD显然招架不住。好在Schema对DTD进行了扩充,引入了数据类型,很好地解决了这一问题。
  • 易用性
    XML Schema取代DTD的另一个原因要归结于DOM和SAX(关于DOM和SAX的概念将在后面章节中详细论述)。如果你了解DOM和SAX,那你肯定知道,作为一种XML API,DOM和SAX只是对XML实例文档有效,对于DTD则无能为力,你不可能期望通过DOM或SAX来判定一个元素的属性类型或者某个元素的子元素允许出现的次数(当然,这都是XML分析器的本职工作)。但是,一旦有了Schema,这个问题便不复存在,因为此时对于XML文档结构的描述已变成为Schema--一种“形式良好的”XML文档,用DOM和SAX去访问当然不在话下啦。
  • 规范性
    同DTD一样,Schema也提供了一套完整的机制以约束XML文档中置标的使用,但相比之下,后者基于XML,更具有规范性。Schema利用元素的内容和属性来定义XML文档的整体结构,如哪些元素可以出现在文档中、元素间的关系是什么、每个元素有哪些内容和属性、以及元素出现的顺序和次数等等,一目了然。
  • 互换性
    正如每个人都可定义自己的DTD一样,读者也可根据需要设计适合自己应用的Schema,并且可以同其他人交换彼此的Schema。利用Schema,我们能够书写XML文档,验证文档的合法性。另外,通过映射机制,还可以将不同的Schema进行转换,以实现更高层次的数据交换。例如微软的BizTalk Server,对此就有很好的支持。

通过这些优点的罗列,相信你已经对Schema的生命力深信不疑了。下一节里,我们就来回顾一下Schema的发展历程。

 

3.2.2.1 Schema 的简单实例

好了,上一节讲了很多Schema的优点和发展历程,除了要为Schema歌功颂德以外,就是要在大家脑海里建立一个基本概念:Schema是用XML规范改写的DTD,同时增加了一些扩充功能,使它具有DTD无以比拟的优势。不知道是不是有些读者正在后悔,前面花了这么多时间去学DTD,原来是在学一个可能要被淘汰的东东。其实,就象上一节里所讲的,DTD和Schema是一脉相承的,了解DTD可以帮助你更快更透彻地学习Schema。后面对于Schema语法的讲述也正是通过二者的对比来进行的,你可以从这种比较中慢慢体会Schema的优势所在。

下面,就让我们言归正传,看一看Schema长得什么样吧!不过先别忙,首先我们来看一个简单的例子。还记得我们的“联系人列表”文件吗?现在我们就把它作一个小小的改动,为“联系人列表”这个元素加一个“公司”属性,指明该列表所属的公司,修改后的XML文件如下:

<?xml version = "1.0" encoding="GB2312" standalone = "no"?>
<!DOCTYPE 联系人列表  SYSTEM "fclml.dtd">

<联系人列表 公司=“大地公司”>
    <联系人>
        <姓名>张三</姓名>
        <ID>001</ID>
        <公司>A公司</公司>
        <EMAIL>zhang@aaa.com</EMAIL>
        <电话>(010)62345678</电话>
        <地址>
            <街道>五街1234号</街道>
            <城市>北京市</城市>
            <省份>北京</省份>
            <ZIP>100001</ZIP>
        </地址>
    </联系人>

    <联系人>
        <姓名>李四</姓名>
        <ID>002</ID>
        <公司>B公司</公司>
        <EMAIL>li@bbb.org</EMAIL>
        <电话>(021)87654321</电话>
        <地址>
            <街道>南京路9876号</街道>
            <城市>上海</城市>
            <省份>上海</省份>
            <ZIP>200002</ZIP>
        </地址>
    </联系人>
</联系人列表>

相应的,它的DTD文件fclml.dtd也要作一点改动:

<?xml version="1.0" encoding="GB2312"?>

<!ELEMENT 联系人列表 (联系人)*>
<!ELEMENT 联系人 (姓名,ID,公司,EMAIL,电话,地址)>
<!ELEMENT 地址 (街道,城市,省份)>
<!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT ID (#PCDATA)>
<!ELEMENT 公司 (#PCDATA)>
<!ELEMENT EMAIL (#PCDATA)>
<!ELEMENT 电话 (#PCDATA)>
<!ELEMENT 街道 (#PCDATA)>
<!ELEMENT 城市 (#PCDATA)>
<!ELEMENT 省份 (#PCDATA)>
<!ATTLIST 联系人列表
    公司 CDATA #REQUIRED
>

同样的文档结构要用Schema来描述的话,可写做下面的样子。我们给这个文件取名fclmlschema.xml。也许你要问:"为什么以.xml作为扩展名,而不象DTD那样有个特殊的名字?"答案很明确,因为Schema本身就是XML文档实例,以.xml作为扩展名正是为了强调这一点。不过,这并不是说,就只能以.xml作为扩展名。如果你愿意,你完全可以给它取一个全新的名字,比如:.aaa、.schema、...,只要你的文件系统支持就行。

 

[1]<?xml version="1.0" encoding="GB2312" ?>
[2]<Schema xmlns="urn:schemas-microsoft-com:xml-data"
               xmlns:dt="urn:schemas-microsoft-com:datatypes">
[3]    <AttributeType name="公司"/>
[4]    <ElementType name= "姓名"/>
[5]    <ElementType name= "ID"/>
[6]    <ElementType name= "公司"/>
[7]    <ElementType name= "EMAIL"/>
[8]    <ElementType name= "电话" dt:type="fixed.14.4"/>
[9]    <ElementType name= "街道"/>
[10]  <ElementType name= "城市"/>
[11]  <ElementType name= "省份"/>
[12]  <ElementType name= "地址" content="eltOnly">
[13]       <element type= "街道" />
[14]       <element type= "省份" />
[15]       <element type= "城市" />
[16]  </ElementType>
[17]  <ElementType name= "联系人" content="eltOnly">
[18]       <element type= "姓名" />
[19]       <element type= "ID" />
[20]       <element type= "公司" />
[21]       <element type= "EMAIL" />
[22]       <element type= "电话" />
[23]       <element type= "地址" />
[24]  </ElementType>
[25]  <ElementType name= "联系人列表" content="eltOnly">
[26]       <element type= "联系人" />
[27]       <attribute type="公司"/>
[28]  </ElementType>
[29]</Schema>

此外,为了告诉语法分析器现在是在用fclmlschema.xml给XML文件client.xml规定的文件结构,需要把client.xml文件中的第二行改成:

<学生花名册 xmlns="x-schema:rosterschema.xml">

下面我们就来逐字逐句地分析一下这个fclmlschema.xml:

 1 是XML类型声明语句,指明该文档是一个XML文档,并且符合版本1.0规范。另外,该文档采用GB2312编码。 2 是Schema声明语句,它包含了Schema命名空间的声明。本例中用到了两个命名空间:一是xmlns="urn:schemas-microsoft-com:xml-data",它指定本文档是一个XML Schema文档;另一个是xmlns:dt="urn:schemas-microsoft-com:datatypes"

[3]是属性定义语句,它定义了属性“公司”。 [4]-[11]是元素定义语句,这里共定义了8个元素:姓名、ID、公司、EMAIL、电话、街道、城市、省份。其中为"电话"元素定义了数据类型:fixed.14.4。 [12]-[16]定义了本Schema的二级元素:地址,指明该元素包含三个子元素:街道、城市、省份。 [17]-[24]定义了本Schema的三级元素:联系人,它指明该元素包含六个子元素:姓名、ID、公司、EMAIL、电话、地址。 [25]-[28]定义了本Schema的顶级元素:联系人列表,指明该元素包含一个子元素:联系人,以及一个属性:公司。 [29]是结束标记语句,它指明该Schema的描述到此为止。

怎么样?简单吧。大概已经对XML有些造诣的广大读者不用看解释也能读懂这个Schema文件。下面,我们就来从整体上看一下XML Schema语法,下面给出的是XML Schema的DTD描述,相信已经熟悉DTD的你会有一种驾轻就熟的感觉。

<!ENTITY % datatypes "(entity | entities | enumeration | id | idref | idrefs | nmtoken | nmtokens | notation | string | bin.base64 | bin.hex | boolean | char | date | dateTime | dateTime.tz | fixed.14.4 | float | int | number | time | time.tz | i1 | i2 | i4 | r4 | r8 | ui1 | ui2 | ui4 | uri | uuid)"
>

<!-- *** 数据类型 **** -->
<!ELEMENT datatype (description)*>
<!ATTLIST datatype
dt:type %datatypes; #IMPLIED
xmlns:dt CDATA #FIXED "urn:schemas-microsoft-com:datatypes"
>
 
<!-- ***** 描述 ***** -->
<!ELEMENT description (#PCDATA) >
 
<!-- **** 元素引用 ***** -->
<!--附加限制: maxOccurs 必须是 1 or "*" -->
<!ELEMENT element (description)* >
<!ATTLIST element
type IDREF #REQUIRED
minOccurs CDATA #IMPLIED
maxOccurs CDATA #IMPLIED
>
 
<!-- **** 属性引用 ***** -->
<!ELEMENT attribute (description)* >
<!ATTLIST attribute
type IDREF #REQUIRED
default CDATA #IMPLIED
required (yes | no) "no"
>
 
<!-- **** 属性定义 ***** -->
<!ELEMENT AttributeType (datatype | description)* >
<!ATTLIST AttributeType
name ID #REQUIRED
default CDATA #IMPLIED
dt:type %datatypes; #IMPLIED
dt:values CDATA #IMPLIED
required (yes | no) #IMPLIED
xmlns:dt CDATA #FIXED "urn:schemas-microsoft-com:datatypes"
>
 
<!-- **** 元素定义 ***** -->
<!ELEMENT ElementType (datatype | description | AttributeType | attribute | element | group)* >
<!ATTLIST ElementType
name ID #REQUIRED
model (open | closed) #IMPLIED
content (empty | textOnly | eltOnly | mixed) #IMPLIED
order (one | seq | many) #IMPLIED
dt:type %datatypes; #IMPLIED
dt:values CDATA #IMPLIED
required (yes | no) #IMPLIED
xmlns:dt CDATA #FIXED "urn:schemas-microsoft-com:datatypes"
>
 
<!-- **** 分组 ***** -->
<!ELEMENT group (group | element | description)*>
<!ATTLIST group
minOccurs CDATA #IMPLIED
maxOccurs CDATA #IMPLIED
order (one | seq | many) #IMPLIED
>
 
<!-- **** Schema ***** -->
<!ELEMENT Schema (AttributeType | ElementType | description )* >
<!ATTLIST Schema
name CDATA #IMPLIED
xmlns:dt CDATA #FIXED "urn:schemas-microsoft-com:datatypes"
>

注意,和前面讲到的有规可循的XML语法的条条框框和DTD的定义方法不同,Schema还没有一个正式推荐标准。在这里,我们所讲的Schema的实现语法都是按照微软Internet Explorer 5.0所提供的支持。这个语法主要综合了W3C的两个Note:规范XML-Data (http://www.w3.org/TR/1998/NOTE-XML-data-0105/ )和文档内容描述DCD (http://www.w3.org/TR/NOTE-dcd ),并加入一些扩展。鉴于微软在业界的地位以及Internet Explorer 5.0的普及程度,该语法实现具有较强的适用性。

从下一节开始,我们将就Schema中的主要元素作详细分析。

Schema 文件的结构

在说到元素的定义方法之前,我们先来讲一下Schema文件的结构。其实,Schema文件和其它XML文件的样子非常相似,它是由一组元素构成的,其根元素是“Schema”。“Schema”元素是XML Schema中第一个出现的元素,用于表明该XML文档是一个Schema文档,相应的,“Schema”的结束标记一般在文档的末尾。这样,一个Schema的结构如下:

<Schema name="schema-name" xmlns="namespace" >
...
</Schema>

Schema具有两个属性:name指定该Schema的名称,而xmlns则指定该Schema包含的命名空间。注意,一个XML Schema文档中可以包含多个命名空间,比如下面的语句指定了三个命名空间:

<Schema name="mySchema"
        xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:myNS=http://www.xml_step_by_step.edu\ns.xml
>

第一个是xmlns="urn:schemas-microsoft-com:xml-data",它指定本文档是一个XML Schema文档;第二个是xmlns:dt="urn:schemas-microsoft-com:datatypes",它定义了在本文档中可以使用的数据类型;第三个是xmlns:myNS="http://www.xml_step_by_step.edu\ns.xml",它表明下面可能会用到在myNS中定义的元素或属性。

至于文件结构中的省略号,可以是关于元素的声明语句、也可以是关于属性的声明语句,一切听从你的实际需要。关于它们的使用方法,我们会在下面两个小节中详细讲述。

用Schema定义元素及其内容

在讲述Schema中和ETD定义相对应的种种定义方法之前,我们先来看看所涉及的三个Schema元素:ElementType、element、group。

  • ElementType元素

在Schema文档中使用ElementType来声明XML文件中会出现的元素,ElementType的语法表达如下:

<ElementType
    name="元素名"
    content="{ empty | textOnly | eltOnly | mixed }"
    dt:type="元素类型"
    order="{ one | seq | many }"
    model="{ open | closed }"
>

在ElementType的几个属性中,name的含义不言而喻,是所声明元素的名称,它是不可缺少的。content是ElementType的一个重要属性,它指明ElementType 所声明的元素是否为空、是否包含文本、是否包含子元素、还是既包含文本又包含子元素。dt:type指定该元素的数据类型,我们会在后面的小节中详细讨论。order指定该元素的子元素的排列顺序规则。最后,model指定该元素是否可以包含未在本Schema中定义的元素和属性,它主要用于其它Schema的引入,也就是其它“命名空间”的引入。“命名空间”的概念大家可能还比较生疏,这是我们下一节要讲的内容,现在你只要了解,在一个XML文件中能够同时使用几个不同的DTD或Schema定义。model可能的取值。open表明该元素可以包含其它未在XML Schema中定义的元素和属性;closed表明该元素只能包含在本XML Schema中定义过的元素和属性

缺省状态下,XML Schema的model取值"open",也就是说,该元素可以包含其它未在XML Schema中定义的元素和属性。但是,这并不意味着任何元素和属性都可在Schema中出现,允许出现的前提是这些"异类"元素和属性必须在单独的XML Schema中加以定义,并且必须在引用的它们的元素中以命名空间形式指定其出处。下面给出一个具体的示例。

<联系人>
        <姓名>张三</姓名>
        <ID>001</ID>
        <公司>A公司</公司>
        <EMAIL>zhang@aaa.com</EMAIL>
        <电话>(010)62345678</电话>
        <传真 xmlns="fax.xml">(010)62345678</传真>
        <地址>
            <街道>五街1234号</街道>
            <城市>北京市</城市>
            <省份>北京</省份>
            <ZIP>100001</ZIP>
        </地址>
</联系人>

本来fclmlschema.xml中并没有定义"传真"元素,但如果将"联系人"元素的的"model"属性设为"open",就可以在"联系人"中引用它,当然还必须指定"传真"元素所在的Schema文件"fax.xml"。"open"体现了XML Schema的可扩展性,而这是DTD所无法比拟的。

  • element元素

ElementType只是起到声明元素的作用,至于元素的内容究竟是什么,则要靠它的子元素element来说明。element的语法表达如下:

<element
    type="元素类型"
    [minOccurs="{ 0 | 1 }"]
    [maxOccurs="{ 1 | * }"]
>

element实际上是对该Schema中ElementType声明的引用,而具体引用什么元素类型,就要靠type属性指定了。type属性不可缺少,并且为了保证type指定的是已经声明过的元素,要求它的取值必须同某个ElementType中的name属性严格一致。至于其它两个属性倒是可有可无。minOccurs指定该元素在其父元素中出现的最小次数,缺省值为1,表明该元素至少出现一次;也可以取值为0,表明该元素是可选的,可以不出现。maxOccurs则指定了该元素出现的最大次数,缺省值同样为1,表明该元素至多出现一次;也可取值为“*”,表明该元素在XML实例文档中出现次数不受限制。
group元素

DTD中有成组的概念,相应的,Schema中也有“group”元素。它的语法表达类似element元素:

<group
    order="{one | seq | many}"
    [minOccurs="{ 0 | 1 }"]
    [maxOccurs="{ 1 | * }"]
>

和DTD的规定相同,组里的内容可以是元素,也可以是另一个子组。属性order指定该组中的元素或子组的顺序,minOccursmaxOccurs分别指定了该组在其父元素中出现的最小次数和最大次数。

下面,我们就开始对DTD和Schema对相同内容的不同定义方式进行一次大比较!

 

表现内容 DTD Schema 合法实例
空元素 <!ELEMENT a EMPTY> <ElementType name="a" content="empty"/> <a/> <a></a>
字符串 <!ELEMENT a (#PCDATA)> <ElementType name="a" content="textOnly"/> <a>
abcdefg
</a>
父元素 一个子元素 <!ELEMENT a (b)> <ElementType name="a" content="eltOnly">
  <element type="b"/></ElementType>
<a>
  <b/>
</a>
有顺序的
子元素
<!ELEMENT a (b, c)> <ElementType name="a" order="seq">
  <element type="b"/>
  <element type="c"/></ElementType>
<a>
  <b/>
  <c/>
</a>
OR或 <!ELEMENT a (b | c)> <ElementType name="a" order="one">
  <element type="b"/>
  <element type="c"/></ElementType>
<a>
  <b/>
</a>
<a>
  <c/>
</a>
任意顺序(或不出现)的子元素 <!ELEMENT a (b | c)*> <ElementType name="a" order="many">
  <element type="b"/>
  <element type="c"/></ElementType>
<a/>
<a>
  <b/>
</a>
<a>
  <c/>
</a>
<a>
  <b/>
  <c/>
</a>
<a>
  <c/>
  <b/>
</a>
可选子元素 <!ELEMENT a (b?)> <ElementType name="a" content="eltOnly">
  <element type="b" minOccurs="0" maxOccurs="1"/></ElementType>
<a/> <a>
  <b/>
</a>
"+"型重复元素 <!ELEMENT a (b+)> <ElementType name="a" content="eltOnly">
  <element type="b" minOccurs="1" maxOccurs="*"/></ElementType>
<a>
  <b/>
</a>
<a>
  <b/>
  <b/>
</a>
"*"型重复元素 <!ELEMENT a (b*)> <ElementType name="a" content="eltOnly">
  <element type="b" minOccurs="0" maxOccurs="*"/></ElementType>
<a/> <a>
  <b/>
</a>
<a>
  <b/>
  <b/>
</a>
成组元素 <!ELEMENT a (b,c)+> <ElementType name="a" content="eltOnly">
  <group order="seq" minOccurs="1" maxOccurs="*"/>
      <element type="b"/>
        <element type="c"/>
    </group>
</ElementType>
<a>
  <b/>
  <c/>
</a>
<a>
  <b/>
  <c/>

  <b/>
  <c/>
</a>
混合元素 <!ELEMENT a (#PCDATA | b | c)*> <ElementType name="a" content="mixed"/> 
  <element type="b"/>
  <element type="c"/></ElementType>
<a>
abcdefg
</a>
<a>
  abcdefg
  <b/>
</a>
<a>
  <b/>
  abcdefg
  <c/>
</a>
<a>
  abcd
  <c/>
  efg
</a>

 

3.2.2.4 用Schema定义元素属性

Schema中用来定义属性的元素有两个,AttributeType元素是声明属性的,attribute元素则是说明一个元素中究竟包含那些属性。

  • AttributeType元素

AttributeType元素也是Schema中的重要元素之一,用于定义该Schema文档中出现的属性类型。AttributeType的语法表达如下:

<AttributeType
  name="属性名"
  dt:type="属性类型"
  dt:values="枚举值列表"
  default="缺省值"
  required="{yes | no}"
>

 

下面我们来一个一个看看对于这些属性的规定:

name
name不言而喻,自然是所声明的属性类型的名称。注意,该属性是必须的。 

type
dt:type指定所声明属性的数据类型,它除了支持DTD中包含的全部十大数据类型外,还支持一些扩展属性,在下一小节会详细讲述。Schema中的十个基本属性与DTD中属性的对应关系请见下表:

Schema中基本类型 DTD中数据类型
string #PCDATA
enumeration ENUMERATED
id ID
idref IDREF
idrefs IDREFS
nmtoken NMTOKEN
nmtokens NMTOKENS
entity ENTITY
entities EMTITIES
notation NOTATION

注意,当dt:type取值为"enumeration"时,后面的dt:value必须列出所有可能的取值。

 

value
dt:value只有当dt:type取值"enumeration"时才有效,此时,dt:value需列出所有可能的取值。 

default
default指定该属性类型的缺省取值。default取值必须是有效的,例如,当dt:type取值"enumeration"时,default的取值必须来自dt:value所列出的值。 

required
required指定该属性对于引用它的元素是否是必须的。取值yes表明是必须的,取值no则表明并非必须。

我想大家一定还记得前面讲DTD时曾根据关于属性缺省值的规定将属性分为四类,在Schema中,是通过default属性和required属性来作这些规定的。看了下面这个列表就一目了然了。

 

属性类型 DTD定义方法 Schema定义方法 合法实例
必须赋值的属性 <!ATTLIST 天气 状况 (晴 | 阴 | 雨 | 雪) #REQUIRED> <AttributeType
  name="状况"
  dt:type="enumeration"
  dt:value="晴 阴 雨 雪"
  required="yes"
/>
<天气 状况="晴"/>
属性值可有可无的属性 <!ATTLIST 天气 状况 (晴 | 阴 | 雨 | 雪) #IMPLIED> <AttributeType
  name="状况"
  dt:type="enumeration"
  dt:value="晴 阴 雨 雪"
  required="no"
/>
<天气 状况="晴"/>
<天气/>
定义缺省值的属性 <!ATTLIST 天气 状况 (晴 | 阴 | 雨 | 雪) "晴"> <AttributeType
  name="状况"
  dt:type="enumeration"
  dt:value="晴 阴 雨 雪"
    default="晴"
  required="yes"
/>
<天气 状况="阴"/>
<天气/>
固定取值的属性 <!ATTLIST 天气 状况 (晴 | 阴 | 雨 | 雪) #FIXED> <AttributeType
  name="状况"
  dt:type="enumeration"
  dt:value="晴 阴 雨 雪"
    default="晴"
  required="no"
/>
<天气/>
  • attribute元素

AttributeType和attribute的关系与ElementType和element的关系相同,AttributeType只是起到声明属性的作用,而真正指明一个元素具有哪些属性还需依靠attribute元素。attribute的语法表达如下:

<attribute
    type="attribute-type"
    default="default-value"
    [required="{yes | no}"]
>

因为attribute实际上是对该Schema中AttributeType声明的引用,而具体引用什么属性类型,关键就要靠type属性了。type唯一指定了要引用的属性类型,因此其取值必须同某个AttributeType元素中name属性的取值严格一致。其它两个属性与AttributeType中相应属性的含义相同,default指定该属性类型的缺省取值,required指定该属性对于引用它的元素是否是必须的。如果和同一个属性相对应的AttributeType和attribute中都对default和required给出了定义,则在attribute中的取值具有更高的优先级。

最后,我们给出关于上面“天气”元素及其属性的一个完整的Schema定义:

<AttributeType
  name="状况"
  dt:type="enumeration"
  dt:value="晴 阴 雨 雪"
  required="yes"
/>

<ElementType name="天气" content="empty">
    <attribute type="状况"/>
</ElementType>

 

Schema的特色——扩展数据类型

Schema中共有23种扩展数据类型,包括bin.base64、bin.hex、boolean、char、date、dateTime、dateTime.tz、fixed.14.4、float、int、number、time、time.tz、i1、i2、i4、r4、r8、ui1、ui2、ui4、uri、uuid,已经可以覆盖相当广泛的应用。限于篇幅,这里只列表介绍几种最常用的类型。

类   型 解   释 举   例
boolean 布尔型:0 或 1, 其中0代表false,1代表true 0,1
char 单字符 “a”、“b”
time 时间类型,符合 ISO 8601格式, 无日期和时区部分。 08:16:18
date 日期类型,符合ISO 8601格式且无时间部分. 2000-06-01
dateTime 日期类型,符合ISO 8601格式,带可选时间部分但无时区部分,秒可精确到纳秒级。 2000-06-01T20:08:18
fixed.14.4 数值类型,同“number”类似,但精度上小数点前不超过14位,小数点后不超过4位 14.1234
float 实数类型,位数不受限制,可以包含符号位和小数位以及指数。取值范围从 1.7976931348623157E+308 至 2.2250738585072014E-308 .314159265358979E+1
int 数值类型, 可以包含符号位,但不含小数位和指数位 1, -10, 2566
number 数值类型,位数不限,可以包含符号位和小数位以及指数。取值范围从 1.7976931348623157E+308 至 2.2250738585072014E-308 12, 3.1415, -1.24E-10
uri 统一资源标识(URI)类型。 http://www.ics.
uci.edu

/pub/ietf/uri/

元素和属性的数据类型可以使用元素datatype来定义,这个元素是Schema中一个重要元素,也是Schema的一大特色。datatype的语法表达如下:

<datatype dt:type="datatype">

 

除此以外,还有另一种更直接的方法,是在元素ElementType和AttributeType之中利用dt:type属性。下面分别给出具体的示例:

1 ElementType:

datatype 

<ElementType name="a">
  <datatype dt:type=" float">
</ElementType>

dt:type

<ElementType name="a" dt:type="float"/>

2 AttributeType

datatype 

<AttributeType name ="b"/>
  <datatype dt:type="float"/></AttributeType>
<ElementType name="a">
  <attribute type="b"/>
</ElementType>

dt:type

<AttributeType name="b" dt:type="float"/>
<ElementType name="a">
  <attribute type="b"/>
</ElementType>

 

好了,现在我们结束这些枯燥的语法论述,来看个实际的例子:

<AttributeType name="更新时间">
    <datatype dt:type="dateTime"/>
</AttributeType>

<ElementType name="description"/>
<ElementType name="品牌" dt:type="string"/>
<ElementType name="价格" dt:type="int"/>
<ElementType name="是否全内置" dt:type="boolean"/>
<ElementType name="库存数量" dt:type="number"/>

<ElementType name="笔记本电脑" content="eltOnly">
    <attribute type="更新时间" />
    <element type="品牌" />
    <element type="价格" />
    <element type="是否全内置" />
    <element type="库存数量" />
</ElementType>


上面给出的是一个关于笔记本电脑的Schema定义,在这里,我们为笔记本电脑定义了一个属性--资料更新时间,数据类型定为dateTime;笔记本电脑涉及的元素有:品牌,因为它实际上是一个名称,所以定为string类型;价格,因为考虑到经销商不会小气到连几毛钱都不放过,所以数据类型定为int型;是否全内置,不言而喻自然是铁板钉钉的布尔型了;库存数量,因为考虑到经销上可能会大量囤积以谋取高利,故而选取范围较大的number类型。下面我们再给出一个XML示例文档,以便大家对数据类型有一个更加直观的认识。

<笔记本电脑 更新时间="2000-06-10T14:00:00">
    <品牌>ACER 518TE</品牌>
    <价格>22800</价格>
    <是否全内置>1</是否全内置>
    <库存数量>258000</库存数量>
</笔记本电脑>

 

可是,假设我们偏偏遇上了一个爱专牛角尖且极为小气的电脑经销商,他擅自将上面的实例文档加以改动挂在自己门口,于是就有下面的文档:

<笔记本电脑 更新时间="2000-06-10T14:00:00">
    <品牌>ACER 518TE</品牌>
    <价格>22800.21</价格>
    <是否全内置>1</是否全内置>
    <库存数量>258000</库存数量>
</笔记本电脑>

 

就在他自鸣得意于自己的精明时,我们的语法分析器却报警了:“价格”取值与定义不符!当然了,明明是int类型,又岂能再加上一个小数点?除非我们将上面的Schema中的“价格”定义作下列修改:

<ElementType name="价格" dt:type="fixed.14.4"/>


Schema中的注释

现在,Schema中的元素只剩下description没有介绍。description只能算是Schema中的一个配角,它可以嵌套在任何其它的Schema元素之中,为这些元素提供备注信息,类似于DTD中的注释。description中的信息不会被XML语法分析器所解析,但是可以为我们提供注释信息,并可以被XML工具或应用程序所解读。

举个简单的例子,假如你是某大学社区网站的技术人员,想在网上开辟一个"售车"栏目供毕业生出售自行车,而正好你刚刚学习过XML Schema,于是就用XML Schema写了一个Schema文档,并把它发布到了网上(可能这种应用在目前有点超前,不过,相信我吧,用不了多久这种应用就会风靡全球的)。可是,问题又来了,单凭这个文档别人怎么知道你是在求购自行车还是想出售自行车呢?不要着急,description前来帮忙。下面就是这个包含description的XML Schema片段:

<ElementType name="自行车" content="eltOnly">
    <description>出售自行车</description>
    <element type="车型"/>
    <element type="颜色"/>
    <element type="新旧程度"/>
    <element type="售价"/>
    <element type="联系电话"/>
</ElementType>


Schema的应用

 

由于XML Schema的种种优点,现在Schema取代DTD已成大势所趋。在这种情况下,国际上一些知名企业和组织审时度势,纷纷在战略上向XML Schema倾斜,提供对XML Schema的支持。其中最为典型的当然要数微软的BizTalk和xml.org组织的注册/资源库。更加值得一提的是,微软在其浏览器软件Internet Explorer 5.0中率先提供对Schema的支持,当然,因为最终的XML Schema标准尚未正式推出,因此微软支持的Schema也只是过渡性"标准",今后还会不断修改。

  • 微软的BizTalk

BizTalk是微软发起的电子商务schema库,配合的产品有微软的BizTalk服务器。它的结构是,各个商家定义自己的schema,定义好后将schema提交到bizTalk.org进行注册。BizTalk事先制定了一些标记供商家使用,每个Schema必须遵守义写规则,而且要有一些规定好的必要元素和属性,只有这样才能生成一个标准的BizTalk消息。用户可以注册和查找schema,当遇到某个BizTalk消息而不确定它的结构时可以在bizTalk.org找到它的schema。BizTalk 的框架结构还包括routing scheme,由message server来进行消息的异步发送,它的作用就是一个MOM (message oriented middleware),这样达到系统间的松耦合。

微软在今年4月份发布了BizTalk Server技术预览版,以及相应的开发工具包。它具有以下优点:

  • 稳定的文档交换:支持多种文档类型的发送和交换,包括XML、EDI(EDIFACT和X12)、纯文本文件等等。
  • 多网络传输协议支持:包括HTTP, HTTPS, FTP, SMTP, SMB (file transfer), Microsoft Message Queue Server (MSMQ) and Microsoft Exchange.
  • 可靠的安全性:提供加密、数字签名、公开密钥等技术,使得Internet上高保密性资料的传输具有很强的安全性。
  • 图形化的开发工具:内置BizTalk Editor和Mapper,前者可以方便快捷地创建和编辑XML文档,并可以将其他类型文档转换成XML,后者可以以图形化的方式完成XML转换,包括自动XSLT的生成。
  • 应用的集成:可以提供同企业现有的业务系统的集成,包括SAP R/3和EDI。
  • 跟踪和分析工具:提供分析报告。
  • 管理工具:通过图形化的BizDesk工具配置交易伙伴间的协议以及基于规则的内容驱动的数据交换。
  • 可编程性:允许开发者定制转换器、分析器以及安全组件。

关于BizTalk的相关网址是: http://www.biztalk.org/

  • xml.org的Schema注册/资源库

xml.org是另一个可注册的Schema库,它是由著名的国际组织OASIS管理并由OASIS组织成员——一些致力于产品独立数据交换系统的企业和机构提供赞助。通过xml.org,OASIS进行了XML应用信息的搜集、管理和发布,包括数据字典、Schema、命名空间和DTD。另一方面,企业机构和组织也可将自己制定的XML数据交换规范提交到xml.org,然后,企业用户或开发者在xml.org查找自己相关领域的规范,进而开发出在一定范围内能进行数据交换的应用系统。xml.org同BizTalk的一个重要区别在于它不要求具有BizTalk必须的元素。由于OASIS在业界所享有的声誉,xml.org自然而然地成为XML信息管理和发布的一个权威站点,一个于关于XML的业界门户站点。它的相关网址是:http://www.xml.org/

____________________________________________

<来源  xml.net.cn />

<日期  2001/01/15/>