《XML案例教程》課件第2章_第1頁
《XML案例教程》課件第2章_第2頁
《XML案例教程》課件第2章_第3頁
《XML案例教程》課件第2章_第4頁
《XML案例教程》課件第2章_第5頁
已閱讀5頁,還剩75頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章XML基礎(chǔ)語法2.1XML文檔結(jié)構(gòu)2.2XML聲明2.3XML標記與元素2.4XML命名空間2.5預(yù)定義實體與CDATA節(jié)2.6處理指令與注釋2.7內(nèi)部實體引用初探2.8格式良好與有效的XML文檔2.9綜合實例2.10本章小結(jié)習題

2.1XML文檔結(jié)構(gòu)

XML首先體現(xiàn)的是簡單性。這種簡單性不只體現(xiàn)在XML文檔是純文本,更體現(xiàn)在XML的語法規(guī)則十分精簡。相對于HTML中的幾百個預(yù)定義標記和屬性而言,XML幾乎沒有預(yù)先定義好的標記和屬性。其次,XML語法體現(xiàn)的是嚴格性。XML文檔必須遵守語法規(guī)則,在XML文檔中的任何差錯都會得到同一個結(jié)果:XML文檔不能處理或網(wǎng)頁不能被顯示。各瀏覽器開發(fā)商已經(jīng)達成協(xié)議,對XML實行嚴格而挑剔的解析,任何細小的錯誤都會被報告。

下面這個實例包含了XML文檔最基本的組成。

【例2-1】

案例說明:一個簡單的XML文檔。

程序名稱:ch2-1.xml

01<?xmlversion=“1.0”encoding=“UTF-8”standalone=“yes”?>

02<BookList>

03<Book>

04<ISBN>7-5606-0924-4/TP0851</ISBN>

05<Title>軟件工程</Title>

06<Abstract>介紹軟件工程理論...</Abstract>07<Author>鄧良松</Author>

08<Category>計算機</Category>

09<Publisher>西安電子科技大學(xué)出版社</Publisher>

10<PubDate>2001年6月</PubDate>

11<Price>20.00</Price>

12</Book>

13<Book>

14<ISBN>7-5606-0492-7/TP0229</ISBN>

15<Title>軟件系統(tǒng)開發(fā)技術(shù)(修訂版)</Title>16<Abstract>介紹軟件系統(tǒng)的開發(fā)技術(shù)...</Abstract>

17<Author>潘錦平</Author>

18<Category>計算機</Category>

19<Publisher>西安電子科技大學(xué)出版社</Publisher>

20<PubDate>2001年1月</PubDate>

21<Price>12.30</Price>

22</Book>

23</BookList>案例分析:一個XML文檔最基本的構(gòu)成包括XML聲明和XML元素。例2-1中出現(xiàn)的結(jié)構(gòu)要素如下:第01行是XML聲明,第02~23行是定義的各個元素。這個XML實例文檔描述了關(guān)于軟件開發(fā)的兩本圖書信息,包括圖書的ISBN號(<ISBN>)、圖書名(<Title>)、圖書摘要(<Abstract>)、作者(<Author>)、分類(<Category>)、出版社(<Publisher>)、出版日期(<PubDate>)、價格(<Price>)。從文檔代碼的格式縮進可以看出該文檔的結(jié)構(gòu)化描述。

2.2XML聲明

XML中規(guī)定,XML聲明(XMLDeclaration)必須是XML文檔中的第一個內(nèi)容,每個文檔都必須以XML聲明開頭,前面不允許有任何空白或注釋。W3C推薦標準提出了大小寫敏感的要求,并將聲明中的“xml”規(guī)定為小寫,而且與大多數(shù)XML屬性不同,這些必須按下面描述的順序依次出現(xiàn)。

XML聲明是處理指令(ProcessingInstruction,PI),處理指令將在2.6節(jié)詳細說明。

例2-1中的聲明代表了一個XML聲明的完整語法:

<?xmlversion=“1.0”encoding=“UTF-8”standalone=“yes”?>

這些屬性已經(jīng)在XML1.0規(guī)范中做出了定義:

(1)像所有的處理指令一樣,XML聲明也是由“<?”開始,以“?>”結(jié)束。

(2)“<?”之后的“xml”表示該文件是一個XML文件。

(3)?version——不能省略,其值必須為“1.0”。該屬性用來保證對XML未來版本的支持。

