第二十一章 XML基礎(chǔ)_第1頁
第二十一章 XML基礎(chǔ)_第2頁
第二十一章 XML基礎(chǔ)_第3頁
第二十一章 XML基礎(chǔ)_第4頁
第二十一章 XML基礎(chǔ)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第二十一章:XML基礎(chǔ)學(xué)習(xí)目標(biāo)n XML的概念n 定義XML文檔n 命名空間(Naming Space)n XML 文檔規(guī)則u DTDu SCHEMAn 樣式表(XSL)XML的概念XML,稱為可擴(kuò)展標(biāo)記語言(Extensible Markup Language),用來創(chuàng)建自定義標(biāo)記的標(biāo)記語言。它由萬維網(wǎng)協(xié)會(W3C)創(chuàng)建,用來克服 HTML(即超文本標(biāo)記語言(Hypertext Markup Language),它是所有網(wǎng)頁的基礎(chǔ))的局限。和 HTML 一樣,XML 基于 SGML 標(biāo)準(zhǔn)通用標(biāo)記語言(Standard Generalized Markup Language)。XML 是為 W

2、eb 設(shè)計的。XML是以數(shù)據(jù)為中心的,既用來標(biāo)記數(shù)據(jù),說明數(shù)據(jù)是什么的。應(yīng)用領(lǐng)域為:n 信息存儲和交換領(lǐng)域,類似于數(shù)據(jù)管理系統(tǒng),來存儲數(shù)據(jù)。這種數(shù)據(jù)處理與硬件,軟件沒有太大的關(guān)系,就是一個文本文件,具有可移植性。處理XML數(shù)據(jù)的時候,通過JAVA代碼寫的解析器就可以存取XML數(shù)據(jù)。n 在J2EE服務(wù)器用的比較多,在服務(wù)器端通過XML文件來進(jìn)行處理數(shù)據(jù)業(yè)務(wù)。配置文件幾乎全是XML文件。在EJB,Hibernate等JAVA熱門技術(shù)領(lǐng)域,XML的應(yīng)用更加重要。XML與HTML相同點(diǎn):n XML與HTML都是基于文本的標(biāo)記語言。XML與HTML差別:n 在功能上最大的區(qū)別就是XML是標(biāo)識數(shù)據(jù)的,HT

3、ML是顯示數(shù)據(jù)的。n 在內(nèi)容上的最大的區(qū)別是HTML里面的標(biāo)記(markup)都是定義好的,XML里面的標(biāo)記都是自定義的。比如:對于那些HTML中的標(biāo)記中形如用斜體顯示數(shù)據(jù)()的地方,XML標(biāo)簽則表現(xiàn)為程序中的一個字段名。它為一個數(shù)據(jù)定義一個標(biāo)記(label)來表示該數(shù)據(jù)。(如:andy lau)。注意:由于標(biāo)識數(shù)據(jù)可以讓你看出其中的意義(如何解釋它,應(yīng)該如何處理它),XML有時也被描述為一種能夠指明數(shù)據(jù)意義(語義)的機(jī)制。HTML是最成功的標(biāo)記語言。您幾乎可以在任何設(shè)備(從掌上電腦到大型機(jī))上查看最簡單的HTML標(biāo)記,甚至可以用合適的工具將HTML標(biāo)記轉(zhuǎn)換成語音和其它格式。既然HTML成功了

4、,為什么W3C(萬維網(wǎng)協(xié)會)還要創(chuàng)建XML呢?為了回答這個問題,請查看下面這個文檔:張三男西安電子科技大學(xué):電子信息工程HTML的問題在于它是為人設(shè)計的。即使不用瀏覽器查看上面的HTML文檔,您和我也會知道那是某個人的信息。作為高級動物-人來講:您和我具有理解大多數(shù)文檔的含義和意圖的智慧。但是遺憾的是機(jī)器不能做到。盡管這個文檔中的標(biāo)記告訴瀏覽器如何顯示該信息,但標(biāo)記沒有告訴瀏覽器信息是什么?!您和我都知道它是一個人的信息,但計算機(jī)并不知道。要顯示HTML,瀏覽器只需遵守HTML文檔中的指令即可。段標(biāo)記告訴瀏覽器在新的一行顯示,并且通常在前面有一個空行,而兩個換行標(biāo)記則告訴瀏覽器前進(jìn)到下一行,并

