鏂囨。瀹氫箟妯″瀷涓篨ML鏂囨。鎻愪緵浜嗚鑼冿紝DTD鐨勫紩鍏ヨ櫧鐒惰В鍐充簡XML鏂囨。鐨勮鑼冨寲闂锛屼絾瀹冩枃浠舵牸寮忕被鍨嬪拰XML鏂囦欢鏍煎紡绫诲瀷涓嶄竴鑷达紝鍚屾椂DTD鎻愪緵鐨勬暟鎹被鍨嬫湁闄愭湁鏃跺€欐棤娉曟弧瓒宠涓氱殑闇€姹傦紝鎵€浠ュ紩鍏ヤ簡Schema銆係chema妯″紡鍙互纭畾XML鏂囨。鐨勫厓绱犲拰灞炴€х殑缁撴瀯銆佸厓绱犵殑椤哄簭銆佸厓绱犲拰灞炴€х殑鏁版嵁鍊硷紝鏍规嵁鑼冨洿銆佹灇涓句互鍙婃牱寮忓尮閰嶇瓑銆?/p>

涓€銆丼chema鍒濊瘑
XML Schema璇█涔熻绉颁负XML Schema Definition (XSD)锛屽畠鐨勪綔鐢ㄦ槸瀹氫箟涓€浠絏ML鏂囨。鐨勫悎娉曠粍浠剁兢锛圶ML鏂囨。鐨勭粨鏋勶級锛屽氨鍍廌TD鐨勪綔鐢ㄤ竴鏍枫€?XML Schema浠ML璇█浣滀负鍩虹锛屼篃鍙互璇碭ML Schema鑷韩灏辨槸XML鐨勪竴绉嶅簲鐢ㄣ€?/p>
1銆丼chema浣滅敤
XML Schema鍜孌TD鐨勪綔鐢ㄤ竴鏍凤紝閮芥槸鐢ㄦ潵瀹氫箟涓€涓猉ML鏂囨。鐨勭粨鏋勭殑妯″紡锛岄偅涔堜负浠€涔堟湁浜咲TD杩樿鏈塜ML Schema鍛紵 鍥犱负锛孹ML Schema姣擠TD浣滅敤鏇村姞寮哄ぇ銆?/p>
Xml Schema 姣?DTD鐨勪紭瓒婃€э細
锛?锛夋ā寮忔槸鍙墿灞曠殑
锛?锛夋ā寮忔瘮 DTD 鍔熻兘鏇翠赴瀵屼笖鏇存湁鐢?br />
锛?锛夋ā寮忔槸鐢?XML 缂栧啓鐨?br />
锛?锛夋ā寮忔敮鎸佹暟鎹被鍨?br />
锛?锛夋ā寮忔敮鎸佸悕绉扮┖闂?br />
锛?锛変笉闇€瑕佸湪瀛︿範鍏朵粬鐨勮瑷€
锛?锛夊彲浠ョ洿鎺ヤ娇鐢╔ML缂栬緫鍣ㄦ潵缂栧啓XML Schema
锛?锛夊彲浠ョ洿鎺ヤ娇鐢╔ML瑙f瀽鍣ㄦ潵瑙f瀽XML Schema
锛?锛夊彲浠ヤ娇鐢╔ML DOM鏉ョ伒娲荤殑鎿嶄綔XML Schema
锛?0锛夊彲浠ヤ娇鐢╔SLT鎶€鏈潵杞崲XML Schema
2銆佸姣斿涔?/h3>
1.1 浣滅敤涓?/strong>
涓よ€呯浉鍚岋紝閮芥槸瀹氫箟浜嗕竴涓猉ML鏂囨。鐨勭粨鏋勭殑妯″紡銆?/p>
1.2 鐢ㄦ硶涓?/strong>
涓よ€呬綔鐢ㄧ浉鍚岋紝浣嗘槸璇硶涓婃湁浜涘尯鍒€係chema鏄疍TD鐨勬墿灞曪紝鍚屾牱鏀寔鍏冪礌鍜屽睘鎬х殑瀹氫箟锛屽苟涓斿畾涔夌殑璇硶鐩镐技锛屼絾Schema鍙互缁欏厓绱犲拰灞炴€ф坊鍔犵浉搴旂殑鏁版嵁绫诲瀷锛屽悓鏃惰繕寮曞叆浜嗗叏灞€鍜屽眬閮ㄥ厓绱犲0鏄庣殑璇硶锛屽彟澶栨牴鎹厓绱犲拰灞炴€х殑鏁版嵁鍐呭寮曞叆浜嗙畝鍗曠被鍨嬪拰澶嶆潅绫诲瀷銆?br />
鎵€璋撶殑绠€鍗曠被鍨?SimpleType)鍜屽鏉傜被鍨?ComplexType)锛屽畠浠湰韬苟涓嶆槸鍏蜂綋鐨勬暟鎹被鍨嬶紝瀹冧滑鍙槸瀵硅妭鐐规垨鑰呰嚜瀹氫箟绫诲瀷鐨勭被鍨嬩綔涓€涓娊璞$殑璇存槑銆?/p>
涔熷氨鏄Schema鐨勫紩鍏ヤ娇寰楁ā寮忕殑澹版槑鏇村姞绫讳技浜庢垜浠娇鐢ㄧ殑缂栫▼璇█銆?/p>
浜屻€佸疄渚嬭瑙?/h2>
2.1 Schema瀹炰緥
娓呭崟1锛歎ser.xml鏂囨。缁撴瀯
<?xml version="1.0"锛?gt;
<鐢ㄦ埛鍒楄〃>
<鐢ㄦ埛>
<鐢ㄦ埛鍚?gt;xx</鐢ㄦ埛鍚?gt;
<瀵嗙爜>123456</瀵嗙爜>
<鐢ㄦ埛绫诲瀷>1</鐢ㄦ埛绫诲瀷>
</鐢ㄦ埛>
</鐢ㄦ埛鍒楄〃>
娓呭崟2锛氫娇鐢ㄥ叏灞€缁勪欢褰㈠紡鏉ュ畾涔塖chema锛孶ser.xsd
<!-- 浣跨敤鍏ㄥ眬缁勪欢褰㈠紡瀹氫箟 -->
<?xml version='1.0' encoding='utf-8'?>
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' elementFormDefault='qualified' attributeFormDefualt='unqualified'>
<xs:element name='鐢ㄦ埛鍒楄〃' type='userlist'/>
<xs:complexType name='userlist'><!-- 浣跨敤complexType澹版槑璇ョ被鍨嬩负澶嶅悎绫诲瀷鐨勫厓绱?-->
<xs:sequence><!-- 浣跨敤sequence璇存槑涓嬮潰鐨勫厓绱犲繀椤绘寜椤哄簭鍦╔ML鏂囨。涓樉绀?-->
<xs:element name='鐢ㄦ埛' type='user'/>
</xs:sequence>
</xs:complexType>
<xs:complexType name='user'>
<xs:sequence>
<xs:element name='鐢ㄦ埛鍚? type='user'/>
<xs:element name='瀵嗙爜' type='user'/>
<xs:element name='鐢ㄦ埛绫诲瀷' type='user'/>
</xs:sequence>
</xs:complexType>
</xs:schema>
娓呭崟3锛氫娇鐢ㄥ眬閮ㄥ舰寮忓畾涔塖chema锛孶ser.xsd
<!-- 浣跨敤灞€閮ㄥ舰寮忓畾涔?-->
<?xml version='1.0' encoding='utf-8'?>
<xs:schema xmlns:xs='http://www.nishishui.org/2000/XML Schema' elementFormDefault='qualified' attributeFormDefualt='unqualified'>
<xs:element name='鐢ㄦ埛鍒楄〃'>
<xs:complexType>
<xs:sequence>
<xs:element name='鐢ㄦ埛'>
<xs:complexType>
<xs:sequence>
<xs:element name='鐢ㄦ埛鍚? type='xs:string'/>
<xs:element name='瀵嗙爜' type='xs:string'/>
<xs:element name='鐢ㄦ埛绫诲瀷' type='xs:integer'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
娓呭崟2鍜屾竻鍗?鐨勯兘瀹氫箟浜哢ser.xsd锛屽畠浠殑浣滅敤鏄浉鍚岀殑锛岄兘鏄负浜嗛獙璇乆ML鏂囨。鐨勫悎娉曟€э紝浣嗗畾涔夌殑鏂规硶涓嶅悓锛屾竻鍗?鏄娇鐢ㄥ叏灞€缁勪欢鐨勫舰寮忓畾涔夛紝鑰屾竻鍗?浣跨敤鐨勫眬閮ㄥ舰寮忓畾涔夛紝鍏蜂綋鐨勫尯鍒鐪嬩笅鏂囥€?/p>
2.2 鍩烘湰鐢ㄦ硶
涓婃枃涓垜浠垎鍒粠浣滅敤鍜岀敤娉曚笂瀵筍chema鍜孌TD杩涜浜嗗姣斿垎鏋愶紝Schema鍜孌TD鏈€澶х殑鍖哄埆鍦ㄤ簬Schema寮曞叆浜嗘暟鎹被鍨嬶紝鍏跺畠鐨勫鍏冪礌鍜屽睘鎬х殑澹版槑绛夌被浼间簬DTD锛屽湪涓嬮潰璁ㄨ鏃跺氨涓嶅啀璇﹁堪銆?/p>
Schema鍩烘湰鍐呭瀵煎浘锛?/p>

