




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、11 DTDDTD和和XML Schema XML Schema 22/50回顧回顧 u掌握掌握XML語法規(guī)則語法規(guī)則u了解了解XML技術(shù)體系技術(shù)體系u了解了解XML應(yīng)用方向應(yīng)用方向u問題問題 什么是什么是XML,為什么要用為什么要用XML XML的內(nèi)容有哪些的內(nèi)容有哪些 順序:從文檔上面到下面順序:從文檔上面到下面 什么叫有效的什么叫有效的XML33/50目標(biāo)目標(biāo)u理解文檔類型定義(理解文檔類型定義(DTD)u理解命名空間理解命名空間u理解理解Schemau使用使用Schema和和DTD定義定義XML文檔文檔44/50概述概述u 為什么要驗(yàn)證為什么要驗(yàn)證XMLu 什么叫有效的什么叫有效的XM
2、L 如果一個(gè)如果一個(gè)XML文檔規(guī)定其文檔類型和數(shù)據(jù)結(jié)構(gòu)的文檔規(guī)定其文檔類型和數(shù)據(jù)結(jié)構(gòu)的DTD或者或者Schema,并且與之關(guān)聯(lián),并且校驗(yàn)正確,則此文檔是有效的并且與之關(guān)聯(lián),并且校驗(yàn)正確,則此文檔是有效的u 良好與有效關(guān)系良好與有效關(guān)系 格式良好的格式良好的XML文檔,不一定是有效的文檔,不一定是有效的XML文檔。文檔。 有效的有效的XML文檔,則一定是格式良好的文檔,則一定是格式良好的XML文檔。文檔。 說明:在格式良好的基礎(chǔ)上說明:在格式良好的基礎(chǔ)上,再看是否滿足企業(yè)的特殊要求再看是否滿足企業(yè)的特殊要求u XML驗(yàn)證技術(shù)驗(yàn)證技術(shù) DTD Schema55/50文檔類型定義文檔類型定義DTDD
3、TD uDTD(Document Type Definition,文檔類型定義),文檔類型定義)是一套標(biāo)記的語法規(guī)則,它定義了元素、子元素、屬性是一套標(biāo)記的語法規(guī)則,它定義了元素、子元素、屬性及其取值,規(guī)定了用戶在及其取值,規(guī)定了用戶在DTD關(guān)聯(lián)的關(guān)聯(lián)的XML文檔中可以使文檔中可以使用什么標(biāo)記、各個(gè)標(biāo)記出現(xiàn)的順序以及標(biāo)記的層次關(guān)系,用什么標(biāo)記、各個(gè)標(biāo)記出現(xiàn)的順序以及標(biāo)記的層次關(guān)系,并定義了實(shí)體。并定義了實(shí)體。u對于一個(gè)對于一個(gè)DTD的定義,最關(guān)鍵的在于它內(nèi)部的元素和屬的定義,最關(guān)鍵的在于它內(nèi)部的元素和屬性的定義。一個(gè)性的定義。一個(gè)DTD文檔實(shí)際上就是元素定義的集合,文檔實(shí)際上就是元素定義的集合
4、,而元素可能包含屬性,也可能不包含屬性。而元素可能包含屬性,也可能不包含屬性。66/50使用使用DTDDTD定義定義XMLXML元素元素 要點(diǎn):包含符號和數(shù)據(jù)類型兩部分。要點(diǎn):包含符號和數(shù)據(jù)類型兩部分。符號符號符號類型符號類型描述描述示例示例?問號問號表示該對象可以出現(xiàn),但表示該對象可以出現(xiàn),但只能出現(xiàn)一次只能出現(xiàn)一次(菜鳥(菜鳥?) *星號星號表示該對象允許出現(xiàn)任意表示該對象允許出現(xiàn)任意多次,也可以是零次多次,也可以是零次(愛好(愛好*)+加號加號表示該對象最少出現(xiàn)一次,表示該對象最少出現(xiàn)一次,可以出現(xiàn)多次可以出現(xiàn)多次(成員(成員+)()括號括號用來給元素分組用來給元素分組(古龍(古龍|金庸
5、金庸|梁羽生)梁羽生),(王朔(王朔|余杰)余杰),毛毛毛毛|豎條豎條表明在列出的對象中選擇表明在列出的對象中選擇一個(gè)一個(gè)(男人(男人|女人)女人),逗號逗號表示對象必須按指定的順表示對象必須按指定的順序出現(xiàn)序出現(xiàn) (西瓜(西瓜,蘋果蘋果,香蕉)香蕉)77/50元素內(nèi)容的類型元素內(nèi)容的類型內(nèi)容內(nèi)容解釋解釋#PCDATA表明該元素可以包含任何字符數(shù)據(jù),但是不能在其中包含任何子元表明該元素可以包含任何字符數(shù)據(jù),但是不能在其中包含任何子元素。素。假設(shè)我們定義元素學(xué)員:假設(shè)我們定義元素學(xué)員: 則下面的實(shí)例是正確的:則下面的實(shí)例是正確的: 努力學(xué)習(xí)是好學(xué)員努力學(xué)習(xí)是好學(xué)員而下面的實(shí)例就是錯(cuò)誤的:而下面的
6、實(shí)例就是錯(cuò)誤的: 努力努力學(xué)習(xí)學(xué)習(xí)是好學(xué)員是好學(xué)員因?yàn)樵谄渲邪俗釉匾驗(yàn)樵谄渲邪俗釉?。一般如果定義元素的一般如果定義元素的CONTENT為為#PCDATA,最好在其中只加入純,最好在其中只加入純文本字符數(shù)據(jù)文本字符數(shù)據(jù)EMPTY如果一個(gè)元素的如果一個(gè)元素的CONTENT被聲明為被聲明為EMPTY的話,表示該元素不能的話,表示該元素不能包含任何子元素和文本,僅可以使用屬性。包含任何子元素和文本,僅可以使用屬性。ANY表示該元素中可以包含任何在表示該元素中可以包含任何在DTD中定義的元素內(nèi)容中定義的元素內(nèi)容其他類型其他類型最通常的情況是一個(gè)元素本身是由其他元素的集合構(gòu)成的最通常的情況是一
7、個(gè)元素本身是由其他元素的集合構(gòu)成的88/50示例示例99/50使用使用DTDDTD定義定義XMLXML元素的屬性元素的屬性 u說明:說明: 回顧定義表時(shí)字段的定義?;仡櫠x表時(shí)字段的定義。 對比學(xué)習(xí)對比學(xué)習(xí)XML很重要。很重要。1010/50 屬性類型及其含義屬性類型及其含義 類型類型具體的含義說明具體的含義說明CDATA這個(gè)類型表明該屬性只能包含字符數(shù)據(jù)這個(gè)類型表明該屬性只能包含字符數(shù)據(jù)ID該屬性的取值必須是唯一的,在一個(gè)文檔內(nèi)兩個(gè)該屬性的取值必須是唯一的,在一個(gè)文檔內(nèi)兩個(gè)ID屬性的值不能一樣屬性的值不能一樣IDREF、IDREFS 這個(gè)屬性的值實(shí)際上就像這個(gè)屬性的值實(shí)際上就像C+中的指針一
8、樣,它是一個(gè)指向文檔中其他地方聲明的中的指針一樣,它是一個(gè)指向文檔中其他地方聲明的ID值,所以,如果在具體的文檔中該屬性的取值和它所指向的值,所以,如果在具體的文檔中該屬性的取值和它所指向的ID值不匹配的話,值不匹配的話,就會返回錯(cuò)誤。就會返回錯(cuò)誤。IDREFS和和IDREF類似,但是可以具有由空格分隔的多個(gè)引用類似,但是可以具有由空格分隔的多個(gè)引用ENTITY、ENTITIESENTITY屬性的值必須對應(yīng)一個(gè)在屬性的值必須對應(yīng)一個(gè)在DTD文檔內(nèi)聲明的但還沒有分析過的實(shí)體。文檔內(nèi)聲明的但還沒有分析過的實(shí)體。ENTITIES屬性和屬性和ENTITY類似,不同的是它可以包含多個(gè)實(shí)體,每一個(gè)實(shí)體類似
9、,不同的是它可以包含多個(gè)實(shí)體,每一個(gè)實(shí)體之間可以用空格進(jìn)行分隔。需要注意的是實(shí)體包括普通實(shí)體、外部實(shí)體、參數(shù)之間可以用空格進(jìn)行分隔。需要注意的是實(shí)體包括普通實(shí)體、外部實(shí)體、參數(shù)實(shí)體和外部參數(shù)實(shí)體??梢园褜?shí)體理解為程序設(shè)計(jì)語言中的變量實(shí)體和外部參數(shù)實(shí)體??梢园褜?shí)體理解為程序設(shè)計(jì)語言中的變量NMTOKE、NMTOKENSNMTOKEN是是CDATA的一個(gè)子集,它所使用的字符必須是字母、數(shù)字、句點(diǎn)、破的一個(gè)子集,它所使用的字符必須是字母、數(shù)字、句點(diǎn)、破折號、下劃線或冒號。折號、下劃線或冒號。NMTOKENS和和NMTOKEN類似,不同之處在于它可以類似,不同之處在于它可以包含多個(gè)值,每個(gè)值之間用空格
10、進(jìn)行分隔包含多個(gè)值,每個(gè)值之間用空格進(jìn)行分隔NOTATION NOTATION的值必須引用已在的值必須引用已在DTD文檔其他地方聲明過的某注解的名稱文檔其他地方聲明過的某注解的名稱 NOTATION(enumerated)該屬性的值必須匹配該屬性的值必須匹配NOTATION名稱列表中的某個(gè)名稱。比如,我們已經(jīng)存在兩個(gè)名稱列表中的某個(gè)名稱。比如,我們已經(jīng)存在兩個(gè)NOTATION,一個(gè)為,一個(gè)為beauty,一個(gè)為,一個(gè)為beast;我們可以定義一個(gè)屬性類型為;我們可以定義一個(gè)屬性類型為NOTATION(beauty|beast)Enumerated該屬性幾乎和該屬性幾乎和C+中的枚舉變量一樣,我
11、們事先定義好一些值,該屬性的值必須匹中的枚舉變量一樣,我們事先定義好一些值,該屬性的值必須匹配所列出的這些值。比如現(xiàn)在有值為美麗、溫柔、純潔、智慧,該屬性的類型配所列出的這些值。比如現(xiàn)在有值為美麗、溫柔、純潔、智慧,該屬性的類型就可以表現(xiàn)為(美麗就可以表現(xiàn)為(美麗|溫柔溫柔|純潔純潔|智慧),實(shí)際內(nèi)容文檔必須從這些值中取一個(gè),智慧),實(shí)際內(nèi)容文檔必須從這些值中取一個(gè),值之間用值之間用“|”進(jìn)行分隔進(jìn)行分隔 1111/50約束的四種形式約束的四種形式 值值含義含義#REQUIRED用來告訴用來告訴XML解析程序,該元素的所有實(shí)例都必須有該屬解析程序,該元素的所有實(shí)例都必須有該屬性的值,就像數(shù)據(jù)表
12、中某一個(gè)字段為性的值,就像數(shù)據(jù)表中某一個(gè)字段為NOT NULL一樣一樣#IMPLIED表示如果該元素的實(shí)例中沒有指定該元素的值的話,就忽表示如果該元素的實(shí)例中沒有指定該元素的值的話,就忽略該屬性,就像在數(shù)據(jù)表中某一個(gè)字段的值可以為略該屬性,就像在數(shù)據(jù)表中某一個(gè)字段的值可以為NULL一樣一樣#FIXED value表示包含該屬性的元素實(shí)例必須在指定列出的值中表示包含該屬性的元素實(shí)例必須在指定列出的值中比如一個(gè)屬性名稱為學(xué)員:學(xué)員比如一個(gè)屬性名稱為學(xué)員:學(xué)員 CDATA #FIXED 張三張三“ 表示屬性值只能取表示屬性值只能取“張三張三”Defaultvalue為屬性提供一個(gè)默認(rèn)的值。為屬性提供
13、一個(gè)默認(rèn)的值。比如一個(gè)屬性名稱為學(xué)員:學(xué)員比如一個(gè)屬性名稱為學(xué)員:學(xué)員CDATA 張三張三如果在該屬性的實(shí)例中沒有包含這個(gè)屬性的話,解析器就如果在該屬性的實(shí)例中沒有包含這個(gè)屬性的話,解析器就認(rèn)為該屬性的值就是認(rèn)為該屬性的值就是“張三張三”,如果在該屬性的實(shí)例中,如果在該屬性的實(shí)例中包含了這個(gè)屬性并賦值了的話,就采用這個(gè)賦值包含了這個(gè)屬性并賦值了的話,就采用這個(gè)賦值1212/50示例示例1313/50 DTD DTD與與XMLXML文檔關(guān)聯(lián)形式文檔關(guān)聯(lián)形式 u 一個(gè)一個(gè)DTD文件可以與多個(gè)文件可以與多個(gè)XML文檔聯(lián)系起來。這樣,這些文檔聯(lián)系起來。這樣,這些XML文文檔就具有相同的檔就具有相同的D
14、TD模板,其元素、元素屬性、元素排列順序、模板,其元素、元素屬性、元素排列順序、元素內(nèi)容都必須符合元素內(nèi)容都必須符合DTD定義的格式。該定義的格式。該DTD文檔可以根據(jù)用戶文檔可以根據(jù)用戶的實(shí)際需求創(chuàng)建,以適應(yīng)特定的應(yīng)用業(yè)務(wù)領(lǐng)域。的實(shí)際需求創(chuàng)建,以適應(yīng)特定的應(yīng)用業(yè)務(wù)領(lǐng)域。u 將將DTD與與XML文檔關(guān)聯(lián)的方式有三種:文檔關(guān)聯(lián)的方式有三種: 使用內(nèi)部使用內(nèi)部DTD 使用外部使用外部DTD 使用公共使用公共DTDu XML解析器將使用解析器將使用DTD來解析來解析XML文檔。文檔。XML文檔應(yīng)該通過指令文檔應(yīng)該通過指令告訴解析器到哪里去尋找告訴解析器到哪里去尋找DTD。u XML文檔類型聲明出現(xiàn)在
15、文檔類型聲明出現(xiàn)在XML文檔的序言部分,以字符串文檔的序言部分,以字符串“!DOCTYPE”開始,然后是根元素的名字,最后會依據(jù)不同的開始,然后是根元素的名字,最后會依據(jù)不同的DTD使用方式而有所不同。使用方式而有所不同。u 下面的語法是下面的語法是DTD在在XML文檔中的聲明方法:文檔中的聲明方法:1414/50使用內(nèi)部使用內(nèi)部DTDDTD !DOCTYPE 家庭家庭 1515/50使用外部使用外部DTDDTD u如果某個(gè)如果某個(gè)DTD是共享的,即開放給多個(gè)是共享的,即開放給多個(gè)XML文檔作為公文檔作為公共文檔,那么這些共文檔,那么這些XML文檔應(yīng)該使用外部文檔應(yīng)該使用外部DTD。如果采。如
16、果采用外部用外部DTD的話,就需要有兩個(gè)文檔,第一個(gè)文檔就是的話,就需要有兩個(gè)文檔,第一個(gè)文檔就是關(guān)于關(guān)于DTD的文檔,第二個(gè)文檔就是遵守的文檔,第二個(gè)文檔就是遵守DTD格式的內(nèi)容格式的內(nèi)容文檔。實(shí)際上,我們可以建立無窮多個(gè)遵守該文檔。實(shí)際上,我們可以建立無窮多個(gè)遵守該DTD格式格式的文檔。的文檔。u在在XML文檔中關(guān)聯(lián)外部文檔中關(guān)聯(lián)外部DTD的語法格式為:的語法格式為:1616/50外部外部DTDDTD示例示例1717/50使用公共使用公共DTDDTD u有些組織(例如有些組織(例如W3C)和企業(yè)將其所定義的)和企業(yè)將其所定義的DTD公布公布出來,供需要的開發(fā)人員使用和參考。使用這些出來,供
17、需要的開發(fā)人員使用和參考。使用這些DTD的的XML文檔即使用了公共的文檔即使用了公共的DTD模板。其語法格式為:模板。其語法格式為: u DTD名稱與名稱與XML名稱有所不同,可以包含字母、數(shù)字、空格等。名稱有所不同,可以包含字母、數(shù)字、空格等。如果一個(gè)如果一個(gè)DTD是一個(gè)是一個(gè)ISO標(biāo)準(zhǔn),那么標(biāo)準(zhǔn),那么DTD名稱應(yīng)該以字符串名稱應(yīng)該以字符串“ISO”開始。如果一個(gè)非開始。如果一個(gè)非ISO組織同意該組織同意該DTD,那么其名稱以,那么其名稱以“+”開始。開始。如果沒有標(biāo)準(zhǔn)化組織同意該如果沒有標(biāo)準(zhǔn)化組織同意該DTD,那么其名稱以,那么其名稱以“-”開始。初始化開始。初始化字符串后面是一個(gè)雙斜杠字
18、符串后面是一個(gè)雙斜杠“/”,接著是,接著是DTD所有者的名稱,然后所有者的名稱,然后又是雙斜杠又是雙斜杠“/”,接著是描述該,接著是描述該DTD的文字,最后還是一個(gè)雙斜的文字,最后還是一個(gè)雙斜杠杠“/”,跟著,跟著ISO639語言標(biāo)識符。比如,我們在前面學(xué)習(xí)過的定語言標(biāo)識符。比如,我們在前面學(xué)習(xí)過的定義過渡型義過渡型XHTML1.0的的DOCTYPE為:為:1818/50使用使用DTDDTD定義定義XMLXML實(shí)體實(shí)體 u內(nèi)部實(shí)體:內(nèi)部實(shí)體:u外部實(shí)體外部實(shí)體 &write;1919/50命名空間命名空間 u當(dāng)我們建立當(dāng)我們建立XML應(yīng)用的時(shí)候,會為具體的行業(yè)應(yīng)用創(chuàng)建應(yīng)用的時(shí)候,會為具
19、體的行業(yè)應(yīng)用創(chuàng)建特定的特定的DTD,規(guī)定可用的元素。有時(shí)會出現(xiàn)下面的情況,規(guī)定可用的元素。有時(shí)會出現(xiàn)下面的情況-兩個(gè)同名的元素在不同的地方可能會有不同的含義。兩個(gè)同名的元素在不同的地方可能會有不同的含義。u命名空間(命名空間(Namespace)-對于每一套特定應(yīng)用的對于每一套特定應(yīng)用的DTD,給它一個(gè)獨(dú)一無二的標(biāo)志來代表,如果在,給它一個(gè)獨(dú)一無二的標(biāo)志來代表,如果在XML文文件中使用件中使用DTD中定義的元素,需將中定義的元素,需將DTD的標(biāo)志和元素名、的標(biāo)志和元素名、屬性連在一起使用,相當(dāng)于指明了元素來自什么地方,屬性連在一起使用,相當(dāng)于指明了元素來自什么地方,這樣就不會和其他同名元素混淆
20、了這樣就不會和其他同名元素混淆了u。在。在XML中,采用現(xiàn)成的、在全球范圍唯一的中,采用現(xiàn)成的、在全球范圍唯一的“域名域名”作為命名空間,即用作為命名空間,即用URL作為作為XML的命名空間。的命名空間。xmlns:前綴前綴= 命名空間命名空間URI 2020/50命名空間示例命名空間示例2121/50命名空間示例命名空間示例 客戶端網(wǎng)頁編程客戶端網(wǎng)頁編程 成都朗沃信息技術(shù)有限公司成都朗沃信息技術(shù)有限公司肖繼潮肖繼潮機(jī)械工業(yè)出版社機(jī)械工業(yè)出版社2005年年50050 JavaScript權(quán)威指南權(quán)威指南 老外老外 Apress 20042222/50XML Schema XML Schema
21、uXML Schema是用一套預(yù)先規(guī)定的是用一套預(yù)先規(guī)定的XML元素和屬性創(chuàng)元素和屬性創(chuàng)建的,這些元素和屬性定義了建的,這些元素和屬性定義了XML文檔的結(jié)構(gòu)和內(nèi)容模文檔的結(jié)構(gòu)和內(nèi)容模式。式。 XML Schema規(guī)定規(guī)定XML文檔實(shí)例的結(jié)構(gòu)和每個(gè)元文檔實(shí)例的結(jié)構(gòu)和每個(gè)元素素/屬性的數(shù)據(jù)類型。屬性的數(shù)據(jù)類型。 uSchema相對于相對于DTD的明顯好處是,的明顯好處是,XML Schema文檔文檔本身也是本身也是XML文檔,而不是像文檔,而不是像DTD一樣使用自成一體的一樣使用自成一體的語法。這就方便了用戶和開發(fā)者,因?yàn)榭梢允褂孟嗤恼Z法。這就方便了用戶和開發(fā)者,因?yàn)榭梢允褂孟嗤墓ぞ邅硖幚砉ぞ?/p>
22、來處理XML Schema和其他和其他XML信息,而不必專信息,而不必專門為門為Schema使用特殊工具。使用特殊工具。Schema簡單易懂,懂得簡單易懂,懂得XML語法規(guī)則的人都可以立刻理解它。語法規(guī)則的人都可以立刻理解它。Schema的概念的概念提出已久,但提出已久,但W3C的標(biāo)準(zhǔn)最近才出來,相應(yīng)的應(yīng)用支的標(biāo)準(zhǔn)最近才出來,相應(yīng)的應(yīng)用支持尚未完善,但采用持尚未完善,但采用Schema已成為已成為XML發(fā)展的一個(gè)趨發(fā)展的一個(gè)趨勢。勢。2323/50SchemaSchema和和DTDDTD的區(qū)別的區(qū)別 u XML從從SGML中繼承了中繼承了DTD,并用它來定義內(nèi)容的模型,驗(yàn)證和組織元素。,并用它
23、來定義內(nèi)容的模型,驗(yàn)證和組織元素。同時(shí),它也有很多局限:同時(shí),它也有很多局限:DTD不遵守不遵守XML語法;語法;DTD不可擴(kuò)展;不可擴(kuò)展;DTD不支持命名空間的應(yīng)用;不支持命名空間的應(yīng)用;DTD沒有提供強(qiáng)大的數(shù)據(jù)類型支持,只能表示很簡單的數(shù)據(jù)類型。沒有提供強(qiáng)大的數(shù)據(jù)類型支持,只能表示很簡單的數(shù)據(jù)類型。u Schema完全克服了這些弱點(diǎn),使得基于完全克服了這些弱點(diǎn),使得基于Web的應(yīng)用系統(tǒng)交換的應(yīng)用系統(tǒng)交換XML數(shù)據(jù)更數(shù)據(jù)更為容易。下面是它所展現(xiàn)的一些新特性:為容易。下面是它所展現(xiàn)的一些新特性:Schema完全基于完全基于XML語法,不需要再學(xué)習(xí)特殊的語法;語法,不需要再學(xué)習(xí)特殊的語法;Sch
24、ema能用處理能用處理XML文檔的工具處理,而不需要特殊的工具;文檔的工具處理,而不需要特殊的工具;Schema大大擴(kuò)充了數(shù)據(jù)類型,支持大大擴(kuò)充了數(shù)據(jù)類型,支持booleans、numbers、dates and times、URIs、integers、decimal numbers和和real numbers等;等;Schema支持原型,也就是元素的繼承。如:我們定義了一個(gè)支持原型,也就是元素的繼承。如:我們定義了一個(gè)“聯(lián)系人聯(lián)系人”數(shù)據(jù)數(shù)據(jù)類型,然后可以根據(jù)它產(chǎn)生類型,然后可以根據(jù)它產(chǎn)生“朋友聯(lián)系人朋友聯(lián)系人”和和“客戶聯(lián)系客戶聯(lián)系”兩種數(shù)據(jù)類型;兩種數(shù)據(jù)類型;Schema支持屬性組。我們
25、一般聲明一些公共屬性,然后可以應(yīng)用于所有的元支持屬性組。我們一般聲明一些公共屬性,然后可以應(yīng)用于所有的元素,屬性組允許把元素、屬性關(guān)系放于外部定義、組合;素,屬性組允許把元素、屬性關(guān)系放于外部定義、組合;開放性。原來的開放性。原來的DTD只能有一個(gè)只能有一個(gè)DTD應(yīng)用于一個(gè)應(yīng)用于一個(gè)XML文檔,現(xiàn)在可以有多個(gè)文檔,現(xiàn)在可以有多個(gè)Schema運(yùn)用于一個(gè)運(yùn)用于一個(gè)XML文檔。文檔。2424/50思考思考uSchema更好更好,為什么還要學(xué)習(xí)為什么還要學(xué)習(xí)DTD? 目前還有很多開源框架使用的是目前還有很多開源框架使用的是DTD 簡單簡單,清晰。清晰。 熟悉熟悉DTD,能夠讀懂能夠讀懂Schema報(bào)錯(cuò)
26、信息報(bào)錯(cuò)信息 如:如:驗(yàn)證驗(yàn)證ss01.xml.file:/e:/LOVODB/PPT2008/43/xml02/ss01.xml:8,13: Element lastname is not valid for content model: (firstname|lastname)XML文檔文檔ss01.xml無效無效(1 errors)uSchema 目前越來越多的框架由目前越來越多的框架由DTD驗(yàn)證改為了驗(yàn)證改為了Schema驗(yàn)證驗(yàn)證 Schemal已經(jīng)成為一種發(fā)展趨勢已經(jīng)成為一種發(fā)展趨勢2525/50XML SchemaXML Schema基礎(chǔ)概念基礎(chǔ)概念 1 1u 預(yù)定義類型預(yù)定義類型
27、u 派生類型派生類型XML Schema中常用的預(yù)定義類型中常用的預(yù)定義類型數(shù)據(jù)類型數(shù)據(jù)類型描述描述string表示字符串表示字符串Boolean布爾型布爾型decimal代表特定精度的數(shù)字代表特定精度的數(shù)字float表示單精度表示單精度32位浮點(diǎn)數(shù)位浮點(diǎn)數(shù)double表示雙精度表示雙精度64位浮點(diǎn)數(shù)位浮點(diǎn)數(shù)duration表示持續(xù)時(shí)間表示持續(xù)時(shí)間 dateTime代表特定的時(shí)間代表特定的時(shí)間 time代表特定的時(shí)間,但是是每天重復(fù)的代表特定的時(shí)間,但是是每天重復(fù)的date代表日期代表日期 hexBinary代表十六進(jìn)制數(shù)代表十六進(jìn)制數(shù)anyURI代表一個(gè)代表一個(gè)URI,用來定位文件,用來定位
28、文件NOTATION代表代表NOTATION類型類型2626/50XML SchemaXML Schema基礎(chǔ)概念基礎(chǔ)概念2 2uSchema元素:簡單類型和復(fù)雜類型元素:簡單類型和復(fù)雜類型uXML Schema規(guī)范中將元素分為兩種類型:規(guī)范中將元素分為兩種類型: 簡單類型元素簡單類型元素:簡單類型元素只能包含字符內(nèi)容。這些字符可以簡單類型元素只能包含字符內(nèi)容。這些字符可以被約束為特殊的預(yù)定義類型或派生類型。例如,可以指定一個(gè)被約束為特殊的預(yù)定義類型或派生類型。例如,可以指定一個(gè)簡單元素的內(nèi)容必須是日期、整數(shù)、字符串或者僅僅是一個(gè)字簡單元素的內(nèi)容必須是日期、整數(shù)、字符串或者僅僅是一個(gè)字符或者一
29、系列字符。符或者一系列字符。 復(fù)雜類型元素復(fù)雜類型元素:復(fù)雜類型元素是包含子元素內(nèi)容或者屬性的元素復(fù)雜類型元素是包含子元素內(nèi)容或者屬性的元素 2727/50XML SchemaXML Schema文檔基本結(jié)構(gòu)文檔基本結(jié)構(gòu) u一個(gè)簡單的一個(gè)簡單的XML文檔文檔note.xml 尹老師尹老師 肖老師肖老師 提醒提醒 本周末不要忘記提醒我參加回憶本周末不要忘記提醒我參加回憶2828/50XMLSchemaXMLSchema文檔基本結(jié)構(gòu)文檔基本結(jié)構(gòu)u在在W3C XML schema規(guī)范中規(guī)定:所有的規(guī)范中規(guī)定:所有的Schema文文檔都使用檔都使用作為其根元素。因此,所有的作為其根元素。因此,所有的X
30、ML schema文檔都應(yīng)該是如下的結(jié)構(gòu):文檔都應(yīng)該是如下的結(jié)構(gòu):u元素可以包含一些屬性。一個(gè)元素可以包含一些屬性。一個(gè)XML schema聲明看起來經(jīng)常以如下的形式出現(xiàn):聲明看起來經(jīng)常以如下的形式出現(xiàn): .2929/50XMLSchemaXMLSchema文檔基本結(jié)構(gòu)文檔基本結(jié)構(gòu)u在在W3C XML schema規(guī)范中規(guī)定:所有的規(guī)范中規(guī)定:所有的Schema文文檔都使用檔都使用作為其根元素。因此,所有的作為其根元素。因此,所有的XML schema文檔都應(yīng)該是如下的結(jié)構(gòu):文檔都應(yīng)該是如下的結(jié)構(gòu): .3030/50XMLSchemaXMLSchema文檔基本結(jié)構(gòu)文檔基本結(jié)構(gòu)u元素可以包含一些
31、屬性。一個(gè)元素可以包含一些屬性。一個(gè)XML schema聲明看起來經(jīng)常以如下的形式出現(xiàn):聲明看起來經(jīng)常以如下的形式出現(xiàn):.schema中用到的元素和數(shù)據(jù)類型(中用到的元素和數(shù)據(jù)類型(schema、element、complexType、sequence、string、boolean等)來自于等)來自于“/2001/XMLSchema”命名空間,同時(shí),它指定來自與該命名空間的元素和數(shù)據(jù)類型必須用命名空間別名命名空間,同時(shí),它指定來自與該命名空間的元素和數(shù)據(jù)類型必須用命名空間別名“xsd:”做前綴。做前綴。 指示該指示該schema定義的元素(定義的元素(note、
32、to、from、heading、body)來自于來自于“http:/”命名空間。命名空間。 指示默認(rèn)的命名空間是指示默認(rèn)的命名空間是“http:/” 要求element使用的命名空間必須是targetNamespace,它的作用是對元素起“限定與非限定”使用,意思是在文檔范例中要求采用命名空間前綴。 3131/50SchemaSchema示例示例u u u u u u u u u u u u u 3232/50uuu 尹老師尹老師u 肖老師肖老師u 提醒提醒u 本周末請?zhí)嵝盐覅⒓有侣劙l(fā)布會本周末請?zhí)嵝盐覅⒓有侣劙l(fā)布會u3333/50 Schema Schema文檔中出現(xiàn)的元素標(biāo)記文檔中出現(xiàn)的元
33、素標(biāo)記 元素類型元素類型描述描述schema包含一個(gè)已經(jīng)定義的包含一個(gè)已經(jīng)定義的schemaelement聲明一個(gè)元素聲明一個(gè)元素attribute聲明一個(gè)屬性聲明一個(gè)屬性simpleType定義一個(gè)簡單類型,它決定了元素和屬性值的約束和相關(guān)信息定義一個(gè)簡單類型,它決定了元素和屬性值的約束和相關(guān)信息complexType定義一個(gè)復(fù)合類型,它決定了一組元素和屬性值的約束和相關(guān)信息定義一個(gè)復(fù)合類型,它決定了一組元素和屬性值的約束和相關(guān)信息group把一組元素聲明組合在一起,以便它們能夠一起被復(fù)合類型應(yīng)用把一組元素聲明組合在一起,以便它們能夠一起被復(fù)合類型應(yīng)用attributeGroup把一組屬性聲
34、明組合在一起,以便它們能夠一起被復(fù)合類型應(yīng)用把一組屬性聲明組合在一起,以便它們能夠一起被復(fù)合類型應(yīng)用simpleContent應(yīng)用于應(yīng)用于complexType,對它的內(nèi)容進(jìn)行約束和擴(kuò)展等,對它的內(nèi)容進(jìn)行約束和擴(kuò)展等choice允許唯一的一個(gè)元素從一個(gè)組中被選擇允許唯一的一個(gè)元素從一個(gè)組中被選擇list從一個(gè)特定數(shù)據(jù)類型的集合中選擇定義一個(gè)簡單類型元素從一個(gè)特定數(shù)據(jù)類型的集合中選擇定義一個(gè)簡單類型元素union從一個(gè)特定簡單數(shù)據(jù)類型的集合中選擇定義一個(gè)簡單類型元素從一個(gè)特定簡單數(shù)據(jù)類型的集合中選擇定義一個(gè)簡單類型元素unique定義一個(gè)屬性或元素值,它必須在一個(gè)特定范圍內(nèi)定義一個(gè)屬性或元素值,
35、它必須在一個(gè)特定范圍內(nèi)sequence給一組元素一個(gè)特定的序列給一組元素一個(gè)特定的序列restriction定義一個(gè)約束條件定義一個(gè)約束條件3434/50使用使用XML SchemaXML Schema定義定義XMLXML文檔結(jié)構(gòu)文檔結(jié)構(gòu)u最簡單的最簡單的Schema文檔文檔u含子元素的含子元素的Schema文檔文檔 u含子元素和孫元素的含子元素和孫元素的Schema文檔文檔 u定義相同子元素的數(shù)量定義相同子元素的數(shù)量 u定義可選項(xiàng)的子元素定義可選項(xiàng)的子元素 u自定義簡單類型自定義簡單類型 u定義屬性定義屬性 3535/50最簡單的最簡單的SchemaSchema文檔文檔 u 首先,我們寫出一
36、個(gè)最簡單的首先,我們寫出一個(gè)最簡單的XML文檔文檔hello.xml: Hello World!u 下面我們看分析定義這個(gè)下面我們看分析定義這個(gè)XML文檔。這個(gè)文檔。這個(gè)XML文檔只有一個(gè)根元文檔只有一個(gè)根元素素greeting,而且該元素不含屬性,無子元素,內(nèi)容是字符串,它,而且該元素不含屬性,無子元素,內(nèi)容是字符串,它是一個(gè)典型的簡單元素,其類型為預(yù)定義類型是一個(gè)典型的簡單元素,其類型為預(yù)定義類型xsd:string。定義元。定義元素的語法為:素的語法為: u 那么,定義那么,定義XML文檔文檔hello.xml的的XML Schema文檔(文檔(hello.xsd)就是:就是: 3636
37、/50含子元素的含子元素的SchemaSchema文檔文檔 u 假設(shè)實(shí)例文檔是如下的假設(shè)實(shí)例文檔是如下的customer.xml:朗沃教育朗沃教育成都市人民東路成都市人民東路88號物資大廈五樓號物資大廈五樓u 分析實(shí)例文檔,我們可以發(fā)現(xiàn),分析實(shí)例文檔,我們可以發(fā)現(xiàn),元素含有兩個(gè)子元素,它是元素含有兩個(gè)子元素,它是一個(gè)復(fù)雜類型的元素,所以我們在一個(gè)復(fù)雜類型的元素,所以我們在Schema文檔中采用文檔中采用complexType來定來定義該元素。義該元素。元素的兩個(gè)子元素元素的兩個(gè)子元素和和是兩個(gè)是兩個(gè)簡單元素,二者一次出現(xiàn),我們用簡單元素,二者一次出現(xiàn),我們用sequence表示子元素依次出現(xiàn)的
38、順序。表示子元素依次出現(xiàn)的順序。因此,定義該實(shí)例文檔的因此,定義該實(shí)例文檔的XML Schema文檔文檔customer.xsd為:為:3737/50含子元素和孫元素的含子元素和孫元素的SchemaSchema文檔文檔 u現(xiàn)在我們給出一個(gè)更復(fù)雜的文檔(現(xiàn)在我們給出一個(gè)更復(fù)雜的文檔(customer.xml):):朗沃教育朗沃教育四川四川成都成都人民東路人民東路88號物資大廈無路號物資大廈無路u在這個(gè)實(shí)例文檔中,我們將地址分解成幾個(gè)子元素。為此,我們需要一個(gè)更加復(fù)雜一點(diǎn)的在這個(gè)實(shí)例文檔中,我們將地址分解成幾個(gè)子元素。為此,我們需要一個(gè)更加復(fù)雜一點(diǎn)的Schema文檔文檔(address.xsd):
39、):3838/50含子元素和孫元素的含子元素和孫元素的SchemaSchema文檔文檔 u 我們還可以采用我們還可以采用ref元素來重新編寫這個(gè)元素來重新編寫這個(gè)Schema文檔文檔address2.xsd 朗沃教育朗沃教育 四川四川 成都成都 人民東路人民東路88號物資大廈無路號物資大廈無路 3939/50定義相同子元素的數(shù)量定義相同子元素的數(shù)量 u 先看這個(gè)簡單的訂購數(shù)據(jù)實(shí)例文檔先看這個(gè)簡單的訂購數(shù)據(jù)實(shí)例文檔order.xmlAccounting BookTaxation Booku 假設(shè)假設(shè)元素,即每次的訂購書目不能超過元素,即每次的訂購書目不能超過10種,那該怎么寫這個(gè)種,那該怎么寫這
40、個(gè)Schema文檔呢?這里要用到文檔呢?這里要用到的的maxOccurs屬性。定義這個(gè)實(shí)例文檔的屬性。定義這個(gè)實(shí)例文檔的XML Schema文檔(文檔(order.xsd)為:)為:u 第第6行中的行中的maxOccurs屬性為屬性為10,代表,代表orderItem元素可以最大有元素可以最大有10個(gè)。如果不設(shè)個(gè)。如果不設(shè)定元素個(gè)數(shù),則可以用定元素個(gè)數(shù),則可以用maxOccurs=unbounded來定義。來定義。u 類似,如果要定義最小值,可以使用類似,如果要定義最小值,可以使用minOccurs,例如:,例如:u maxOccurs和和minOccurs這兩個(gè)屬性的缺省值都是這兩個(gè)屬性的缺
41、省值都是1。4040/50定義可選項(xiàng)的子元素定義可選項(xiàng)的子元素 u假如上面的訂書數(shù)據(jù)中,可以用書名或者書號任意一種訂購,則實(shí)例文檔可能如下(假如上面的訂書數(shù)據(jù)中,可以用書名或者書號任意一種訂購,則實(shí)例文檔可能如下(order2.xml):):Accounting Book7-5058-3496-7u這時(shí),用這時(shí),用XML Schema文檔描述的話,我們就需要使用文檔描述的話,我們就需要使用choice元素。下面的代碼(元素。下面的代碼(order2.xsd)就是)就是描述該描述該XML文檔的文檔的XML Schema文檔:文檔:4141/50定義可選項(xiàng)的子元素定義可選項(xiàng)的子元素 u稍微修改一下
42、訂書數(shù)據(jù)的實(shí)例文檔(稍微修改一下訂書數(shù)據(jù)的實(shí)例文檔(order3.xml):):Accounting Book27-5058-3496-7u這里假定這里假定值為值為1時(shí),缺省。如何修改時(shí),缺省。如何修改Schema文檔呢?文檔呢?order3.xsd4242/50自定義簡單類型自定義簡單類型 u 如果預(yù)定義類型還不能滿足要求,怎么辦呢?下面學(xué)習(xí)自定義簡如果預(yù)定義類型還不能滿足要求,怎么辦呢?下面學(xué)習(xí)自定義簡單類型。單類型。XML的擴(kuò)展性充分體現(xiàn)在這里。的擴(kuò)展性充分體現(xiàn)在這里。u 例如有如下的實(shí)例文檔例如有如下的實(shí)例文檔order4.xml:7-5058-3496-75u 這里,這里,ID是一個(gè)
43、標(biāo)準(zhǔn)的是一個(gè)標(biāo)準(zhǔn)的ISBN編碼,我們?nèi)绾味x這個(gè)編碼,我們?nèi)绾味x這個(gè)ISBN編碼呢?編碼呢?4343/50自定義簡單類型自定義簡單類型u 重新寫重新寫Schema文檔文檔order4.xsd4444/50自定義簡單類型自定義簡單類型u假如我們事先確定好假如我們事先確定好ID只有只有3個(gè),即只有個(gè),即只有3個(gè)個(gè)ISBN是可選的,那怎么辦?我們可以用是可選的,那怎么辦?我們可以用enumeration元素來進(jìn)行列舉。元素來進(jìn)行列舉。4545/50自定義簡單類型自定義簡單類型u再來看訂購量再來看訂購量quantity的值,如果我們設(shè)定其的值,如果我們設(shè)定其值必須在值必須在110之間,該怎么辦呢?可
44、以這些自之間,該怎么辦呢?可以這些自定義一個(gè)簡單類型。定義一個(gè)簡單類型。u其中,其中,minInclusive、maxInclusive分別代表分別代表該類型的取值范圍。該類型的取值范圍。4646/50自定義簡單類型自定義簡單類型u最終修改后的最終修改后的Schema文檔如下(文檔如下(order4-1.xsd):):4747/50定義屬性定義屬性 u 上面的上面的order.xml實(shí)例文檔中實(shí)例文檔中id變?yōu)樽優(yōu)榈囊粋€(gè)屬性:的一個(gè)屬性: u 對此,我們在對此,我們在Schema文檔中采用一個(gè)文檔中采用一個(gè)attribute來定義(來定義(order.xsd):):空元素空元素u 那么,實(shí)例文
45、檔中該屬性值是必須的還是可有可無的呢?我們可以這樣限制:那么,實(shí)例文檔中該屬性值是必須的還是可有可無的呢?我們可以這樣限制:u u 這里我們將這里我們將id屬性類型作為一種自定義數(shù)據(jù)類型屬性類型作為一種自定義數(shù)據(jù)類型idType。而且,用。而且,用attribute元素的元素的use屬性來定義是否是必須的屬性。屬性來定義是否是必須的屬性。required是必須值,是必須值,optional是可選值,是可選值,prohibited是無屬性值。那么對于屬性的缺省值,我們怎么定義呢?例如:是無屬性值。那么對于屬性的缺省值,我們怎么定義呢?例如: u 我們還可以用我們還可以用attribute元素的另一個(gè)屬性元素的另一個(gè)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中獸醫(yī)基礎(chǔ)知到課后答案智慧樹章節(jié)測試答案2025年春黑龍江農(nóng)業(yè)工程職業(yè)學(xué)院(松北校區(qū))
- 廣東江門幼兒師范高等??茖W(xué)?!读餍形琛?023-2024學(xué)年第一學(xué)期期末試卷
- 上海第二工業(yè)大學(xué)《廣聯(lián)達(dá)軟件實(shí)訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 河北地質(zhì)大學(xué)《執(zhí)業(yè)醫(yī)師考試實(shí)踐技能培訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 關(guān)于墨汁容器造型設(shè)計(jì)問卷調(diào)查
- 外網(wǎng)排水施工方案
- 橋梁施工方案編制計(jì)劃
- 2025年中考語文一輪復(fù)習(xí):文學(xué)類文本閱讀 講義
- 天津市河西區(qū)2024-2025學(xué)年高一上學(xué)期期末質(zhì)量調(diào)查數(shù)學(xué)試題(解析版)
- 河北省邢臺市2024-2025學(xué)年高二上學(xué)期期末英語測試試題【含答案】
- 2025年河南中煙工業(yè)限責(zé)任公司大學(xué)生招聘筆試高頻重點(diǎn)提升(共500題)附帶答案詳解
- 社會責(zé)任內(nèi)審評估報(bào)告表
- 農(nóng)村土地流轉(zhuǎn)合同范本
- 個(gè)人借款分期還款合同
- 道德與法治研修日志
- 船舶起重吊裝作業(yè)安全方案
- 2023年佛山市三水區(qū)樂平鎮(zhèn)鎮(zhèn)屬國有企業(yè)招聘筆試真題
- T-GXAS 395-2022 蒜頭果栽培技術(shù)規(guī)程
- 品管圈PDCA改善案例-降低高?;颊咭归g如廁跌倒發(fā)生率
- 2024年電梯銷售工作計(jì)劃(三篇)
- 涼山州 2024 年教師綜合業(yè)務(wù)素質(zhì)測試試卷初中物理
評論
0/150
提交評論