




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第3 3章章 有效的有效的xmlxml文檔之文檔之dtddtd規(guī)范規(guī)范dtddtd基本概念基本概念3.1內(nèi)部和外部內(nèi)部和外部dtddtd3.2 dtd dtd對元素的聲明對元素的聲明3.3 dtd dtd對屬性的聲明對屬性的聲明3.4 實(shí)體的聲明與引用實(shí)體的聲明與引用3.5規(guī)范性規(guī)范性僅僅是僅僅是xml語言的基本語法,沒有語言的基本語法,沒有對對xml文件怎樣組織數(shù)據(jù)進(jìn)行具體的限制。文件怎樣組織數(shù)據(jù)進(jìn)行具體的限制。在某些系統(tǒng)中,如果不對在某些系統(tǒng)中,如果不對xml怎樣組織數(shù)怎樣組織數(shù)據(jù)進(jìn)行合理的約束,盡管寫出據(jù)進(jìn)行合理的約束,盡管寫出xml文件沒文件沒有任何語法錯(cuò)誤(是規(guī)范的),但此有任何語
2、法錯(cuò)誤(是規(guī)范的),但此xml文件對系統(tǒng)而言是沒有實(shí)際價(jià)值的。文件對系統(tǒng)而言是沒有實(shí)際價(jià)值的。 本章講解有效的本章講解有效的xml文件文件 . 對對xml的數(shù)據(jù)結(jié)構(gòu)進(jìn)行限制有兩種方式:的數(shù)據(jù)結(jié)構(gòu)進(jìn)行限制有兩種方式:使用文檔類型定義(使用文檔類型定義(document type definition,dtd)和)和xml schema模式。模式。 一個(gè)規(guī)范的一個(gè)規(guī)范的xml文件如果和某個(gè)文件如果和某個(gè)dtd文文件相關(guān)聯(lián),并遵守該件相關(guān)聯(lián),并遵守該dtd文件規(guī)定的約束文件規(guī)定的約束條件,就稱之為條件,就稱之為有效的有效的xml文件文件。 3.1 dtd3.1 dtd基本概念基本概念對對xml文檔所
3、作的規(guī)范和約定被稱為文檔所作的規(guī)范和約定被稱為dtd,也,也就是文檔類型定義??梢园丫褪俏臋n類型定義??梢园裠td看作是編寫某類看作是編寫某類xml文檔的一個(gè)模板。文檔的一個(gè)模板。在一個(gè)在一個(gè)dtd中,具體規(guī)定了引用該中,具體規(guī)定了引用該dtd的的xml文檔可使用哪些標(biāo)記、父元素中能夠包括哪些子文檔可使用哪些標(biāo)記、父元素中能夠包括哪些子元素、各個(gè)元素出現(xiàn)的先后順序、元素可包含的元素、各個(gè)元素出現(xiàn)的先后順序、元素可包含的屬性、元素和屬性值的數(shù)據(jù)類型,以及可使用的屬性、元素和屬性值的數(shù)據(jù)類型,以及可使用的實(shí)體及符號規(guī)則等。實(shí)體及符號規(guī)則等。dtd的分類的分類 一份一份dtd實(shí)際上是若干條有關(guān)元素、
4、屬實(shí)際上是若干條有關(guān)元素、屬性、實(shí)體等約束和聲明語句的集合,這些性、實(shí)體等約束和聲明語句的集合,這些語句可以包含在語句可以包含在xml文檔內(nèi)部,被稱為內(nèi)文檔內(nèi)部,被稱為內(nèi)部部dtd; 也可以獨(dú)立保存為一個(gè)文件,而稱為外也可以獨(dú)立保存為一個(gè)文件,而稱為外部部dtd,然后再將,然后再將xml文件與該外部文件與該外部dtd文件關(guān)聯(lián)。文件關(guān)聯(lián)。 二者的差異主要在位置上。二者的差異主要在位置上。3.2 3.2 內(nèi)部和外部內(nèi)部和外部dtddtd3.2.1 內(nèi)部內(nèi)部dtd語法:語法:其中:其中:!doctype:表示:表示dtd聲明的開始,關(guān)鍵字聲明的開始,關(guān)鍵字doctype必須大寫。必須大寫。根元素名稱
5、:指定根元素名稱:指定xml文檔的根元素名稱,這文檔的根元素名稱,這個(gè)根元素名稱必須精確地與文檔中實(shí)際的根元素個(gè)根元素名稱必須精確地與文檔中實(shí)際的根元素名稱一致。名稱一致。dtd聲明語句序列:包含在一對方括聲明語句序列:包含在一對方括號(號( )之內(nèi)的若干條語句,用來對)之內(nèi)的若干條語句,用來對xml文檔中所使用的元素、屬性和實(shí)文檔中所使用的元素、屬性和實(shí)體等進(jìn)行具體聲明。體等進(jìn)行具體聲明。在在xml聲明之后緊接著加入聲明之后緊接著加入dtd描述內(nèi)容描述內(nèi)容書上例書上例3.1.xml就是內(nèi)部就是內(nèi)部dtd的例子的例子dtddtd的基本結(jié)構(gòu)的基本結(jié)構(gòu) !doctype 客戶名單客戶名單 文檔類型
6、定義的結(jié)構(gòu)說明文檔類型定義的結(jié)構(gòu)說明 “”為為dtd定義的結(jié)束標(biāo)記,定義的結(jié)束標(biāo)記,doctype為關(guān)鍵字,必須大寫。為關(guān)鍵字,必須大寫?!翱蛻裘麊慰蛻裘麊巍睘闉閤ml文檔的根元素,規(guī)定一對中括號要放到文檔的根元素,規(guī)定一對中括號要放到根元素后面。根元素后面?!啊睘樵囟x的為元素定義的結(jié)束標(biāo)記。這部分內(nèi)容是結(jié)束標(biāo)記。這部分內(nèi)容是dtd中最主要的內(nèi)容。在中最主要的內(nèi)容。在xml中不中不管是樹枝節(jié)點(diǎn)還是樹葉節(jié)點(diǎn),都需要進(jìn)行元素定義。管是樹枝節(jié)點(diǎn)還是樹葉節(jié)點(diǎn),都需要進(jìn)行元素定義?!?attlist”為元素的屬性定義。有一些元素具有屬性,屬為元素的屬性定義。有一些元素具有屬性,屬性是為了在應(yīng)用程序?qū)?/p>
7、文檔進(jìn)行處理時(shí),提供參數(shù)或者控制信性是為了在應(yīng)用程序?qū)ξ臋n進(jìn)行處理時(shí),提供參數(shù)或者控制信息。元素所有的屬性都必須在息。元素所有的屬性都必須在dtd中進(jìn)行定義。中進(jìn)行定義?!啊睘樽⑨尅Ec文檔本體一樣,為注釋。與文檔本體一樣,dtd中也可以含有注釋。中也可以含有注釋。內(nèi)部內(nèi)部dtd是很有用的,使用起來也很方便,不是很有用的,使用起來也很方便,不會因?yàn)檎也坏綍驗(yàn)檎也坏絛td文件而苦惱。但是內(nèi)部文件而苦惱。但是內(nèi)部dtd的引用會使的引用會使xml源文檔的長度劇增。源文檔的長度劇增。另外,如果多個(gè)另外,如果多個(gè)xml文檔的結(jié)構(gòu)相同,那么使文檔的結(jié)構(gòu)相同,那么使用內(nèi)部用內(nèi)部dtd就必須每個(gè)就必須每個(gè)xm
8、l文檔編寫一個(gè)文檔編寫一個(gè)dtd,那么就會造成資源的浪費(fèi),代價(jià)非那么就會造成資源的浪費(fèi),代價(jià)非常昂貴。那么如何解決這個(gè)問題呢?常昂貴。那么如何解決這個(gè)問題呢?3.2.2 外部外部dtd1外部外部dtd的創(chuàng)建的創(chuàng)建 外部外部dtd是一個(gè)獨(dú)立于是一個(gè)獨(dú)立于xml文檔的文件,使文檔的文件,使用用 .dtd為其文件擴(kuò)展名。此種文件實(shí)際上也是一為其文件擴(kuò)展名。此種文件實(shí)際上也是一個(gè)文本文件,可用任何文本編輯器創(chuàng)建。個(gè)文本文件,可用任何文本編輯器創(chuàng)建。 在外部在外部dtd中,除了沒有內(nèi)部中,除了沒有內(nèi)部dtd中的中的“!doctype 根元素名稱根元素名稱”語句之外,其他聲語句之外,其他聲明語句都是一樣的
9、?;靖袷饺缦拢好髡Z句都是一樣的?;靖袷饺缦拢?元素、屬性或?qū)嶓w的元素、屬性或?qū)嶓w的dtd描述描述外部外部dtddtd文件示例文件示例 2. 在在xml文檔中引用外部文檔中引用外部dtd文件文件 在在xml文件中引用外部文件中引用外部dtd文件的基本格式如文件的基本格式如下:下: 引用外部引用外部dtddtd文件示例文件示例 kh-0165重慶重慶任建興任建興dd-3453.3 dtd3.3 dtd對元素的聲明對元素的聲明3.3.1 元素聲明的語法元素聲明的語法語法:語法:說明:說明:!element: 元素聲明語句的開元素聲明語句的開始,關(guān)鍵字始,關(guān)鍵字element必須大寫。必須大寫。元
10、素標(biāo)記名元素標(biāo)記名 : 所聲明的元素名稱。所聲明的元素名稱。元素內(nèi)容約束元素內(nèi)容約束:對該元素內(nèi)容的定義,:對該元素內(nèi)容的定義,用來規(guī)定該元素可以包含的內(nèi)容。用來規(guī)定該元素可以包含的內(nèi)容。3.3.2 各種元素內(nèi)容的約束各種元素內(nèi)容的約束1只包含子元素的約束只包含子元素的約束2只包含文本數(shù)據(jù)的約束只包含文本數(shù)據(jù)的約束3包含混合內(nèi)容的約束包含混合內(nèi)容的約束4empty和和any如果想約束如果想約束xml文件中某個(gè)元素標(biāo)記可以文件中某個(gè)元素標(biāo)記可以有怎樣的子標(biāo)記(子元素),那么有怎樣的子標(biāo)記(子元素),那么 dtd中中元素元素聲明的聲明的“標(biāo)記的約束條件標(biāo)記的約束條件”是用小括號括是用小括號括起的子
11、標(biāo)記列表,格式為起的子標(biāo)記列表,格式為 注:注:“子標(biāo)記列表子標(biāo)記列表”可以約束可以約束xml文件文件中的標(biāo)記可以包含哪些子標(biāo)記及這些子標(biāo)中的標(biāo)記可以包含哪些子標(biāo)記及這些子標(biāo)記出現(xiàn)的先后順序記出現(xiàn)的先后順序,這時(shí),這時(shí)“子標(biāo)記列表子標(biāo)記列表”是用逗號隔開的若是用逗號隔開的若干個(gè)子標(biāo)記,每個(gè)標(biāo)記稱為干個(gè)子標(biāo)記,每個(gè)標(biāo)記稱為“子標(biāo)記列表子標(biāo)記列表”的一個(gè)分項(xiàng),例如的一個(gè)分項(xiàng),例如“子標(biāo)記列表子標(biāo)記列表”中若干個(gè)標(biāo)記可以尾加中若干個(gè)標(biāo)記可以尾加模模式限定符號式限定符號來限定該子標(biāo)記是否允許重復(fù)來限定該子標(biāo)記是否允許重復(fù)出現(xiàn)、出現(xiàn)的次數(shù)。出現(xiàn)、出現(xiàn)的次數(shù)。+:尾加該限定符號的子標(biāo)記必須出現(xiàn)一次:尾加該
12、限定符號的子標(biāo)記必須出現(xiàn)一次或多次或多次*:尾加該限定符號的子標(biāo)記必須出現(xiàn):尾加該限定符號的子標(biāo)記必須出現(xiàn)0次次或多次或多次?:尾加該限定符號的子標(biāo)記必須出現(xiàn)?:尾加該限定符號的子標(biāo)記必須出現(xiàn)0次次或一次或一次沒有尾加任何限定符號的子標(biāo)記則必須且沒有尾加任何限定符號的子標(biāo)記則必須且只能使用一次只能使用一次可以使用可以使用( )來設(shè)置組,括號可以嵌套來設(shè)置組,括號可以嵌套 “子標(biāo)記列表子標(biāo)記列表”的分項(xiàng)也可以是幾個(gè)標(biāo)的分項(xiàng)也可以是幾個(gè)標(biāo)記的記的“或運(yùn)算或運(yùn)算”,而且,而且“或運(yùn)算或運(yùn)算”必須用必須用左、右小括號括起。例如:左、右小括號括起。例如:解釋解釋:約束名為:約束名為“應(yīng)聘者應(yīng)聘者”的標(biāo)記
13、必須依的標(biāo)記必須依次包含次包含3個(gè)子標(biāo)記:一個(gè)名字是個(gè)子標(biāo)記:一個(gè)名字是“姓名姓名”的的子標(biāo)記,一個(gè)名字是子標(biāo)記,一個(gè)名字是“??茖?啤被蚧颉氨究票究啤被蚧颉把芯可芯可弊訕?biāo)記(不能同時(shí)有),一子標(biāo)記(不能同時(shí)有),一個(gè)名字是個(gè)名字是“男男”或或“女女”的子標(biāo)記(不能的子標(biāo)記(不能同時(shí)有)。同時(shí)有)。解釋:解釋:約束標(biāo)記約束標(biāo)記“應(yīng)聘者應(yīng)聘者”依次包含若干依次包含若干個(gè)子標(biāo)記:一個(gè)名字是個(gè)子標(biāo)記:一個(gè)名字是“姓名姓名”的標(biāo)記。的標(biāo)記。多個(gè)(包括零個(gè))名字是多個(gè)(包括零個(gè))名字是“獎(jiǎng)勵(lì)獎(jiǎng)勵(lì)”或或“處處分分”的子標(biāo)記(的子標(biāo)記(可以同時(shí)有可以同時(shí)有),最后一個(gè)),最后一個(gè)名字是名字是“男男”或或
14、“女女”子標(biāo)記(不能同時(shí)子標(biāo)記(不能同時(shí)有)有)p37例例3-5例例3.5.xml3.5.xml約束標(biāo)記約束標(biāo)記“客戶地址客戶地址”依次包含若干個(gè)子依次包含若干個(gè)子標(biāo)記:一個(gè)名字是標(biāo)記:一個(gè)名字是“地址地址”的標(biāo)記??梢缘臉?biāo)記。可以有也可以沒有有也可以沒有“電話電話”和和“email”元素元素(由(由?指定),但有的話只能是指定),但有的話只能是“電話電話”或或“email”元素中的一個(gè),不能同時(shí)有元素中的一個(gè),不能同時(shí)有(由(由|來指定)來指定) 如果準(zhǔn)備約束一個(gè)標(biāo)記沒有子標(biāo)記,也就是說只如果準(zhǔn)備約束一個(gè)標(biāo)記沒有子標(biāo)記,也就是說只能有文本數(shù)據(jù),那么能有文本數(shù)據(jù),那么“標(biāo)記的約束條件標(biāo)記的約束
15、條件”是用小括是用小括號括起的號括起的#pcdata,格式如下:格式如下: 你好你好 bye bye如果允許標(biāo)記的內(nèi)容既可以有可顯示的文本數(shù)據(jù),如果允許標(biāo)記的內(nèi)容既可以有可顯示的文本數(shù)據(jù),也可以有子標(biāo)記,那么在也可以有子標(biāo)記,那么在dtd文件中,元素的文件中,元素的“標(biāo)記的約束條件標(biāo)記的約束條件”是關(guān)鍵字是關(guān)鍵字“#pcdata”和和若干若干個(gè)子標(biāo)記的個(gè)子標(biāo)記的“或運(yùn)算或運(yùn)算”,而且該,而且該“或運(yùn)算或運(yùn)算”必須用必須用小括號括起并尾加一個(gè)小括號括起并尾加一個(gè)“*”號,格式如下:號,格式如下: 例題例題3.4.xml混合內(nèi)容既可以為空,也可能只包含子元混合內(nèi)容既可以為空,也可能只包含子元素,也
16、可能是字符數(shù)據(jù)(素,也可能是字符數(shù)據(jù)(#pcdata),或或者是既有字符數(shù)據(jù)又有子元素的混合形式。者是既有字符數(shù)據(jù)又有子元素的混合形式。注意:混合內(nèi)容只能約束可以有哪些子標(biāo)注意:混合內(nèi)容只能約束可以有哪些子標(biāo)記,不能約束這些子標(biāo)記出現(xiàn)的次數(shù)和出記,不能約束這些子標(biāo)記出現(xiàn)的次數(shù)和出現(xiàn)的順序,另外,約束條件中也不能使用現(xiàn)的順序,另外,約束條件中也不能使用限制符號限制符號如果準(zhǔn)備約束一個(gè)標(biāo)記是空標(biāo)記,或者是如果準(zhǔn)備約束一個(gè)標(biāo)記是空標(biāo)記,或者是只含有空字符的非空標(biāo)記,元素的只含有空字符的非空標(biāo)記,元素的“標(biāo)記標(biāo)記的約束條件的約束條件”可以是關(guān)鍵字可以是關(guān)鍵字“empty”;如果不準(zhǔn)備對一個(gè)元素標(biāo)記的內(nèi)
17、容有任何如果不準(zhǔn)備對一個(gè)元素標(biāo)記的內(nèi)容有任何約束,元素的約束,元素的“標(biāo)記的約束條件標(biāo)記的約束條件”可以是可以是關(guān)鍵字關(guān)鍵字“any”。例如:。例如: any、empty的前后不能加括號。的前后不能加括號。 例例3.3.xml中,中,“客戶名單客戶名單”元素定義為元素定義為“any”,似乎可在,似乎可在“客戶名單客戶名單”中放入中放入任何內(nèi)容,包括子元素在內(nèi),但實(shí)際本例任何內(nèi)容,包括子元素在內(nèi),但實(shí)際本例錯(cuò)了,因?yàn)橛行У腻e(cuò)了,因?yàn)橛行У膞ml文檔中任何元素必文檔中任何元素必須在須在dtd中給出定義。中給出定義。 因此,盡可能不要使用因此,盡可能不要使用any來定義元素來定義元素內(nèi)容。內(nèi)容。3.
18、3.3 dtd的完整性的完整性(1)不允許相互嵌套)不允許相互嵌套 如果一個(gè)如果一個(gè)dtd元素約束某個(gè)標(biāo)記可以出元素約束某個(gè)標(biāo)記可以出現(xiàn)某個(gè)子標(biāo)記,那么對該子標(biāo)記進(jìn)行約束現(xiàn)某個(gè)子標(biāo)記,那么對該子標(biāo)記進(jìn)行約束的的dtd元素就不能約束該標(biāo)記的子標(biāo)記是元素就不能約束該標(biāo)記的子標(biāo)記是它的父標(biāo)記。它的父標(biāo)記。(2)xml文件中的每個(gè)標(biāo)記都必須在文件中的每個(gè)標(biāo)記都必須在dtd中有相應(yīng)元素進(jìn)行約束。中有相應(yīng)元素進(jìn)行約束。3.4 dtd3.4 dtd對屬性的聲明對屬性的聲明3.4.1 屬性聲明的語法屬性聲明的語法 xml文檔中的元素的屬性目的是為元素文檔中的元素的屬性目的是為元素標(biāo)記提供額外的信息,有些是必要
19、的,有些標(biāo)記提供額外的信息,有些是必要的,有些則不一定需要設(shè)置屬性,并且有些屬性當(dāng)沒則不一定需要設(shè)置屬性,并且有些屬性當(dāng)沒有設(shè)置屬性值時(shí)會自動(dòng)以默認(rèn)值取代。當(dāng)然,有設(shè)置屬性值時(shí)會自動(dòng)以默認(rèn)值取代。當(dāng)然,元素不一定要屬性;元素不一定要屬性;但若使用了屬性,則每但若使用了屬性,則每個(gè)屬性都需在個(gè)屬性都需在dtd中予以定義中予以定義。dtd中定義中定義元素屬性的基本格式:元素屬性的基本格式:或或 attlist是一個(gè)屬性列表,可包含多個(gè)屬性。是一個(gè)屬性列表,可包含多個(gè)屬性。 例子:例子:說明:說明:在在attlist聲明中,涉及到聲明中,涉及到“屬性名稱屬性名稱”“屬性類屬性類型型”和和“默認(rèn)值情況
20、默認(rèn)值情況”,其意義分別闡述如下:,其意義分別闡述如下:(1)屬性名稱)屬性名稱 屬性名稱的命名規(guī)則和標(biāo)記的命名屬性名稱的命名規(guī)則和標(biāo)記的命名規(guī)則相同,可以由字母、數(shù)字、下劃線(規(guī)則相同,可以由字母、數(shù)字、下劃線(“_”)、)、點(diǎn)(點(diǎn)(“.”)或連字符()或連字符(“-”)組成,但必須以字母)組成,但必須以字母或下劃線開頭?;蛳聞澗€開頭。(2)屬性類型)屬性類型 我們已經(jīng)知道屬性值一定是一個(gè)字符串,那么屬我們已經(jīng)知道屬性值一定是一個(gè)字符串,那么屬性類型就決定了屬性可以用怎樣的字符串作為屬性性類型就決定了屬性可以用怎樣的字符串作為屬性的值。的值。(3)默認(rèn)值情況)默認(rèn)值情況 attlist聲明是
21、為了約束聲明是為了約束xml文件中標(biāo)記的屬性,文件中標(biāo)記的屬性,attlist聲明中關(guān)于屬性的聲明中關(guān)于屬性的“默認(rèn)值情況默認(rèn)值情況”是對是對xml文件中標(biāo)記的屬性進(jìn)行約束的細(xì)節(jié)條件文件中標(biāo)記的屬性進(jìn)行約束的細(xì)節(jié)條件. 3.4.2 屬性默認(rèn)值情況屬性默認(rèn)值情況1“默認(rèn)值情況默認(rèn)值情況”是字符串是字符串 如果某個(gè)屬性的如果某個(gè)屬性的“默認(rèn)值情況默認(rèn)值情況”是一個(gè)字是一個(gè)字符串,符串, xml中對應(yīng)元素標(biāo)記必須有該屬性,中對應(yīng)元素標(biāo)記必須有該屬性,但元素標(biāo)記中但元素標(biāo)記中可人為添加或不添加可人為添加或不添加該屬性,該屬性,若不添加的話則默認(rèn)有該屬性若不添加的話則默認(rèn)有該屬性且其屬性值即且其屬性值即
22、為此處定義的默認(rèn)值。為此處定義的默認(rèn)值。 例:例:例題例題3-8 p43屬性類型,該屬性類型,該類型表明屬性類型表明屬性值可以是任意值可以是任意字符串字符串默認(rèn)值情況默認(rèn)值情況3.4.2 屬性默認(rèn)值情況屬性默認(rèn)值情況2“默認(rèn)值情況默認(rèn)值情況”是是#implied 在在attlist定義的屬性約束列表中可以定義的屬性約束列表中可以設(shè)置屬性的設(shè)置屬性的“默認(rèn)值情況默認(rèn)值情況”是是#implied。表示該元素的該屬性可有可無。表示該元素的該屬性可有可無。例:例: 此時(shí)該屬性就沒有默認(rèn)值,而且相應(yīng)的此時(shí)該屬性就沒有默認(rèn)值,而且相應(yīng)的標(biāo)記里可以附加或不附加該屬性標(biāo)記里可以附加或不附加該屬性3.4.2 屬
23、性默認(rèn)值情況屬性默認(rèn)值情況3“默認(rèn)值情況默認(rèn)值情況”是是#required 在在attlist定義的屬性約束列表中可以設(shè)定義的屬性約束列表中可以設(shè)置屬性的置屬性的“默認(rèn)值情況默認(rèn)值情況”是是#required 。例:例: 此時(shí)該屬性沒有默認(rèn)值,相應(yīng)的元素標(biāo)記此時(shí)該屬性沒有默認(rèn)值,相應(yīng)的元素標(biāo)記必須要添加該屬性并給出屬性的值,不能缺必須要添加該屬性并給出屬性的值,不能缺省。省。例題例題3-9 p44 3.4.2 屬性默認(rèn)值情況屬性默認(rèn)值情況4“默認(rèn)值情況默認(rèn)值情況”是是#fixed 默認(rèn)值默認(rèn)值 表明屬性具有固定的值,不可改變。在表明屬性具有固定的值,不可改變。在xml文件中元素的該屬性可指定也
24、可不指文件中元素的該屬性可指定也可不指定,若沒有的話,則默認(rèn)有該屬性且其屬定,若沒有的話,則默認(rèn)有該屬性且其屬性值即為此處定義的默認(rèn)值;若有的話則性值即為此處定義的默認(rèn)值;若有的話則屬性的值必須與默認(rèn)值完全相同,即該屬屬性的值必須與默認(rèn)值完全相同,即該屬性的屬性值是不可修改的。性的屬性值是不可修改的。例:例: 例題例題3-10 p453.4.3 屬性的各種類型屬性的各種類型某個(gè)屬性的類型(某個(gè)屬性的類型(type)規(guī)定了哪種類型)規(guī)定了哪種類型的數(shù)據(jù)可以作為該屬性的值。的數(shù)據(jù)可以作為該屬性的值。xml規(guī)范允規(guī)范允許為元素的屬性指定許為元素的屬性指定7種不同的類型:種不同的類型:cdata、枚舉
25、類型、枚舉類型|、nmtoken、nmtokens、id、idref、idrefs3.4.3 屬性的各種類型屬性的各種類型1cdata類型類型 對于對于cdata(character data)類型的)類型的屬性,該屬性的值可以是任何一個(gè)字符串,屬性,該屬性的值可以是任何一個(gè)字符串,但是,字符串中不能含有含有左尖括號、但是,字符串中不能含有含有左尖括號、右尖括號、與符號、單引號和雙引號,如右尖括號、與符號、單引號和雙引號,如果想使用這些字符,可以使用實(shí)體引用。果想使用這些字符,可以使用實(shí)體引用。例題例題3-11 p463.4.3 屬性的各種類型屬性的各種類型2枚舉類型枚舉類型 如果屬性的類型是
26、枚舉類型,那么該屬性只可如果屬性的類型是枚舉類型,那么該屬性只可以是枚舉值。枚舉類型其格式是將屬性可以取的以是枚舉值。枚舉類型其格式是將屬性可以取的值用符號值用符號“|”分隔,枚舉類型的定義格式如下:分隔,枚舉類型的定義格式如下: 各候選屬性值不允許出現(xiàn)空格各候選屬性值不允許出現(xiàn)空格例題例題3-12 p473.4.3 屬性的各種類型屬性的各種類型3nmtoken類型類型 如果屬性的類型是如果屬性的類型是nmtoken類型的屬性,則類型的屬性,則屬性值只能包含字母、數(shù)字、小數(shù)點(diǎn)、連字符、屬性值只能包含字母、數(shù)字、小數(shù)點(diǎn)、連字符、下劃線和冒號,不能含有空格字符和下劃線和冒號,不能含有空格字符和#。
27、對應(yīng)對應(yīng)xml: 寫字桌寫字桌 例題例題3-13 p483.4.3 屬性的各種類型屬性的各種類型4nmtokens類型類型 對于對于nmtoken類型的屬性,其屬性值類型的屬性,其屬性值中不能含有空格。如果需要某個(gè)屬性的中不能含有空格。如果需要某個(gè)屬性的屬屬性值含有空格,而且是被空格分隔開的若性值含有空格,而且是被空格分隔開的若干子字符串干子字符串,那么就可以將屬性的類型取,那么就可以將屬性的類型取為為nmtokens類型類型.例題例題3-14 p493.4.3 屬性的各種類型屬性的各種類型5id類型類型如果希望某個(gè)屬性的屬性值具有唯一性,即不允如果希望某個(gè)屬性的屬性值具有唯一性,即不允許其它
28、許其它id類型的屬性再取這個(gè)屬性值,那么就可類型的屬性再取這個(gè)屬性值,那么就可以將屬性的類型取為以將屬性的類型取為id類型。類型。注意注意id類型的屬性值必須以字母或下劃線或漢類型的屬性值必須以字母或下劃線或漢字開頭,屬性值中不能出現(xiàn)空格。字開頭,屬性值中不能出現(xiàn)空格。一個(gè)元素只能一個(gè)元素只能有一個(gè)有一個(gè)id類型的屬性。類型的屬性。注意注意需要特別注意的是需要特別注意的是id類型屬性的類型屬性的“默認(rèn)值默認(rèn)值情況情況”只能是只能是“#required”和和“#implied” 例題例題3-15 p493.4.3 屬性的各種類型屬性的各種類型6idref類型類型 如果準(zhǔn)備通過標(biāo)記的屬性值來建立標(biāo)
29、記如果準(zhǔn)備通過標(biāo)記的屬性值來建立標(biāo)記之間的聯(lián)系,就可以在標(biāo)記中使用之間的聯(lián)系,就可以在標(biāo)記中使用idref(identifier reference)類型的屬性。)類型的屬性。idref類型屬性的屬性值類型屬性的屬性值只能取其他元素只能取其他元素中中id類型屬性的屬性值類型屬性的屬性值。idref屬性類型屬性類型的屬性值中不能有空格。的屬性值中不能有空格。例題例題3-16 p503.4.3 屬性的各種類型屬性的各種類型7idrefs類型類型 我們希望約束某個(gè)屬性的屬性值是若干我們希望約束某個(gè)屬性的屬性值是若干個(gè)其它個(gè)其它id屬性的屬性值的組合,屬性的屬性值的組合,idrefds類型屬性的屬性值
30、能滿足這一愿望。對于類型屬性的屬性值能滿足這一愿望。對于idrefs類型的屬性,它的值可以是用空類型的屬性,它的值可以是用空格分隔的若干個(gè)其它格分隔的若干個(gè)其它id屬性的屬性值。屬性的屬性值。例例題題3-17 p52參見書上參見書上3.6.xml和和3.7.xml3.5 3.5 實(shí)體的聲明與引用實(shí)體的聲明與引用3.5.1 實(shí)體的概念與分類實(shí)體的概念與分類1實(shí)體的概念實(shí)體的概念 實(shí)體在實(shí)體在xml中充當(dāng)宏或別名的角色,中充當(dāng)宏或別名的角色,其最根本的作用是幫助你為一大段文本創(chuàng)其最根本的作用是幫助你為一大段文本創(chuàng)建一個(gè)別名,這樣,在文件的另一個(gè)位置建一個(gè)別名,這樣,在文件的另一個(gè)位置需要引用這段文
31、本時(shí),僅需要指向它的別需要引用這段文本時(shí),僅需要指向它的別名就可以了。這樣一來,用于重新輸入這名就可以了。這樣一來,用于重新輸入這段文本的大量時(shí)間就被節(jié)約下來了。它還段文本的大量時(shí)間就被節(jié)約下來了。它還意味著一旦需要修改,僅需在一個(gè)地方做意味著一旦需要修改,僅需在一個(gè)地方做改動(dòng),就完成了全局的改動(dòng)。改動(dòng),就完成了全局的改動(dòng)。2實(shí)體的分類實(shí)體的分類一般實(shí)體:用來替代文檔具體內(nèi)容的實(shí)體一般實(shí)體:用來替代文檔具體內(nèi)容的實(shí)體。參數(shù)實(shí)體:只能在外部參數(shù)實(shí)體:只能在外部dtd中定義和引用的實(shí)體,中定義和引用的實(shí)體,不能在不能在xml文檔中引用。文檔中引用。內(nèi)部實(shí)體:不是在外部獨(dú)立的文檔中定義實(shí)體內(nèi)內(nèi)部實(shí)體
32、:不是在外部獨(dú)立的文檔中定義實(shí)體內(nèi)容。容。外部實(shí)體:所定義的實(shí)體內(nèi)容為外部獨(dú)立存在的外部實(shí)體:所定義的實(shí)體內(nèi)容為外部獨(dú)立存在的文件。文件??山馕鰧?shí)體:包含字符、數(shù)字、文本塊或標(biāo)記的可解析實(shí)體:包含字符、數(shù)字、文本塊或標(biāo)記的實(shí)體。實(shí)體。不可解析實(shí)體:包含圖片、聲音等其他二進(jìn)制數(shù)不可解析實(shí)體:包含圖片、聲音等其他二進(jìn)制數(shù)據(jù)的實(shí)體。據(jù)的實(shí)體。3.5.2 內(nèi)部一般實(shí)體內(nèi)部一般實(shí)體 內(nèi)部一般實(shí)體是指在內(nèi)部一般實(shí)體是指在dtd中定義的一段具體文中定義的一段具體文字內(nèi)容,通常在字內(nèi)容,通常在xml文檔的元素中引用,也可在文檔的元素中引用,也可在dtd語句中引用。語句中引用。在在dtd中聲明內(nèi)部一般實(shí)體的語法
33、:中聲明內(nèi)部一般實(shí)體的語法:說明:說明:!entity :表示開始聲明一個(gè)實(shí)體,關(guān)鍵字:表示開始聲明一個(gè)實(shí)體,關(guān)鍵字entity必須大寫。必須大寫。實(shí)體名:實(shí)體名:必須以字母或下劃線必須以字母或下劃線(_)開頭,后面是開頭,后面是0個(gè)或多個(gè)字母、數(shù)字、句點(diǎn)個(gè)或多個(gè)字母、數(shù)字、句點(diǎn)(.)、連字符、連字符(-)或下劃或下劃線線(_)。實(shí)體名同樣也是區(qū)分大小寫的。實(shí)體名同樣也是區(qū)分大小寫的。實(shí)體值:實(shí)體值:表示實(shí)體的具體內(nèi)容,表示實(shí)體的具體內(nèi)容,是一個(gè)字符串,對于特殊字符要是一個(gè)字符串,對于特殊字符要用實(shí)體引用。用實(shí)體引用。在在xml文檔或者文檔或者dtd中引用內(nèi)部一般中引用內(nèi)部一般實(shí)體的語法:實(shí)體
34、的語法:&實(shí)體名實(shí)體名;內(nèi)部一般實(shí)體內(nèi)部一般實(shí)體 張曉迪張曉迪 女女 銷售部銷售部 &良好良好; 當(dāng)內(nèi)部一般實(shí)體在當(dāng)內(nèi)部一般實(shí)體在dtd中引用時(shí),有以下幾方面中引用時(shí),有以下幾方面需注意。需注意。(1) 不能在元素及屬性的聲明中引用內(nèi)部一般實(shí)不能在元素及屬性的聲明中引用內(nèi)部一般實(shí)體,如下面的語句即為非法的:體,如下面的語句即為非法的:參見參見p57:3.8.xml, 3.9.xml(2) 在語句中不能出現(xiàn)循環(huán),如下面的語句即為在語句中不能出現(xiàn)循環(huán),如下面的語句即為非法的:非法的: 參見參見p57:3.10.xml, 3.11.xml(3)實(shí)體定義的替換內(nèi)容中,若包含元素)實(shí)體定
35、義的替換內(nèi)容中,若包含元素標(biāo)記,則該元素不能在一個(gè)實(shí)體中開始,標(biāo)記,則該元素不能在一個(gè)實(shí)體中開始,而在另一個(gè)實(shí)體中結(jié)束而在另一個(gè)實(shí)體中結(jié)束參見參見p58下至下至p603.5.3 外部一般實(shí)體外部一般實(shí)體 外部實(shí)體所對應(yīng)的內(nèi)容通常放在一個(gè)獨(dú)外部實(shí)體所對應(yīng)的內(nèi)容通常放在一個(gè)獨(dú)立存在的文件中(如立存在的文件中(如txt或或xml文件)定義文件)定義格式:格式: uri地址指定的是包含實(shí)體數(shù)據(jù)的文件地址指定的是包含實(shí)體數(shù)據(jù)的文件的位置。外部實(shí)體文件只能包含可以合法的位置。外部實(shí)體文件只能包含可以合法插入元素中的項(xiàng)目(字符數(shù)據(jù)、嵌套元素插入元素中的項(xiàng)目(字符數(shù)據(jù)、嵌套元素等)。等)。在在xml文檔中引用
36、外部一般實(shí)體的語法:文檔中引用外部一般實(shí)體的語法:&實(shí)體名實(shí)體名;注意:注意:包含實(shí)體數(shù)據(jù)的文件的第一行包含實(shí)體數(shù)據(jù)的文件的第一行必須是必須是xml聲明。聲明。參見參見p61小結(jié)小結(jié)dtd的基本結(jié)構(gòu)的基本結(jié)構(gòu)內(nèi)部內(nèi)部dtd引用引用外部外部dtd引用引用dtd中的元素定義中的元素定義如何控制元素內(nèi)容如何控制元素內(nèi)容dtd中的屬性定義中的屬性定義內(nèi)部一般實(shí)體的定義及引用內(nèi)部一般實(shí)體的定義及引用練習(xí)題練習(xí)題(1)在內(nèi)部)在內(nèi)部dtd中開始設(shè)定中開始設(shè)定dtd的關(guān)鍵字為(的關(guān)鍵字為( )a.!element b.!doctype c.!attlist d.!entity(2)引用外部)引用外部dtd的關(guān)鍵字為(的關(guān)鍵字為( ) a.pcdata b.element c.system d.cdata(3)希望子元素出現(xiàn))希望子元素出現(xiàn)0或或1次,應(yīng)該怎樣定義元素類型(次,應(yīng)該怎樣定義元素類型( ) a.子元素子元素? b.子元素子元素+ c.子元素子元素 d.子元素子元素*(4)如果希望屬性值為某些固定值之一,可將該屬性定義為)如果希望屬性值為某些固定值之一,可將該屬性定義為( )類型。)類型。 a.#pcdata b.cdata c.枚舉枚舉 d.nmtoken(5)如果希望屬性的取值唯一,則該屬性應(yīng)定義為()如果希望屬性的取值唯一,則該屬性應(yīng)定義為( )類)類型
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程建筑外架合同
- 工程施工合同索賠條款
- 勞動(dòng)合同與勞動(dòng)保護(hù)
- 工程勞務(wù)合同協(xié)議書
- 學(xué)校食堂豬肉供貨合同
- 影視劇拍攝場地租賃合同
- 房屋合同尾款協(xié)議
- 棋牌室裝修工程協(xié)議合同
- 收養(yǎng)協(xié)議是合同
- 客戶樣板合同協(xié)議
- 全過程工程咨詢投標(biāo)方案(技術(shù)方案)
- DL∕T 1051-2019 電力技術(shù)監(jiān)督導(dǎo)則
- 關(guān)于學(xué)生假期(寒暑假)安排的調(diào)查問卷
- 2024廣東深圳市龍崗區(qū)總工會招聘社會化工會工作者及事宜筆試歷年典型考題及考點(diǎn)剖析附答案帶詳解
- 缺血性腦卒中的護(hù)理
- 中國歷史-Chinese History (中英文)
- 未被列入違法失信名單承諾書
- 2024年專升本考試-專升本考試(機(jī)械設(shè)計(jì)基礎(chǔ))筆試考試歷年高頻考點(diǎn)試題摘選含答案
- 公司供應(yīng)商風(fēng)險(xiǎn)管理制度
- 小學(xué)六年級上下冊語文必背古詩詞
- 行政復(fù)議法-形考作業(yè)4-國開(ZJ)-參考資料
評論
0/150
提交評論