(4)?encoding——可選,其值必須是一種合法的字符編碼,例如“UTF-8”、“UTF-16”或“ISO-8859-1”(即Latin-1字符編碼)。所有XML解析器都要求至少支持“UTF-8”或“UTF-16”。如果沒有包含這個屬性,就假設(shè)是“UTF-8”或“UTF-16”編碼,這取決于開始的“<?xml”字符串的格式。采用哪種編碼取決于文檔中用到的字符集。下面是幾個常見的編碼:

(1)簡體中文碼:GB2312。

(2)繁體中文碼:BIG5。

(3)壓縮的Unicode編碼:UTF-8。

(4)壓縮的UCS編碼:UTF-16。

(5)?standalone——可選,其值必須是“yes”或“no”。如果是“yes”,就意味著所有必需的實體聲明都包含在文檔中;如果是“no”,就意味著需要外部的DTD。(參見第3章關(guān)于DTD的部分。)聲明與標記一樣,都不屬于文檔的內(nèi)容,都是根據(jù)XML規(guī)范添加進文檔的附加信息。但標記用于標注文檔的內(nèi)容,聲明則提供了控制文檔使用的必要信息。

2.3XML標記與元素

元素是XML文檔的基本單元,其中可以包含其他的元素、字符數(shù)據(jù)、字符引用、實體引用、PI、注釋以及CDATA節(jié),它們合在一起被稱做元素內(nèi)容(elementcontent),相當于一個盛放文檔內(nèi)容的容器。

在XML文檔中,所有的“內(nèi)容”都必須被各種各樣大大小小的容器封裝起來,然后在容器上標示出對承載內(nèi)容進行說明的標記,所有的XML數(shù)據(jù)(除了根元素、注釋、PI和空白)都必須包容在其他元素中。一個元素包含一個起始標記、一個結(jié)束標記及標記之間的數(shù)據(jù)內(nèi)容,格式如下:

<標記>數(shù)據(jù)內(nèi)容</標記>

元素使用標記(tag)進行分隔,由一對尖括號(“<>”)圍住元素類型名(一個字符串)。每一個元素都必須由一個起始標記和一個結(jié)束標記分隔開,這與要求比較寬松的HTML文檔不同,后者的結(jié)束標記可以省略。2.3.1標記的組成

1.起始標記

一個元素開始的分隔符被稱做起始標記。起始標記是一個包含在尖括號里的標記名。也可以把起始標記看做是“打開”了一個元素,就像我們打開一個文件或通信鏈路一樣。

2.結(jié)束標記

一個元素最后的分隔符被稱做結(jié)束標記。結(jié)束標記由一個反斜杠和標記名組成,被圍在一對尖括號中。每一個結(jié)束標記都必須與一個起始標記相匹配,關(guān)閉標記的名稱與打開標記的名稱必須相同。我們可以把結(jié)束標記理解為關(guān)閉了一個由起始標記打開的元素。下面是兩個合法的起始和結(jié)束標記:

<BookList>content</BookList>

<bookList>content</bookList>

由于XML是大小寫敏感的,因此上述兩個例子不是等同的標記。

下面是兩個合法的起始和結(jié)束標記:

<BookList>content</BookList>

<圖書列表>content</圖書列表>標記內(nèi)的名稱可以使用任何合法字母,而不一定是ASCII碼字符,所以上述兩個標記中一個使用了含義相同的中文編碼。

標記是編寫XML文檔必須用到的。在HTML文檔中所使用的標記都是已經(jīng)定義好的,有各自固定的格式。而在XML中幾乎沒有固定的標記,可以按照自己的需要來定義和使用標記,標記將語義和內(nèi)容分離開來。2.3.2標記命名規(guī)則

標記的名稱必須符合以下規(guī)則:

(1)英文名稱必須以英文字母或者下劃線“_”開頭,中文名稱必須以中文文字或者下劃線“_”開頭。

(2)在使用默認編碼集的情況下,名稱可以由英文字母、數(shù)字、下劃線“_”、連接符“-”和點號“.”構(gòu)成。在指定了編碼集的情況下,名稱中除上述字符外,還可以出現(xiàn)該字符集中的合法字符。

(3)名稱中不能含有空格。

(4)名稱中含有英文字母時,對大小寫是敏感的。2.3.3非空標記與空標記