5、且行之間沒有空行。盡管瀏覽器出色地將文檔格式化,但計算機(jī)仍不知道這個代表某個人的信息。如下圖在瀏覽器里的顯示:為了完成對樣本HTML文檔的討論,請考慮從該信息中提取出該人是學(xué)哪個專業(yè)的?請看下面的算法:從該文檔中找到有兩個標(biāo)記的段落,那么學(xué)校就是第二個換行標(biāo)記的后面的第一個冒號后面的內(nèi)容,盡管該算法對該文檔起作用,但是不具備通用性。如果文檔格式一改變,那么該算法就不生效了。現(xiàn)在讓我們來看一個樣本XML文檔。使用XML,您可以給文檔中的標(biāo)記賦予某種涵義。更重要的是,計算機(jī)也容易處理這樣的信息。請看下例:張三男西安電子科技大學(xué)電子信息工程現(xiàn)在算法編寫又簡單又具有通用性:我們只需要找到和標(biāo)記之間的內(nèi)

6、容(技術(shù)上稱為元素),就可以從該文檔抽取郵政編碼。定義XML文檔有三個通用術(shù)語用來描述XML文檔的組成部分:標(biāo)記,元素和屬性。n 標(biāo)記是左尖括號()之間的文本。有開始標(biāo)記(例如:)和結(jié)束標(biāo)記(例如:)。n 元素是開始標(biāo)記,結(jié)束標(biāo)記以及位于二者之間的所有內(nèi)容。在上面的樣本中,元素包含四個子元素,.n 屬性是一個元素的開始標(biāo)記中的名稱-值對。如:80 danwei 是元素的屬性。定義XML基本語法要求:n XML文檔必須包含在一個單一元素中。這個單一元素稱為根元素,它包含文檔中所有文本和所有其它元素。如:play majiangXML文檔包含在一個單一元素中。下面是一個不包含單一根元素的文檔:pl

7、ay pikeplay majiang不管該文檔可能包含什么信息,XML解析器都會拒絕它。n XML元素不能重疊。下面是一些不合乎規(guī)則的標(biāo)記:劉德華28如果您在元素中開始了元素,則必須在元素中結(jié)束元素。如:劉德華49n 不能省去任何結(jié)束標(biāo)記。在下面的XML文檔里面標(biāo)記是不合乎規(guī)則的。因為沒有任何結(jié)束標(biāo)記。劉德華49n 空元素:如果一個元素根本不包含標(biāo)記,則稱為空元素。如:和 是等價的。n 元素是區(qū)分大小寫的 在HTML中,和是相同的;在XML中,它們是不同的。如果您試圖用標(biāo)記去結(jié)束元素,那么將會出錯。我愛深圳市計算機(jī)行業(yè)協(xié)會! -錯誤我愛深圳市計算機(jī)行業(yè)協(xié)會! -正確屬性的規(guī)則:n 屬性必須有

8、值 n 屬性值必須用引號括起請看下例: -錯誤(屬性無值) -錯誤(屬性值沒有用引號括起)-正確-正確屬性值可以用單引號括起,也可以用雙引號括起,但是要始終保持一致。如果屬性值包含單引號或雙引號,則您可以使用另一種引號來括起該值。如:description=zhangsans JAVA is very well,或者使用實體"代表雙引號,使用實體'代表單引號。實體是一個符號(如:"),XML解析器會用其它文本代替該符號(如: )。n XML聲明: 大多數(shù)XML文檔以XML聲明作為開始,它向解析器提供了關(guān)于文檔的基本信息。建議使用XML聲明,但它不是必需的。如果有的