2.2.1 寮曠敤璇硶
褰撲竴涓ā寮忔枃浠跺缓绔嬪ソ浠ュ悗锛屽彲浠ョ敤瀹冩潵楠岃瘉鏌愪竴涓猉ML鏂囨。鐨勬湁鏁堟€э紝涔熷氨鏄妫€楠屾煇涓猉ML鏂囨。鏄惁閬靛惊浜嗘ā寮忔枃浠剁殑瀹氫箟銆?閭d箞锛孹ML鏂囨。鎬庝箞鏉ュ紩鐢ㄤ竴涓ā寮忔枃妗e憿锛?
Schema妯″瀷鐨勫紩鐢ㄦ洿绫讳技浜庡墠闈㈡墍璇寸殑鍛藉悕绌洪棿鐨勫簲鐢ㄦ柟娉曪紝鍏蜂綋瀹炰緥濡備笅锛?/p>
<?xml version='1.0' encoding='utf-8'?>
<鐢ㄦ埛鍒楄〃 xmlns:xsi=http://www.nishishui.org/2000/XMLSchema xsi:noNamespaceSchemaLocation='user.xsd'><!-- 寮曠敤user.xsd -->
<鐢ㄦ埛>
<鐢ㄦ埛鍚?gt;鎴戞槸璋?lt;/鐢ㄦ埛鍚?gt;
<瀵嗙爜>123456</瀵嗙爜>
<鐢ㄦ埛绫诲瀷>1</鐢ㄦ埛绫诲瀷>
</鐢ㄦ埛>
</鐢ㄦ埛鍒楄〃>
2.2.2 鍏冪礌绫诲瀷
锛?锛夋寜鐓у唴瀹圭殑涓嶅悓鍒嗕负绠€鍗曞拰澶嶆潅鍏冪礌锛屽垎鍒娇鐢╯impleType鍜宑omplexType鏍囩ず銆?/p>
绠€鍗曞厓绱狅細鍏冪礌涓唴瀹瑰彧鑳芥槸鏂囨湰锛屼笉鍖呭惈鍏跺畠鐨勫厓绱犲拰灞炴€с€?/p>
<?xml version='1.0' encoding='utf-8'?>
<xs:schema xmlns:xs='http://www.nishishui.org/2000/XML Schema' elementFormDefault='qualified' attributeFormDefualt='unqualified'>
<xs:element name='age'>
<xs:simpleType><!-- 浣跨敤鍏抽敭瀛梥impleType澹版槑绠€鍗曞厓绱?-->
<!--restriction鍏抽敭瀛楃粨鍚坢inInclusive鍜宮axInclusive鎺у埗浜哫ML涓厓绱犲彲鎺ュ彈鐨勫€艰寖鍥翠负0~100-->
<xs:restriction base="xs:integer">
<xs:minInclusive value='0'/>
<xs:maxInclusive value='100'/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
澶嶆潅鍏冪礌锛氬厓绱犱腑鍖呭惈鍏跺畠鐨勫厓绱犲拰灞炴€с€傚畠鏈夊洓绉嶇被鍨嬶紝鍒嗗埆鏄┖鍏冪礌銆佸彧鍖呭惈鍏朵粬鍏冪礌銆佸彧鍖呭惈姝f枃銆佸寘鍚鏂囧張鍖呭惈鍏朵粬鍏冪礌銆?/p>
<?xml version='1.0' encoding='utf-8'?>
<xs:schema xmlns:xs='http://www.nishishui.org/2000/XML Schema' elementFormDefault='qualified' attributeFormDefualt='unqualified'>
<xs:element name='age'>
<xs:complexType><!-- 浣跨敤鍏抽敭瀛梒omplexType澹版槑澶嶆潅鍏冪礌 -->
<!--sequence鎺у埗XML鍐呭涓厓绱犲嚭鐜扮殑椤哄簭-->
<xs:sequence>
<!-- 瀹氫箟鍏蜂綋鐨勫厓绱狅紝杩欎簺閮芥槸绠€鍗曞厓绱?->
<xs:element name='firstname' type='xs:string'/>
<xs:element name='lastname' type='xs:string'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
锛?锛夋寜鐓у畾涔変綅缃彲鍒嗕负灞€閮ㄥ拰鍏ㄥ眬鍏冪礌銆?br />
鍏ㄥ眬鍏冪礌锛?lt;element>鍏冪礌鐨勭埗鍏冪礌蹇呴』鏄?lt;schema>锛?br />
灞€閮ㄥ厓绱狅細灞€閮ㄥ厓绱犲0鏄庡彧鑳藉嚭鐜板湪澶嶆潅绫诲瀷锛?lt;complexType>鍏冪礌锛夊畾涔夊唴閮ㄣ€傚嵆<element>鍏冪礌鐨勭埗鍏冪礌鍙兘鏄?lt;all>銆?lt;choice>鎴?lt;sequence>鍏冪礌銆?/p>
<?xml version='1.0' encoding='utf-8'?>
<xs:schema xmlns:xs='http://www.nishishui.org/2000/XML Schema' elementFormDefault='qualified' attributeFormDefualt='unqualified'>
<xs:element name='鐢ㄦ埛' type='user'/><!-- 鍏ㄥ眬鍏冪礌 -->
<xs:element name='鐢ㄦ埛鍚? type='xs:string'/><!-- 鍏ㄥ眬鍏冪礌 -->
<xs:element name='瀵嗙爜' type='xs:string'><!-- 鍏ㄥ眬鍏冪礌 -->
<xs:complexType name='user'>
<!--sequence鎺у埗XML鍐呭涓厓绱犲嚭鐜扮殑椤哄簭-->
<xs:sequence>
<!-- 瀹氫箟鍏蜂綋鐨勫厓绱狅紝杩欎簺閮芥槸绠€鍗曞厓绱?->
<!-- 瀹氫箟灞€閮ㄥ厓绱狅紝浣跨敤ref鍏抽敭瀛楀紩鐢紝骞朵娇鐢╩inOccurs鍜宮axOccurs鍒跺畾鍏冪礌鍑虹幇鐨勬渶灏戝拰鏈€澶氱殑娆℃暟-->
<xs:element ref='鐢ㄦ埛鍚? minOccurs='0' maxOccurs='1'/><!-- 灞€閮ㄥ厓绱?->
<xs:element ref='瀵嗙爜' minOccurs='0' maxOccurs='1'/><!-- 灞€閮ㄥ厓绱?->
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
鍒版杩欑瘒鍏充簬璇﹁ВXML涓殑妯″紡Schema鐨勬枃绔犲氨浠嬬粛鍒拌繖浜?鏇村鐩稿叧XML Schema鍐呭璇锋悳绱㈣剼鏈箣瀹朵互鍓嶇殑鏂囩珷鎴栫户缁祻瑙堜笅闈㈢殑鐩稿叧鏂囩珷锛屽笇鏈涘ぇ瀹朵互鍚庡澶氭敮鎸佽剼鏈箣瀹讹紒