XML元素由XML標記來定義。XML標記有兩種:非空標記與空標記。相應(yīng)的,XML元素也就有非空元素與空元素之分。

1.非空標記與非空元素

非空標記由開始標記和結(jié)束標記組成。對于XML文檔,起始標記和結(jié)束標記有著非常重要的作用,它們將文檔的數(shù)據(jù)進行結(jié)構(gòu)化組織,并確定元素的范圍和相互關(guān)系。非空元素由非空標記來定義,其一般表示形式如下:

<標記名>元素內(nèi)容</標記名>

非空標記必須是對稱性標記,起始標記和結(jié)束標記同名。在XML文檔中,起始標記和結(jié)束標記之間一定要有其他內(nèi)容、字符數(shù)據(jù)或其他標記,其中的元素內(nèi)容有時也稱為數(shù)據(jù)信息,它可以是文本,如例2-1中的“<Title>軟件工程</Title>”,也可以是子元素,如例2-1中的<Book>標記中嵌套的子元素。

<Book>

<ISBN>7-5606-0924-4/TP0851</ISBN>

<Title>軟件工程</Title>

<Abstract>介紹軟件工程理論...</Abstract>

<Author>鄧良松</Author>

<Category>計算機</Category>

<Publisher>西安電子科技大學(xué)出版社</Publisher>

<PubDate>2001年6月</PubDate>

<Price>20.00</Price>

</Book>

2.空標記與空元素

如果對稱性標記間無任何內(nèi)容,既無字符數(shù)據(jù),又無其他標記,則該標記稱為“空標記”??諛擞浛梢杂脙蓚€對稱的標記來表示,如“<Book></Book>”,注意這對標記中無任何內(nèi)容。空標記一般表示為一個單獨的標記,在標記名和定界符之間加入一個“/”符號,也就是空標記“<Book></Book>”,也可以表示為“<Book/>”??諛擞浺话愣季哂袑傩裕瑢傩詫⒃?.3.5節(jié)中進行說明。2.3.4根元素

格式正規(guī)的XML文檔的定義形式是一個簡單的層次樹,每個文檔都有一個,而且只有一個根節(jié)點,它被稱做文檔實體(documententity)或文檔根(documentroot)。這個節(jié)點可能包含PI或注釋,而且總是包含子元素樹,它們的根被稱做文檔元素(documentelement),這個元素是這個樹中其他所有元素的父元素,而且它可能不包含在其他任何元素當中。由于文檔根和文檔元素并不是一回事,因此最好不要把文檔元素看做是“根元素”(即使它是子元素樹的根)。如例2-1中的“BookList”元素,該元素包含了文檔中的所有元素。2.3.5元素的屬性

在例2-1中,所有的數(shù)據(jù)都分為標記名和元素的內(nèi)容兩類,這種表示數(shù)據(jù)的方法簡單易懂,但不是唯一的。XML元素與HTML元素一樣,可以用屬性來表達數(shù)據(jù)。

元素可以有多個屬性,但每個屬性都是由一個“名稱—數(shù)值”對組成,名稱和數(shù)值分別為一個字符串,同一個元素不能有兩個同名的屬性。例如我們表達一個矩形時,它的

長和寬就成為了矩形的屬性,如<矩形長="40"寬="60"/>,這里還采用了空標記的表示方法。屬性名是字符串,遵循與標記名同樣的規(guī)則。也就是說,屬性名必須以字母或下劃線“_”開始,名稱中后續(xù)字符可以包含字母、數(shù)字、下劃線、連字符和句號,其中不能含有空格(經(jīng)常用下劃線替代空格)。

例2-2將例2-1中原本是<Book>子元素的<ISBN>元素,改成了<Book>元素的一個屬性。

【例2-2】

案例說明:演示元素屬性的XML文檔。

程序名稱:ch2-2.xml

01<?xmlversion=“1.0”encoding=“UTF-8”standalone=“no”?>

02

<BookList>

03

<BookISBN=“7-5606-0924-4/TP0851”>

04

<Title>軟件工程</Title>

05

<Abstract>介紹軟件工程理論...</Abstract>

06

<Author>鄧良松</Author>

07

<Category>計算機</Category>08<Publisher>西安電子科技大學(xué)出版社</Publisher>

09<PubDate>2001年6月</PubDate>

10<Price>20.00</Price>

11</Book>

12<BookISBN="7-5606-0492-7/TP0229">