9、話,那么它一定是文檔的第一樣?xùn)|西。如下所示:聲明最多可以包含三個名稱-值對。n version是使用的XML版本;目前最新版本為1.1n encoding是該文檔所使用的字符集。如沒有指定encoding,XML解析器會假定字符在utf-8字符集中,這是一個幾乎支持世界上所有語言的字符和象形文字的unicode標(biāo)準(zhǔn)。n standalone(可以是yes或no)定義了是否可以在不讀取任何其它文件的情況下處理該文檔。因為standalone=no是缺省值,所以您很少會在XML聲明中看到standalone。n 注釋可以出現(xiàn)在文檔的任何位置;它們甚至可以出現(xiàn)在根元素的前面或后面。注釋以 結(jié)束。注釋

10、不能在結(jié)束部分以外包含雙連字符 -;除此之外,注釋可以包含任何內(nèi)容。最重要的是,注釋內(nèi)的任何標(biāo)記都忽略;如果您希望除去XML文檔的一塊較大部分,只需要用注釋括住那個部分即可。(要恢復(fù)這個注釋掉的部分,只需除去注釋標(biāo)記即可。)下面是包含注釋的標(biāo)記:n 處理指令: XML文件還可以包含處理指令(PI Processing Instruction),這些指令可以將命令或信息傳給正在處理XML數(shù)據(jù)的應(yīng)用。通常它用來傳遞信息給解析器的下游程序。一般寫法如下:命名空間(Naming Space)XML 命名空間提供了一種避免元素命名沖突的方法。命名沖突因為XML文檔中使用的元素不是固定的,那么兩個不同的X

11、ML文檔使用同一個名字來描述不同類型的元素的情況就可能發(fā)生。而這種情況又往往會導(dǎo)致命名沖突。請看下面兩個例子這個 XML 文檔在table元素中攜帶了水果的信息:ApplesBananas這個 XML 文檔在table元素中攜帶了桌子的信息(家具,不能吃的哦):African Coffee Table80120如果上面兩個XML文檔片斷碰巧在一起使用的話,那么將會出現(xiàn)命名沖突的情況。因為這兩個片斷都包含了元素,而這兩個table元素的定義與所包含的內(nèi)容又各不相同。使用前綴解決命名沖突問題下面的XML文檔在table元素中攜帶了信息:ApplesBananas下面的XML文檔攜帶了家具table

12、的信息:African Coffee Table80120現(xiàn)在已經(jīng)沒有元素命名沖突的問題了,因為這兩個文檔對各自的table元素使用了不同的前綴,table元素在兩個文檔中分別是( 和)。通過使用前綴,我們創(chuàng)建了兩個不同的table元素。使用命名空間下面的XML文檔在table元素中攜帶了信息:ApplesBananas 下面的XML文檔攜帶了家具table的信息:African Coffee Table80120在上面兩個例子中除了使用前綴外,兩個table元素都使用了xmlns屬性,使元素和不同的命名空間關(guān)聯(lián)到一起。命名空間屬性命名空間屬性一般放置在元素的開始標(biāo)記處,其使用語法如下所示:x

13、mlns:namespace-prefix=namespace 在上面的例子中,命名空間定義了一個Internet 地址:xmlns:f=/furniture W3C 命名規(guī)范聲明命名空間本身就是一個統(tǒng)一資源標(biāo)示符,Uniform Resource Identifier (URI)。當(dāng)我們在元素的開始標(biāo)記處使用命名空間時,該元素所有的子元素都將通過一個前綴與同一個命名空間相互關(guān)聯(lián)。注意:用來標(biāo)識命名空間的網(wǎng)絡(luò)地址并不被XML解析器調(diào)用,XML解析器不需要從這個網(wǎng)絡(luò)地址中查找信息,該網(wǎng)絡(luò)地址的作用僅僅是給命名空間一個唯一的名字,因此這個網(wǎng)絡(luò)地址也可以是虛擬的,然