13<Title>軟件系統(tǒng)開發(fā)技術(shù)(修訂版)</Title>

14<Abstract>介紹軟件系統(tǒng)的開發(fā)技術(shù)...</Abstract>

15<Author>潘錦平</Author>

16<Category>計算機</Category>

17<Publisher>西安電子科技大學(xué)出版社</Publisher>

18<PubDate>2001年1月</PubDate>

19<Price>12.30</Price>

20</Book>

21</BookList>

何時使用子元素及何時使用屬性并沒有嚴格的規(guī)范可以遵循。一個好的經(jīng)驗規(guī)則是數(shù)據(jù)本身應(yīng)當存儲在元素中,而有關(guān)數(shù)據(jù)的信息(元數(shù)據(jù))應(yīng)當存儲在屬性中;不知道怎么做時,就把信息放在元素中。為區(qū)分數(shù)據(jù)與元數(shù)據(jù),首先要在設(shè)計XML文檔時考慮是否會有一些讀者希望看到一條特別的信息。如果答案是肯定的,該信息應(yīng)當包含在一個子元素中;相反,則應(yīng)包含在一個屬性中。如果從該文檔中刪除所有標記與屬性,文檔的基本信息應(yīng)當還存在。屬性是放置ID號、URL、參考資料及其他與讀者不直接相關(guān)的信息的好地方,但是,把元數(shù)據(jù)作為屬性存儲的基本規(guī)則還有許多例外,這些例外包括:①屬性不能很好地保持原文的結(jié)構(gòu);②元素允許包括元元數(shù)據(jù)(有關(guān)信息的更深層次的信息);③每個人對元數(shù)據(jù)和非元數(shù)據(jù)的理解是不一樣的;④面對以后的變化,元素更具擴展性。2.3.6元素的嵌套

XML文檔通過標記的正確嵌套來形成一個元素嵌套的層次數(shù),這種元素嵌套就好像學(xué)校嵌套了許多專業(yè),每個專業(yè)嵌套了許多班級,每個班級嵌套了很多學(xué)生,每個學(xué)生又嵌套了諸如姓名、年齡、籍貫等表達個人信息的元素。

下面即是說明一個元素嵌套的例子,在該例子中根元素是<BookList>,<BookList>又嵌套了兩本<Book>,每本<Book>又嵌套了諸多書籍出版信息的元素,其中表達作者信息的<Author>又嵌套了<Name>和<Gender>兩個元素。【例2-3】

案例說明:一個多級嵌套的XML文檔。

程序名稱:ch2-3.xml

01<?xmlversion="1.0"encoding="UTF-8"standalone="no"?>

02<BookList>

03<Book>

04<ISBN>7-5606-0924-4/TP0851</ISBN>

05<Title>軟件工程</Title>

06<Abstract>介紹軟件工程理論...</Abstract>

07<Author>08<Name>鄧良松</Name>

09<Gender>男</Gender>

10</Author>

11<Category>計算機</Category>

12<Publisher>西安電子科技大學(xué)出版社</Publisher>

13<PubDate>2001年6月</PubDate>

14<Price>20.00</Price>

15</Book>

16<Book>

17<ISBN>7-5606-0492-7/TP0229</ISBN>

18<Title>軟件系統(tǒng)開發(fā)技術(shù)(修訂版)</Title>19<Abstract>介紹軟件系統(tǒng)的開發(fā)技術(shù)...</Abstract>

20<Author>

21<Name>潘錦平</Name>

22<Gender>男</Gender>

23</Author>

24<Category>計算機</Category>

25<Publisher>西安電子科技大學(xué)出版社</Publisher>

26<PubDate>2001年1月</PubDate>

27<Price>12.30</Price>

28</Book>

29</BookList>

例2-3所表達的元素嵌套層次樹如圖2-1所示。圖2-1元素嵌套層次樹

2.4XML命名空間

命名空間的本質(zhì)是保持名稱唯一性的一種手段,網(wǎng)絡(luò)技術(shù)中的域名系統(tǒng)(DomainNameSystem,DNS)中便是一種實現(xiàn)全球名稱唯一性的重要技術(shù)。如果有兩臺郵件服務(wù)器名稱都叫mailServer,但是分處于兩個不同的公司或者機構(gòu),要想在互聯(lián)網(wǎng)上找到它們就必須使用域名系統(tǒng)。域名系統(tǒng)通過層次化命名的方式解決這個可能會出現(xiàn)的重名問題,例如mailServer.CompanyO和mailServer.CompanyT就很清楚地表明了每個郵件服務(wù)器所屬的公司,而且不會重名。因為自右向左的每一個點都可以理解為層次化命名系統(tǒng)中的一個層次(一個命名空間),在相同的層次中不重名就能保證在整個互聯(lián)網(wǎng)范圍內(nèi)不會重名,并且每層都可以有相應(yīng)的命名管理機構(gòu),避免了使用mailServerCompanyOneCom、mailServerCompanyTwoCom這種加長名稱保持唯一性的方法。

XML文檔標記的自解釋性將標記的命名完全交給了使用者,其中必然會出現(xiàn)重名的標記,為了避免同名標記的二義性,XML也引入了命名空間的概念。2.4.1命名空間的聲明形式

XML命名空間將XML文檔中的元素和屬性名稱與自定義和預(yù)定義的URI關(guān)聯(lián)起來。為命名空間用URI定義的前綴用來限定XML數(shù)據(jù)中的元素和屬性的名稱以實現(xiàn)此關(guān)聯(lián)。命名空間可防止元素和屬性名稱沖突,并允許以不同的方式處理和驗證同名的元素和屬性。在XML中定義命名空間的語法為:

<element_namexmlns:name="URI">命名空間是使用xmlns:屬性在元素上聲明的,而且這個屬性的值就是標識該命名空間的統(tǒng)一資源標志符(UniformResourceIdentifier,URI)或者統(tǒng)一資源名稱(UniformResourceName,URN。它是URI的子集)。其中<"URI">是說明命名空間URI的字符串,“name”是命名空間前綴的名稱。一旦聲明后,前綴就可以用來限定XML文檔中的元素和屬性并將它們與命名空間URI關(guān)聯(lián)。因為命名空間前綴在整個文檔中使用,所以它的長度應(yīng)較短。下面便是兩個定義命名空間的例子:

<myBook:BOOKxmlns:myBooks=“/books”>

<yourBook:BOOKxmlns:yourBooks=“urn:www.yourbook:books”>

上面兩行分別定義了兩個BOOK元素,這兩個BOOK元素不完全相同,因為每個元素分別與不同的命名空間關(guān)聯(lián)。第一個BOOK元素由命名空間前綴myBooks限定,而第二個BOOK元素由前綴yourBooks限定。通過對每個BOOK元素使用命名空間聲明,每個命名空間前綴都與不同的命名空間URI關(guān)聯(lián)。若要聲明并使用默認命名空間,可以從元素的聲明中省略別名和分號,如BOOK元素以<BOOKxmlns="/books">來定義的命名空間。任何沒有用命名空間前綴完全限定的元素均屬于默認命名空間。當在XML文檔中使用多個命名空間時,將其中一個命名空間定義為默認命名空間可以使文檔更加簡潔。只有來自非默認命名空間的元素需要完全限定。默認命名空間只適用于元素,不適用于屬性。2.4.2命名空間的作用范圍

命名空間聲明是有作用范圍的,雖然命名空間可以出現(xiàn)在文檔中的任何位置,但像編程變量一樣有作用范圍,命名空間只在相應(yīng)的范圍內(nèi)有效。有兩種作用范圍:

(1)默認命名空間:在根元素中聲明的命名空間。它應(yīng)用于文檔中所有未限定的元素。

(2)限定命名空間:在一個更具體的命名空間處于文檔中某一位置重寫時所聲明的命名空間。盡管命名空間必須聲明后才能使用,但這并不意味著它必須出現(xiàn)在XML文檔的開頭。例如,下面的示例顯示一個在數(shù)據(jù)中間聲明的限定命名空間,它是在MyBookRelated元素級別聲明的,該命名空間只應(yīng)用于該元素的子元素。

【例2-4】

案例說明:具有兩個命名空間作用范圍的XML文檔。

程序名稱:ch2-4.xml

01<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?>

02<!--關(guān)于學(xué)習軟件開發(fā)的圖書信息列表-->

03<BookListxmlns="http://BookL/Books">

04<BookISBN="7-5606-0924-4/TP0851">

05<Title>軟件工程</Title>

06<Author>鄧良松</Author>

07<Gender>男</Gender>08<Publisher>西安電子科技大學(xué)出版社</Publisher>

09<Price>20.00</Price>