14、而又很多公司經(jīng)常把這個網(wǎng)絡(luò)地址值象一個真實的Web頁面,這個地址包含了關(guān)于當(dāng)前命名空間更詳細(xì)的信息。可以訪問/TR/html4/.統(tǒng)一資源標(biāo)識符通用資源標(biāo)識符(A Uniform Resource Identifier (URI))是一個標(biāo)識網(wǎng)絡(luò)資源的字符串。最普通的URI應(yīng)該是統(tǒng)一資源定位符Uniform Resource Locator (URL)。URL用于標(biāo)識網(wǎng)絡(luò)主機(jī)的地址。另一方面,另一個不常用的URI是通用資源名字Universal Resource Name (URN)。在我們的例子中,一般使用的是URLs。既然前面的例子使用的URL地址來標(biāo)識命名

15、空間,我們可以確信這個命名空間是唯一的。默認(rèn)的命名空間定義一個默認(rèn)的XML命名空間使得我們在子元素的開始標(biāo)記中不需要使用前綴。他的語法如下所示: 下面的XML文檔在table元素中包含了水果的信息:ApplesBananas下面的XML文檔包含了家具table的信息:African Coffee Table80120使用命名空間文檔開始使用XSL的時候,就會發(fā)現(xiàn)命名空間使用的是如此頻繁。XSL樣式單主要用于將XML文檔轉(zhuǎn)換成類似于HTML文件的格式。如果看一下下面的XSL文檔,就會發(fā)現(xiàn)有很多標(biāo)記都是HTML標(biāo)記。那些標(biāo)記并不是HTML標(biāo)記,是加了前綴的XSL,這個XSL前綴由命名空間http:

16、//TR/xsl所標(biāo)識: TitleArtist XML 文檔規(guī)則XML 文檔規(guī)則是用來規(guī)定XML文檔有那些標(biāo)記組成,標(biāo)記的多少,順序,屬性等方面的內(nèi)容。也就是規(guī)定XML的格式及內(nèi)容。目的是為了解析器解析該XML文檔提供方便。XML的文檔規(guī)則有兩種:DTD和XML SchemaDTD(Document Type Definition)文檔類型定義DTD定義可以在XML文檔中出現(xiàn)的元素,這些元素出現(xiàn)的次序,它們可以如何相互嵌套以及XML文檔結(jié)構(gòu)的其它詳細(xì)信息。XML Schema模式可以定義您能在DTD中使用的所有文檔結(jié)構(gòu),還可以定義數(shù)據(jù)類型和比DTD更復(fù)雜的規(guī)則。因此XML

17、 文檔可以分為三個類型:n 格式良好的:滿足XML的基本的語法特點(diǎn),但是不遵守DTD或者XML Schema。n 有效的文檔:即滿足了XML的基本的語法特點(diǎn),又遵守DTD或者 XML Schema。n 無效的文檔:不滿足XML的基本的語法特點(diǎn)。或者該文檔不遵守DTD或者XML Schema首先我們介紹下DTD(Document Type Definition)文檔類型定義XML強(qiáng)大之處在于可以定制自己的標(biāo)記來替代預(yù)先定義的標(biāo)記集。這里的最大問題在于如何讓處理器明白這些自定義的標(biāo)記,同時我們常說XML要求文檔結(jié)構(gòu)完整,這意味著我們必須在提供XML文件時提供它的語法規(guī)范。為此,XML需要有一個文檔

18、來定義標(biāo)記的含義,元素相關(guān)的屬性等,這樣解析器就能夠檢查輸入的數(shù)據(jù)是否正確。DTD可以包含在XML文檔中,也可以獨(dú)立為一個文件。一個符合DTD驗證的XML文檔是有效的文檔。請看下例:(student.dtd)該DTD定義了樣本文檔中使用的所有元素。它定義了三個元素n 元素包含零個或者多個元素。n 元素包含一個,一個,一個,和一個可選的元素。也就是說,元素必須出現(xiàn),而phone元素可有可無,但是這些元素必須按先后順序出現(xiàn)。n 包含文本的元素:(#PCDATA)表明該元素必須包含經(jīng)過解析的字符數(shù)據(jù),經(jīng)過解析的字符數(shù)據(jù)實質(zhì)上就是不是標(biāo)記的任何文本,即該元素不能包含自己的子元素)n 其中元素 有個可選

19、的屬性xusui.盡管DTD相當(dāng)簡單,但它清楚地說明了什么樣的元素組合是合乎規(guī)則的。元素出現(xiàn)在元素之前就是不合乎規(guī)則的。另外,請注意,DTD語法不同于普通的XML語法。(XML Schema 文檔本身就是XML)。盡管DTD的語法不同,但您仍可以將普通的注釋放到DTD中。下面的XML文檔是滿足上面DTD的文檔:andy49luohu luohukejidashagoudan28shanxi xi an當(dāng)然也可以把dtd文檔寫到XML文檔內(nèi)部:!DOCTYPE students andy49luohu luohukejidashagoudan28shanxi xi an下面分析把DTD文檔寫在X

20、ML文檔內(nèi)部和寫在外部的對比:如果采用外部DTD的話,就需要有兩個文檔,第一個文檔就是關(guān)于DTD的文檔,第二個文檔就是遵守DTD格式的內(nèi)容文檔。實際上,我們可以建立無窮多個遵守該DTD格式的文檔。我們在構(gòu)造關(guān)系數(shù)據(jù)庫中的表的時候,需要定義好表的結(jié)構(gòu)(也就是表包含的字段集合),然后就可以往這個表中放入記錄,記錄的個數(shù)從理論上講可以是無窮多個的。這里關(guān)于表的結(jié)構(gòu)就類似于DTD文檔,記錄類似于遵守DTD格式的內(nèi)容文檔。外部DTD的好處是:它可以方便高效地被多個XML文件所共享。你只要寫一個DTD文件,就可以被多個XML文件所引用。事實上,當(dāng)許多組織需要統(tǒng)一他們的數(shù)據(jù)交換格式時,他們就是通過外部DTD

21、來完成的。這樣做不僅簡化了輸入工作,還保證當(dāng)你需要對DTD做出改動時,只需改動一個公用的DTD文件,而不用一一去改動每個應(yīng)用了它的XML文件。不過需要注意,如果DTD的改動不是向后兼容的,這時原先根據(jù)該DTD編寫的那些XML文件可能就會出現(xiàn)問題了。所以在改動DTD時,一定要盡量兼容以前的文檔,除非解析器變了。(類似于JAVA的JDK的發(fā)展,JDK的每個版本的發(fā)布都會兼容以前的版本,這樣在換JDK時,以前的程序就不要改動了。目前的最新JDK的版本是1.6也叫6.0)由以上的例子可知,建立合法XML文件的要點(diǎn)之一就是要定義好DTD,然后所有的內(nèi)容就按照DTD格式進(jìn)行編寫。DTD實際上表現(xiàn)了一個層次

22、關(guān)系,你也可以把它理解成一棵樹的結(jié)構(gòu)。樹中的節(jié)點(diǎn)實際就是一個個元素(ELEMENT),一個元素包含其他的元素。對于一個DTD的定義,最關(guān)鍵的在于它內(nèi)部的元素和屬性的定義。按上面例子的理解,一個DTD文檔實際上就是元素定義的集合,而元素可能包含屬性,也可能不包含屬性。屬性可以通過以下的語法進(jìn)行定義: ATTLIST是一個XML語言的保留關(guān)鍵字,ElementName表示元素的名稱,它相當(dāng)于程序設(shè)計語言中變量的名稱。一個元素可以包含多個屬性,一個屬性由三部分構(gòu)成:AttributeName,Type和Default。AttributeName表示該屬性的名字,Type表明該屬性的類型,Defaul

23、t表明該屬性的特點(diǎn)。我們先來看一下XML所定義的屬性類型的種類,如下表:類型具體的含義說明CDATA這個類型表明該屬性只能包含字符數(shù)據(jù),比如”劉德華”,“hibernate”,”小羅”等等ID該屬性的取值必須是唯一的,就像我們每個人都有的身份證號碼是唯一的一樣,在一個文檔內(nèi)兩個ID屬性的值不能一樣IDREF,IDREFS這個屬性的值實際上就像C+中的指針一樣,它是一個指向文檔中其他地方聲明的ID值,所以,如果在具體的文檔中該屬性的取值和它所指向的ID值不匹配的話,就會返回錯誤。IDREFS和IDREF類似,但是可以具有由空格分隔的多個引用ENTITY,ENTITIESENTITY屬性的值必須對

24、應(yīng)一個在DTD文檔內(nèi)聲明的但還沒有分析過的實體。ENTITIES屬性和ENTITY類似,不同的是它可以包含多個實體,外部實體,參數(shù)實體和外部參數(shù)實體??梢园褜嶓w理解為程序設(shè)計語言中的變量NMTOKEN,NMTOKENSNMTOKEN是CDATA的一個子集,它所使用的字符必須是字母,數(shù)字,句點(diǎn),破折號,下劃線或冒號。NMTOKENS和NMTOKEN類似,不同之處在于它可以包含多個值,每個值之間用空格進(jìn)行分隔NOTATIONNOTATION的值必須引用已在DTD文檔其他地方聲明過的某注解名稱NOTATION(enumerated)該屬性的值必須匹配NOTATION名稱列表中的某個名稱。比如,我們已

25、經(jīng)存在兩個NOTATION,一個為beauty,一個為beast;我們可以定義一個屬性類型為NOTATION(beauty|beast)Enumerated該屬性幾乎和C+中的枚舉變量一樣(JDK1.5里面也有枚舉類型),我們事先定義好一些值,該屬性的值必須匹配所列出的這些值。比如現(xiàn)在有值為美麗,魅力,溫柔,體貼,該屬性的類型就可以表現(xiàn)為(美麗|魅力|溫柔|體貼),實際內(nèi)容文檔必須從這些值中取一個,值之間用“|”進(jìn)行分隔Default屬性特點(diǎn)可以有四種形式:#REQUIRED,#IMPLIED,#FIXED value,Defaultvalue.下表對這四種形式進(jìn)行了詳細(xì)介紹:值含義#REQU

26、IRED用來告訴XML解析程序,該元素的所有實例都必須有該屬性的值,就像數(shù)據(jù)表中某一個字段為NOT NULL一樣#IMPLIED表示如果該元素的實例中沒有指定該元素的值的話,就忽略該屬性,就像在數(shù)據(jù)表中某一個字段的值可以為NULL一樣#FIXED value表示包含該屬性的元素實例必須在指定列出的值中,比如 一個屬性名稱為學(xué)員:學(xué)員 CDATA #FIXED “劉德華”表示屬性值只能去“劉德華”Defaultvalue為屬性提供一個默認(rèn)的值比如一個屬性名稱為學(xué)員:學(xué)員 CDATA “劉德華”如果在該屬性的實例中沒有包含這個屬性的話,解析器就認(rèn)為該屬性的值就是“劉德華”,如果在該屬性的實例中包含

27、了這個屬性并賦值了的話,就采用這個賦值下面的DTD例子用來說明屬性類型IDREF/IDREFS的使用:如下例:請注意:這里的parentID的類型為IDREFS,這個表明該屬性的值必須在XML文檔中出現(xiàn)過。如果該屬性的值沒在XML文檔中出現(xiàn)過的話,解析器就認(rèn)為該文檔是不合法的。比如,下面的文檔就是一個不合法的文檔:原因是parentID中出現(xiàn)了值 p6,而這個值并沒有在文檔中出現(xiàn)過。元素的定義語法為:這里ELEMENT是XML語言的關(guān)鍵字,NAME表示元素的名稱,CONTENT表示元素的類型。它指定了元素起始標(biāo)記和結(jié)束標(biāo)記之間允許包含的東西。CONTENT可以以下幾種形式出現(xiàn),如下表:內(nèi)容解釋

28、EMPTY如果一個元素的CONTENT被聲明為EMPTY的話,表示該元素不能包含任何子元素和文本ANY表示該元素中可以包含任何在DTD中定義的元素內(nèi)容#PCDATA表明該元素可以包含任何字符數(shù)據(jù),但是不能在其中包含任何子元素。假設(shè)我們定義元素學(xué)員: 則下面的實例是正確的: 比耳蓋茨而下面的實例就是錯誤的: 比耳蓋茨因為在其中包含了子元素一般如果定義元素的CONTENT為#PCDATA,最好在其中只加入純文本字符數(shù)據(jù)其他類型最通常的情況是一個元素本身是由其他元素的集合構(gòu)成的在前面的一些例子中,大家一定注意到了|,+,*等這些符號,這些符號具體的含義及使用方法見下表:符號符號類型描述示例示例說明(

29、)括號用來給元素分組(劉德華|張學(xué)友),(小羅|卡羅斯),蓋茨分成三組|豎條表明在列出的對象中選折一個(愛人|朋友)表示愛人和朋友必須出現(xiàn),且只能出現(xiàn)一個+加號表示該對象最少出現(xiàn)一次,可以出現(xiàn)多次(student+)表示student必須出現(xiàn),可以出現(xiàn)多次*星號表示該對象允許出現(xiàn)任意多次,也可以是零次(愛好*)愛好可以出現(xiàn)零次到多次?問號表示該對象可以出現(xiàn),但只能出現(xiàn)一次(愛人?)愛人可以出現(xiàn)一次或零次,逗號表示對象必須按指定的順序出現(xiàn)(name,sex,age)表示name,sex,age必須順序出現(xiàn)有時我們還會在DTD中遇到一些實體的定義,一般分為以下兩種情況:內(nèi)部實體:!ENTITY t