10<MyBookRelatedxmlns:MyBooksRelated="http://MyBooksRelatedL/Books">

11<Book>

12<ISBN>7-5606-0492-7/TP0229</ISBN>

13<Title>軟件系統(tǒng)開發(fā)技術(shù)(修定版)</Title>

14<Author>潘錦平</Author>

15<Gender>男</Gender>

16<Publisher>西安電子科技大學(xué)出版</Publisher>

17<Price>12.30</Price>

18</Book>19<Book>

20<ISBN>7-5606-0492-7/TP0229</ISBN>

21<Title>程序設(shè)計與C語言</Title>

22<Author>梁力</Author>

23<Gender>男</Gender>

24<Publisher>西安交大出版社</Publisher>

25<Price>26.00</Price>

26</Book>

27</MyBookRelated>

28</Book>

29</BookList>案例分析:

(1)例2-4中的第03行代碼“<BookListxmlns=”http:

//BookL/Books“>”定義了作用于整個文檔的默認命名空間。

2)在第10行的代碼“<MyBookRelatedxmlns:MyBooksRelated="http://MyBooksRelatedL/Books">”定義了一個出現(xiàn)在XML文檔中的命名空間,當命名空間在文檔中出現(xiàn)時,意味著所聲明的命名空間從它的聲明位置直到元素的結(jié)尾(命名空間的聲明范圍)都有效。在本例中意味著“MyBooksRelated”命名空間的作用范圍是從第10行代碼一直到該元素的末尾第27行代碼“</MyBookRelated>”。

(3)也可以在第03行代碼中直接定義“MyBookRelated”命名空間,兩個命名空間的定義采用一個空格隔開,如下面所示定義:

<BookListxmlns=“http://BookL/Books”

xmlns:MyBooksRelated=“http://MyBooks

RelatedL/Books">

如果已為MyBookRelated元素聲明了命名空間,則使用該命名空間的元素需要通過一個冒號將該命名空間添加到元素之前,以完全限定元素。如果XML文檔采用開始就定義命名空間的方法,為了保持和例2-4中的命名空間作用范圍一致,那么其中的第10行至第27行的元素及子元素標簽都要加上“MyBookRelated:”,第10行的元素開始標簽將聲明為“<MyBooksRelated:MyBookRelated>”,第27行的元素結(jié)束標簽將聲明為“</MyBooksRelated:MyBookRelated>”。

2.5預(yù)定義實體與CDATA節(jié)

XML為顯示非ASCII碼字符集中的字符提供了兩種方法:字符引用和實體引用。

在XML中,字符引用是一個字符文字形式的替代品,當對該字符的文字形式直接處理會導(dǎo)致違反XML對格式正規(guī)的要求時,它會起到非常重要的作用。字符引用用來表示一個可顯示的字符,它由十進制或十六進制的數(shù)字前面加上“&#”或“&#x”,后面緊跟分號“;”組成。例如,“©”或“©”(在瀏覽器中)會被顯示為“?”,而“®”或“®”會被顯示為“?”。實體引用允許在元素內(nèi)容或?qū)傩灾抵胁迦肴魏巫址?,這就為字符引用提供了一種助記的替代方式。實體引用是一種合法的XML名字,前面帶有一個符號“&”,后面跟著一個分號“;”,格式如“&name;”。

有五個實體被定義為XML的固有部分,它們通常用作XML標記分隔符號的轉(zhuǎn)義序列,如表2-1所示。除了上述五個實體,所有實體都必須在文檔使用前予以定義(就像傳統(tǒng)編程中宏的定義和使用一樣)。實體在文檔的DTD中定義,DTD可以是一個被稱做“外部子集”的文檔外的獨立對象(詳見第3章),也可以是一個在文檔本身中使用<!DOCTYPE...>聲明的“內(nèi)部子集”(參見2.7節(jié)“內(nèi)部實體引用初探”部分)。例如,AT&T在支持XML的瀏覽器中會顯示為AT&T,"Jack'sTracks"則顯示為“Jack'sTracks”。