30、exing jdakdjfaldlfldsafdfdslkfdsa外部實體:它們在XML文檔中的使用是統(tǒng)一的:computer&texing; 最后,我們在看個例子:shenzhen.dtd下面是滿足上面DTD的XML文檔:&miaoshu;XML Schema上面我們討論了用DTD來驗證XML文檔,雖然DTD勝任對XML文檔結(jié)構(gòu)的驗證,但是它有很多局限。為此,微軟提出了Schema的方案來改進(jìn)DTD。Schema從字面意義上來說,可以翻譯成架構(gòu),它的基本意思是為XML文檔制定一種模式。Schema相對于DTD的明顯好處是XML Schema文檔本身也是XML文檔,而不是像DTD一樣使用自成一

31、體的語法。這就方便了用戶和開發(fā)者,因為可以使用相同的工具來處理XML Schema和其他XML信息,而不必專門為Schema使用特殊的工具。Schema簡單易懂,懂得XML語法規(guī)則的人都可以立刻理解它。Schema的概念提出已久,但W3C的標(biāo)準(zhǔn)最近才出來,相應(yīng)的應(yīng)用支持尚未完善,但采用Schema已成為XML發(fā)展的一個趨勢。請看下例:張藝謀劉德華張藝謀劉德華從上例可看出這兩個XML文當(dāng)格式完全是一樣的。只不過采用的模式文檔不一樣,一個是DTD 一個是 XML Schema。在XML Schema中,元素是通過它的名字和類型來確定的。名稱就是該元素的名字,類型就像JAVA中的一個變量,有基本類型

32、(int double char等),有復(fù)雜類型(類類型)。在Schema中也是一樣,類型(type)可以分為兩種形式,一種是簡單類型,一種是復(fù)合類型。簡單類型不能包含元素和屬性。復(fù)雜類型不僅可以包含屬性,而且可以在其中嵌套其他的元素,或者可以和其他元素中的屬性相關(guān)聯(lián)。Schema和DTD的區(qū)別:XML從SGML中繼承了DTD,并用它來定義內(nèi)容的模式,驗證和組織元素。同時,它也有很多局限,如下所述:n DTD不遵守XML語法;n DTD不可擴(kuò)展;n DTD不支持命名空間的應(yīng)用;n DTD沒有提供強(qiáng)大的數(shù)據(jù)類型支持,只能表示很簡單的數(shù)據(jù)類型。Schema完全克服了這些弱點(diǎn),使得基于Web的應(yīng)用系

33、統(tǒng)交換XML數(shù)據(jù)更為容易。下面是它所展現(xiàn)的一些新特性:n Schema完全基于XML語法,不需要再學(xué)習(xí)特殊的語法;n Schema能用處理XML文檔的工具處理,而不需要特殊的工具;n Schema大大擴(kuò)充了數(shù)據(jù)類型,支持boolean,number,date and times,URI,integer,decimal number 等等n Schema支持原型,也就是元素的繼承。如:我們定義了一個狗數(shù)據(jù)類型,然后可以根據(jù)它產(chǎn)生狼狗和純狗兩種數(shù)據(jù)類型;n Schema支持屬性組。我們一般聲明一些公共屬性,然后可以應(yīng)用于所有的元素,屬性組允許把元素,屬性關(guān)系放于外部定義,組合;n 開放性。原來的D