CDATA節(jié)是一種用來包含文本的方法,其對象是那些其中的字符如果不包含在CDATA節(jié)中就會被識別為標記的文本,例如表2-1中的“>”、“&”等五個符號。這項特性對于希望在自己的文檔中包含大量XML標記的使用者來說是最有用的,就像本書中的各個案例作為XML的數(shù)據(jù)信息進行存儲時需要大量的預(yù)定義實體引用,此時就應(yīng)該使用CDATA節(jié)。在CDATA段中所有文本都是純字符數(shù)據(jù)??雌饋砼c標記或者實體相似的僅僅是它們各自相應(yīng)的文本。XML處理器無論如何是不會解釋它們的。如果有這樣一個元素,標記為<Code>,數(shù)據(jù)內(nèi)容為“<Publisher>西安電子科技大學(xué)出版社</Publisher>”,則在XML中可以有兩種表達方式:

?

采用預(yù)定義實體引用的表達方式:

<Code><Publisher>西安電子科技大學(xué)出版社</Publisher></Code>

?

采用CDATA節(jié)的表達方式:

<Code><![CDATA[<Publisher>西安電子科技大學(xué)出版社</Publisher>]]></Code>第二種方法明顯要易于讀寫一些,而且還有一個額外的好處,就是允許在任何地方都可以直接剪切粘貼XML代碼。第一種方法僅僅是用正確的實體引用來代替兩個標記字符,這樣在解析時它們就不會被錯誤地解釋為元素標記。

2.6處理指令與注釋

處理指令(ProcessingInstruction,PI)將XML處理的信息傳遞給應(yīng)用程序,如例1-2中程序ch1-2.xml中XML聲明之后的<?xml-stylesheettype=“text/xsl”href=“ch1-2.xsl”?>。

PI使用的是XML元素語法的一種變形:

<?target…instruction…?>其中,target是必需的部分,而且必須是有效的XML名稱,它用來指明哪個應(yīng)用程序(或者其他對象)需要PI的幫助,...instruction...部分只不過是一個字符串表示,它可能包含任何有效的字符,除了“?>”(因為這是PI的結(jié)束符)。

另一個幾乎隨處可見的PI的用途就是將一個樣式單和XML數(shù)據(jù)對象關(guān)聯(lián)起來:

<?xml-stylesheet…?>注釋(comment)是在XML文檔中插入提示,如在例2-4中的02行代碼“<!--關(guān)于學(xué)習軟件開發(fā)的圖書信息列表-->”。這些注釋可能提供修訂記錄、歷史信息或者其他類型的可能對創(chuàng)建者或者文檔編輯者來說有著特殊意義但又不是真正的文檔內(nèi)容的元數(shù)據(jù)。注釋可能出現(xiàn)在文檔中XML聲明之后的任何地方。注釋格式:<!--注釋內(nèi)容-->

注釋應(yīng)注意的問題:

①注釋不能出現(xiàn)在XML聲明之前;

②注釋不能出現(xiàn)在標記中;

③注釋中不能出現(xiàn)連續(xù)兩個連字符,即“--”,如<!--thisisabaddocument.--doyouknow!-->;

④注釋中可包含元素,但元素中不能包含“--”;

⑤注釋不能嵌套。

2.7內(nèi)部實體引用初探

在編寫應(yīng)用程序代碼時,很多代碼提供的數(shù)學(xué)計算功能如sin、cos、求數(shù)值數(shù)組的最小值等代碼片段經(jīng)常被使用,而且一旦算法進行更改或者優(yōu)化就要在所有應(yīng)用代碼片段的地方進行更改。對此種情況常見的做法是將這些代碼片段寫成函數(shù),通過函數(shù)名和參數(shù)進行代碼的重用,如果代碼要進行更改只需要更改定義函數(shù)的代碼就可以了。這種做法大大減少了代碼數(shù)量和代碼維護量。

XML同樣提供了聲明內(nèi)容塊的方法,可以根據(jù)需要多次引用這些內(nèi)容塊,它不僅能夠節(jié)省空間,而且能夠減少文檔創(chuàng)作者的代碼輸入量。為了在DTD(在第3章將詳細說明)中聲明實體,需要定義實體的名稱及它引用的內(nèi)容。當需要使用它時,可采用特殊的語法通過名稱進行引用,這種特殊的語法能夠說明所提供的名稱是實體引用。除了本章講述過的預(yù)定義實體引用,還有一種實體引用稱為通用實體引用。通用實體是最簡單的實體形式,它能夠聲明與某個名稱相關(guān)聯(lián)的可解析的文本塊,我們將通過該名稱引用相應(yīng)的文本。這類實體聲明包含關(guān)鍵字ENTITY、實體名稱和替換值。定義通用實體的語法格式為:

<!ENTITY實體名“實體內(nèi)容”>

下面的XML文檔案例說明了如何定義通用實體以及在XML文檔中是如何引用內(nèi)部實體的。

【例2-5】

案例說明:出版社和地址信息采用內(nèi)部通用實體引用的XML文檔。

程序名稱:ch2-5.xml

01<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?>

02<!--關(guān)于學(xué)習軟件開發(fā)的圖書信息列表-->

03<!DOCTYPEBookList[

04<!ENTITYPubAddress"西安市太白南路2號">

05<!ENTITYPublisher"西安電子科技大學(xué)出版社">06]>

07<BookList>

08<BookISBN="7-5606-0924-4/TP0851">

09<Title>軟件工程</Title>

10<Author>鄧良松</Author>

11<Publisher>&Publisher;</Publisher>

12<Price>20.00</Price>

13<Address>&PubAddress;</Address>

14</Book>15<BookISBN="7-5606-0492-7/TP0229">

16<Title>軟件系統(tǒng)開發(fā)技術(shù)(修訂版)</Title>

17<Abstract>介紹軟件系統(tǒng)的開發(fā)技術(shù)...</Abstract>

18<Author>潘錦平</Author>

19<Category>計算機</Category>

20<Publisher>&Publisher;</Publisher>

21<Price>12.30</Price>

22<Address>&PubAddress;</Address>

23</Book>

24</BookList>案例分析:XML文檔中第04行和第05行代碼定義了兩個通用實體名PubAddress和Publisher。這兩個實體名稱分別代表了后面雙引號中定義的內(nèi)容塊。XML文檔中的第11行和第20行代碼對通用實體“Publisher”進行了引用,第13行和第22行代碼對通用實體“PubAddress”進行了引用。從引用的代碼段我們可以得出內(nèi)部實體引用的格式為:

<標記名>&實體名;</標記名>

圖2-2所示為例2-5在瀏覽器中的顯示結(jié)果,該結(jié)果將與通用實體名稱對應(yīng)的內(nèi)容塊顯示了出來。圖2-2例2-5在瀏覽器中的顯示結(jié)果

2.8格式良好與有效的XML文檔

“格式良好的”是對XML文檔最基本的要求。凡是“格式良好的”XML文檔都可以被XML解析器解析,進而生成對象樹,以便接受進一步的處理。XML文檔必須嚴格遵守語法規(guī)范,即都必須是“格式良好的”。要保證編寫的XML文檔是“格式良好的”,必須遵守以下XML的基本規(guī)則:

(1)文檔的開始必須是XML聲明。

(2)含有數(shù)據(jù)的元素必須有起始標記和結(jié)束標記。

(3)不含數(shù)據(jù)并且僅使用一個標記的元素必須以“/>”結(jié)束。

(4)文檔只能包含一個能夠包含全部其他元素的元素,即根元素。

(5)元素只能嵌套不能重疊。

(6)屬性值必須加引號。

(7)字符“<”和“&”只能用于起始標記和實體引用。

(8)文檔中正確地使用實體引用。同時,XML文檔還應(yīng)當符合語義方面的規(guī)范,即是“有效的”。對XML文檔有效性的檢查稱為對XML的“驗證”(Validation)?!坝行У摹盭ML必定是“格式良好的”,在此基礎(chǔ)上,還要遵守DTD(詳見第3章)或XMLSchema(詳見第4章)的語法規(guī)定,只有這樣才能保證XML文檔的易讀性,同時還能充分體現(xiàn)數(shù)據(jù)信息之間的關(guān)系,從而更好地描述

數(shù)據(jù)。

2.9綜合實例

【例2-6】

案例說明:綜合運用本章知識的一個實例。

程序名稱:ch2-6.xml

01<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?>

02<!--關(guān)于學(xué)習軟件開發(fā)的圖書信息列表-->

03<!DOCTYPEBookList[

04<!ENTITYPubAddress"西安市太白南路2號">

05<!ENTITYPublisher"西安電子科技大學(xué)出版社">06]>

07<BookListxmlns="http://BookL/Books

xmlns:MyBookRelated="http://MyBookRelatedL/Books">

08<BookISBN="7-5606-0924-4/TP0851">

09<Title>軟件工程</Title>

10<Author>鄧良松</Author>

11<Gender>男</Gender>

12<Publisher>&Publisher

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論