34、TD只能有一個DTD應(yīng)用于一個XML文檔,現(xiàn)在可以有多個Schema運(yùn)用于一個XML文檔。Schema的數(shù)據(jù)類型基本數(shù)據(jù)類型下表列出的是最基本的數(shù)據(jù)類型,被W3C組織所承認(rèn):如下表:數(shù)據(jù)類型相關(guān)特性描述stringlength,pattern,maxLength,minLength,enumeration,whiteSpace表示字符串booleanpattern,whiteSpace布爾型decimal enumeration,pattern,minInclusive,minExclusive,maxInclusive,maxExclusive代表特定精度的數(shù)字floatpattern,en

35、umeration,minInclusive,minExclusive,maxInclusive,maxExclusive表示單精度32位浮點(diǎn)數(shù)double pattern,enumeration,minInclusive,minExclusive,maxInclusive,maxExclusive表示雙精度64位浮點(diǎn)數(shù)duration pattern,enumeration,minInclusive,minExclusive,maxInclusive,maxExclusive表示持續(xù)時間dateTimepattern,enumeration,minInclusive,minExclusive

36、,maxInclusive,maxExclusive代表特定的時間timepattern,enumeration,minInclusive,minExclusive,maxInclusive,maxExclusive代表特定的時間,但是是每天重復(fù)的datepattern,enumeration,minInclusive,minExclusive,maxInclusive,maxExclusive代表日期hexBinarylength,pattern,maxLength,minLength,enumeration代表十六進(jìn)制數(shù)anyURLlength,pattern,maxLength,minL

37、ength,enumeration代表一個URL,用來定位文件NOTATIONlength,pattern,maxLength,minLength,enumeration代表NOTATION類型擴(kuò)展數(shù)據(jù)類型下面這些類型是微軟擴(kuò)充的數(shù)據(jù)類型,并沒有被W3C組織完全采納。數(shù)據(jù)類型相關(guān)特性描述IDlength,enumeration,pattern,maxLength,minLength用于唯一標(biāo)識元素IDREFlength,enumeration,pattern,maxLength,minLength參考ID類型的元素或?qū)傩訣NTITYlength,enumeration,pattern,maxL

38、ength,minLength,whiteSpace實體類型NMTOKENlength,enumeration,pattern,maxLength,minLengthNMTOKEN類型NMTOKENSlength,enumeration ,maxLength,minLength,whiteSpaceNMTOKEN類型集longenumeration,pattern,fractionDigits,minInclusive,minExclusive,maxInclusive,maxExclusive,totalDigits,whiteSpace表示整型數(shù),大小介于-和之間intenumeration,pattern,fractionDigits,minInclusive,minExclusive,maxInclusive,maxExclusive,totalDigits,whiteSpace表示整型數(shù),大小介于-和之間sho

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論