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

下載本文檔

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

文檔簡介

第3章使用DTD定義有效的XML文檔3.1DTD的作用和基本結(jié)構(gòu)3.2XML中引用DTD3.3使用DTD聲明XML元素3.4使用DTD聲明XML屬性3.5DTD中定義和引用實體3.6綜合實例3.7本章小結(jié)習(xí)題3

3.1DTD的作用和基本結(jié)構(gòu)

DTD是文檔類型定義,其中規(guī)定XML文檔中的元素、屬性、標記、文檔中的實體及其相互關(guān)系。DTD為XML文檔結(jié)構(gòu)制定了一套規(guī)則。例如,一項DTD指定一個BOOK元素有一個ISBN子元素、一個TITLE子元素、一個或多個AUTHOR子元素,有或沒有SUBTITLE等。3.1.1DTD的作用

DTD可以為應(yīng)用程序提供一種統(tǒng)一的XML文檔格式。XML的可擴展性雖然提供了很高的靈活性,但有時需要文檔格式統(tǒng)一。例如,為了使一部書易于排版,出版商會要求作者遵循一定的格式。如果作者用XML寫作,那么出版商就能很容易地檢查出作者是否遵守了DTD定義的預(yù)定格式,甚至找出作者在哪里以及怎樣偏離了格式。

DTD有助于數(shù)據(jù)交流和共享。如果指定DTD,依靠清晰、準確的語法定義文檔,程序員就不必為了理解XML文檔而與文檔的設(shè)計者面對面地交流。這些規(guī)則也形成了一種可靠的錯誤監(jiān)測機制,程序員或解析器可以由此查找可能的錯誤。

DTD可以使用戶脫離實際數(shù)據(jù)就能知道文檔的邏輯結(jié)構(gòu)。這意味著可以將不同的樣式和格式加在基本結(jié)構(gòu)上,而對基本結(jié)構(gòu)毫無損害。

DTD可以驗證數(shù)據(jù)的有效性。一個合法的文檔必須符合DTD指定的約束條件,而且它的基本元素必須是在文檔類型聲明中指定的。只有符合DTD規(guī)則的XML文檔才是有效的文檔。3.1.2DTD的基本結(jié)構(gòu)

XML文檔由元素和相應(yīng)的屬性組成。雖然我們還可以定義其他項,但元素和屬性是組成XML文檔的兩個主要的要素。此外,元素的內(nèi)容是通過其他元素或XML標準中規(guī)定的基本類型進行定義的。DTD必須能夠定義文檔中的所有元素、元素可以設(shè)置的屬性以及元素之間的關(guān)系。下面通過一個案例來說明DTD文檔的基本結(jié)構(gòu)?!纠?-1】

案例說明:DTD的基本結(jié)構(gòu)。

程序名稱:ch3-1.dtd

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

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

03 <!ELEMENTAnnotation(#PCDATA)>

04 <!ELEMENTTitle(#PCDATA)>

05 <!ELEMENTAbstract(#PCDATA)>

06 <!ELEMENTAuthor(#PCDATA)>07 <!ELEMENTPublisher(#PCDATA)>

08 <!ELEMENTPubDate(#PCDATA)>

09 <!ELEMENTPrice(#PCDATA)>

10 <!ELEMENTCategory(#PCDATA)>

11 <!ELEMENTBook(Title,Abstract,Author,Category,Publisher,PubDate,Price)>

12 <!ELEMENTBookList(Annotation,Book,Book)>

13 <!--"ISBN國際標準書號,唯一標識圖書,定義為Book的屬性"-->

14 <!ATTLISTBook ISBNCDATA"7-5606-0492-7">案例分析:DTD文檔ch3-1.dtd定義了一個XML文檔中所有元素屬性和實體,用于描述圖書信息。

從第01行可以看出DTD文檔也是從XML聲明開始的。DTD驗證是從SGML繼承來的一種驗證機制,在DTD中使用XML聲明,可將XML的DTD和SGML的DTD區(qū)分開來,說明本文檔用于定義XML文檔,而不是定義SGML文檔。該聲明語句可以省略。第02行定義了一個實體標記Content。案例ch3-1.xml的第03行引用了該實體,在瀏覽器中執(zhí)行XML文檔,Content實體將被DTD中定義的具體內(nèi)容“關(guān)于學(xué)習(xí)軟件開發(fā)的圖書信息列表”替換。XML文檔本體中定義的所要引用的實體必須在DTD中定義。

第03行至第12行為元素定義,定義XML文檔需要使用的所有元素標記的名稱、相互關(guān)系、元素的可取值等。它們決定了XML文檔的結(jié)構(gòu)。

第13行為DTD中的注釋。注釋以“<!--”開始,以“-->”結(jié)束,這與XML文檔中的注釋格式一致。

第14行為元素的屬性定義。元素中的屬性必須在DTD中說明。由上述DTD文檔定義的XML文檔可以用例3-2中的ch3-1.xml程序進行描述,XML文檔定義如下:

【例3-2】

案例說明:描述圖書信息的XML。

程序名稱:ch3-1.xml

01

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

02

<BookList>

03 <Annotation>&Content;</Annotation>

04 <BookISBN="7-5606-0924-4">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 <BookISBN="7-5606-0492-7">14

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

15

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

16

<Author>潘錦平,施小英</Author>

17

<Category>計算機</Category>

18

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

19

<PubDate>2001年1月</PubDate>

20

<Price>12.30</Price>

21

</Book>

22

</BookList>

3.2XML中引用DTD

DTD是與文檔相關(guān)的。通常,文檔中包含一條用于與DTD建立關(guān)聯(lián)的指令,當(dāng)驗證有效性的解析器讀到該指令時,它獲取DTD,并根據(jù)其中定義的規(guī)則對文檔進行檢驗。DTD聲明可以包含在XML中,也可以存在于獨立的DTD文檔中。下面分別介紹這兩種DTD的引用方式。3.2.1內(nèi)部引用方式

內(nèi)部引用方式將DTD直接嵌入到XML文檔內(nèi)部,在XML文檔本體中對文檔的元素、屬性或?qū)嶓w進行DTD聲明。嵌入到XML文檔內(nèi)部的DTD聲明不能重復(fù)使用。例3-3中程序ch3-2.xml采用了內(nèi)部引用DTD方式進行XML文檔定義。【例3-3】

案例說明:內(nèi)部DTD引用。

程序名稱:ch3-2.xml

01

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

02

<!DOCTYPEBookList[

03 <!ENTITYContent"關(guān)于學(xué)習(xí)軟件開發(fā)的圖書信息列表">

04 <!ELEMENTAnnotation(#PCDATA)>

05 <!ELEMENTTitle(#PCDATA)>

06 <!ELEMENTAbstract(#PCDATA)>

07 <!ELEMENTAuthor(#PCDATA)>08 <!ELEMENTPublisher(#PCDATA)>

09 <!ELEMENTPubDate(#PCDATA)>

10 <!ELEMENTPrice(#PCDATA)>

11 <!ELEMENTCategory(#PCDATA)>

12

<!ELEMENTBook(Title,Abstract,Author,Category,Publisher,PubDate,Price)>

13 <!ELEMENTBookList(Annotation,Book,Book)>

14 <!--"ISBN國際標準書號,唯一標識圖書,定義為Book的屬性"-->

15 <!ATTLISTBookISBNCDATA"7-5606-0492-7">

16 ]>17

<BookList>

18 <Annotation>&Content;</Annotation>

19 <BookISBN=“7-5606-0924-4”>

20

<Title>軟件工程</Title>

21

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

22

<Author>鄧良松</Author>

23

<Category>計算機</Category>

24

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

25

<PubDate>2001年6月</PubDate>

26

<Price>20.00</Price>27 </Book>

28 <BookISBN=“7-5606-0492-7”>

29

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

30

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

31

<Author>潘錦平,施小英</Author>

32

<Category>計算機</Category>

33

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

34

<PubDate>2001年1月</PubDate>

35

<Price>12.30</Price>

36 </Book>

37

</BookList>案例分析:在例3-3中的ch3-2.xml的第02行DOCTYPE標記為文檔類型定義指令。DOCTYPE聲明位于XML文檔的序言區(qū)。DOCTYPE聲明必須位于第01行XML聲明之

后,且位于第17行XML文檔根元素之前。XML聲明和DOCTYPE聲明之間可以插入注釋和處理指令。

DOCTYPE聲明的基本結(jié)構(gòu)為:<!DOCTYPE根元素名稱[DTD的內(nèi)容]>。DOCTYPE聲明包含關(guān)鍵字DOCTYPE、文檔根元素的名稱以及內(nèi)容聲明結(jié)構(gòu)。關(guān)鍵字DOCTYPE必須大寫。

DTD是起始于“<!DOCTYPE根元素名稱[”而終止于“]>”之間的所有內(nèi)容,但不包括“<!DOCTYPE根元素名稱[”和“]>”。程序ch3-2.xml中第3行至第15行為DTD的內(nèi)容。3.2.2外部引用方式

對XML元素、屬性或?qū)嶓w等的聲明可以包含在一個單獨的DTD文件中,文件的擴展名為“.dtd”。外部引用DTD方式將XML文檔以外的獨立DTD文檔和當(dāng)前的XML文檔關(guān)聯(lián)起來。外部引用方式比較靈活,可重復(fù)利用同一份DTD文檔,并使應(yīng)用系統(tǒng)易于同步更新及管理。引用外部DTD文件有兩種方式:SYSTEM引用方式和PUBLIC引用方式。SYSTEM引用方式主要用于引用一個作者或組織所編寫的眾多XML文件中通用的DTD。PUBLIC引用方式主要用于引用一個由權(quán)威機構(gòu)制定的、提供給特定行業(yè)或公眾使用的DTD。下面分別介紹這兩種DTD引用方式。

1.SYSTEM引用方式

SYSTEM聲明外部DTD的方式表示DTD是私有的。外部DTD聲明的語法格式為:

<!DOCTYPE根元素名稱SYSTEM“DTD_URL”>

上述語法格式說明如下:

(1)“<!”表示一條指令的開始,“>”表示指令的結(jié)束。DOCTYPE表示指令為文件類型定義指令。

(2)?SYSTEM和DOCTYPE都是關(guān)鍵字,必須大寫。

(3)“DTD_URL”指外部DTD文件的URI或文件路徑,可以是相對路徑,也可以是絕對路徑,指示XML處理器可在該位置取得DTD文檔。

(4)該語句必須出現(xiàn)在XML文檔的序言區(qū)?!纠?-4】

案例說明:外部DTD文件的SYSTEM引用方式。

程序名稱:ch3-3.xml

01

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

02

<!DOCTYPEBookListSYSTEM“D:\XML\examples\ch3-1.dtd”>

03

<BookList>

04 <Annotation>&Content;</Annotation>

05 <BookISBN="7-5606-0924-4">06 <Title>軟件工程</Title>

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

08 <Author>鄧良松</Author>

09 <Category>計算機</Category>

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

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

12 <Price>20.00</Price>

13

</Book>

14

<BookISBN="7-5606-0492-7">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>案例分析:例3-4中的程序ch3-3.xml使用SYSTEM關(guān)鍵字引用外部DTD文件ch3-1.dtd驗證XML文檔。第01行XML聲明語句中的standalone屬性取“no”值。第02行中“D:\XML\examples\ch3-1.dtd”說明被引用的外部DTD文檔ch3-1.dtd位于D:\XML\examples目錄下。

如果XML文檔和外部DTD文件在同一目錄下,可以不寫目錄路徑,采用相對路徑引用,如<!DOCTYPEBookListSYSTEM“ch3-1.dtd”>。

如果外部DTD文件位于Web服務(wù)器上,則需要使用URI定位Web服務(wù)器的外部DTD資源。如:<!DOCTYPEBookListSYSTEM"/dtd/ch3-1.dtd">。

2.PUBLIC引用方式

PUBLIC聲明外部DTD的方式表示DTD是公共的。公共DTD一般用于行業(yè)標準。DTD聲明的語法格式為:

<!DOCTYPE根元素名稱PUBLIC“DTD_Name”“DTD_URL”>

上述語法格式說明如下:

(1)“<!DOCTYPE”為文檔類型聲明的開始,“>”為文檔類型聲明的結(jié)束。

(2)“PUBLIC”為關(guān)鍵字,必須大寫,并表明該外部DTD具有名稱。

(3)“DTD_Name”為XML文檔所引用的外部公共DTD的名稱。

(4)“DTD_URL”為外部DTD文件的路徑,含義與SYSTEM引用方式中的“DTD_URL”一致。

(5)該語句必須出現(xiàn)在XML文檔的序言區(qū)。公共DTD的名稱(DTD_Name)構(gòu)成要遵循如下約定:

(1)要表明來源:如果DTD是由ISO發(fā)布的標準DTD,則名稱前要冠以“ISO”字符串;如果DTD是由ISO之外的標準組織發(fā)布的標準DTD,則名稱前要冠以“+”字符;如果不是標準的組織或者個人所發(fā)布的DTD,則名稱前要冠以“-”字符。

(2)要表明擁有者:在名稱中要包含一個表明DTD所有者的字符串。

(3)要表明主要內(nèi)容:在名稱中要包含一個表明DTD主要內(nèi)容或者類別的字符串。

(4)要表明所使用的語言:在名稱的尾部要包含一個表明所使用的語言標志(英語用EN說明,法文用FR說明,德文用DE說明,中文用ZH說明等),該語言標志必須是由ISO639所定義過的標準標志。

(5)分隔符:上述內(nèi)容之間要以兩個斜線符號“//”分隔。

(6)順序:上述內(nèi)容在名稱中出現(xiàn)的順序與上述順序相同。【例3-5】

案例說明:外部DTD文件的PUBLIC引用方式。

程序名稱:ch3-4.xml

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

02<!DOCTYPEBookListPUBLIC"-//ZWM//BookXMLVersion1.0//ZH""D:\XML\examples\ch3-1.dtd">

03 <BookList>

04 <Annotation>&Content;</Annotation>

05 <BookISBN="7-5606-0924-4">06 <Title>軟件工程</Title>

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

08 <Author>鄧良松</Author>

09 <Category>計算機</Category>

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

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

12 <Price>20.00</Price>

13 </Book>

14 <BookISBN="7-5606-0492-7">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>案例分析:第02行中PUBLIC關(guān)鍵詞后的DTD名稱“-//ZWM//BookXMLVersion1.0//ZH”的含義是:由非標準組織發(fā)布的、編寫者的標志是ZWM、關(guān)于圖書信息且用中文編寫的DTD文檔。3.2.3內(nèi)外結(jié)合的引用方式

內(nèi)部引用DTD和外部引用DTD兩種引用方式可以結(jié)合使用,目的是使用內(nèi)部DTD聲明補充或重寫引用的外部DTD。外部DTD由URL指定,聲明方式可以是SYSTEM引用或PUBLIC引用,而內(nèi)部DTD則由DTD直接指定?!纠?-6】

案例說明:可擴展的DTD文檔。

程序名稱:ch3-2.dtd

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

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

03 <!ELEMENTAnnotation(#PCDATA)>

04 <!ELEMENTTitle(#PCDATA)>

05 <!ELEMENTAbstract(#PCDATA)>

06 <!ELEMENTAuthor(#PCDATA)>

07 <!ELEMENTPublisher(#PCDATA)>08 <!ELEMENTPrice(#PCDATA)>

09 <!ELEMENTCategory(#PCDATA)>

10 <!ELEMENTBook(Title,Abstract,Author,Category,Publisher,PubDate,Price)>

11 <!ELEMENTBookList(Annotation,Book,Book)>

12 <!--"ISBN國際標準書號,唯一標識圖書,定義為Book的屬性"-->

13 <!ATTLISTBook ISBNCDATA"7-5606-0492-7">案例分析:定義圖書的出版日期(PubDate)標簽時,可以將“年-月”整體作為PubDate的數(shù)據(jù),也可以將它們分開為Year和Month兩個單獨的標簽作為PubDate的子元素。例3-6中的ch3-2.dtd的第10行將PubDate聲明為Book的子元素,但PubDate本身是否包含子元素或數(shù)據(jù),不再進行進一步聲明,留給用戶擴展?!纠?-7】

案例說明:同時使用內(nèi)部和外部DTD定義XML文檔。

程序名稱:ch3-5.xml

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

02 <!DOCTYPEBookListSYSTEM"ch3-2.dtd"[

03 <!ELEMENTPubDate(Year,Month)>

04 <!ELEMENTYear(#PCDATA)>

05 <!ELEMENTMonth(#PCDATA)>

06 ]>

07 <BookList>08 <Annotation>&Content;</Annotation>

09 <BookISBN="7-5606-0924-4">

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

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

12 <Author>鄧良松</Author>

13 <Category>計算機</Category>

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

15 <PubDate>

16

<Year>2001</Year>

17

<Month>6</Month>

18 </PubDate>

19 <Price>20.00</Price>

20 </Book>

21 <BookISBN="7-5606-0492-7">

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

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

24 <Author>潘錦平,施小英</Author>

25 <Category>計算機</Category>26

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

27

<PubDate>

28 <Year>2001</Year>

29 <Month>1</Month>

30

</PubDate>

31

<Price>12.30</Price>

32 </Book>

33 </BookList>案例分析:第02行引用外部DTD文件,第03行至第05行引用內(nèi)部DTD對PubDate標記重新定義。PubDate包含兩個子元素,即Year和Month。3.2.4檢驗XML文檔的有效性

在DTD中規(guī)定了XML文檔可使用的元素、屬性、實體以及文檔結(jié)構(gòu)后,就可以使用該DTD驗證XML文檔。DTD主要是從以下幾個方面檢驗XML文檔的有效性。

(1)發(fā)現(xiàn)XML文檔標簽的拼寫錯誤。例如,在XML文檔中有幾萬個相同標簽,其中若干個標簽拼寫錯了,DTD驗證很容易發(fā)現(xiàn)。

(2)檢查XML文檔的結(jié)構(gòu)是否符合規(guī)定的標準。例如,檢查外部程序傳入的XML文檔元素的先后順序是否符合DTD規(guī)定的順序,元素是否有屬性或含有子元素等。

(3)檢查是否使用了規(guī)定的標簽編寫XML文檔。例如,在編寫描述圖書信息的XML文檔時,DTD中沒有定義描述出版商電話信息的標簽,而編寫XML時使用了定義出版商電話信息的標簽,DTD很容易檢查出來。

3.3使用DTD聲明XML元素

使用DTD約束XML文檔時,XML文檔中所有元素必須在DTD中進行聲明。聲明內(nèi)容為元素的名稱以及元素包含的內(nèi)容和所具有的屬性。3.3.1元素的聲明

DTD遵循W3C的語法約定,DTD中使用ELEMENT關(guān)鍵字為每個元素指定語法規(guī)則。ELEMENT用于聲明XML文檔中可用的元素以及該元素的使用方式。使用ELEMENT聲明XML元素的語法為:

<!ELEMENTElement_NameContent_Model>上述語法說明如下:

(1)元素聲明以“<!”開始,以“>”結(jié)束。

(2)元素聲明指令“ELEMENT”為關(guān)鍵字,必須大寫。

(3)?Element_Name為要聲明的元素的名稱。

(4)?Content_Model為元素內(nèi)容格式的定義。元素的內(nèi)容格式有多種。

1.基本元素聲明

基本元素的內(nèi)容為字符數(shù)據(jù),不含子元素。如案例ch3-1.dtd的第03行至第10行:

03 <!ELEMENTAnnotation(#PCDATA)>

04 <!ELEMENTTitle(#PCDATA)>

05 <!ELEMENTAbstract(#PCDATA)>

06 <!ELEMENTAuthor(#PCDATA)>

07 <!ELEMENTPublisher(#PCDATA)>

08 <!ELEMENTPubDate(#PCDATA)>

09 <!ELEMENTPrice(#PCDATA)>

10 <!ELEMENTCategory(#PCDATA)>

以上8個元素的內(nèi)容都為字符數(shù)據(jù)。

2.復(fù)合元素聲明

復(fù)合元素的內(nèi)容包含子元素。如案例ch3-1.dtd中的第11行:

11 <!ELEMENTBook(Title,Abstract,Author,Category,Publisher,PubDate,Price)>

Book元素包含了第03行至第10行定義的8個子元素,且在XML文檔中這8個子元素必須按Book中聲明的先后次序出現(xiàn),次序不可顛倒。

3.根元素聲明

根元素為XML文檔中最外層的元素,包含了DTD中定義的其他所有元素。如案例ch3-1.dtd中的第12行:

12

<!ELEMENTBookList(Annotation,Book,Book)>

其中,BookList元素為XML文檔的根元素,它包含一個Annotation元素和兩個Book元素。3.3.2元素內(nèi)容的控制

使用ELEMENT關(guān)鍵字聲明元素,可以對元素的內(nèi)容格式(Content_Model)進行控制。元素的內(nèi)容有多種模型,下面具體介紹。

1.#PCDATA(可解析的字符數(shù)據(jù))

DTD中所有非標簽文本被稱為可解析字符數(shù)據(jù)(ParserCharacterDATA),在元素聲明中縮寫為#PCDATA。PCDATA為關(guān)鍵字,需要大寫??山馕鲎址麛?shù)據(jù)只包含簡單的字符數(shù)據(jù),不包含標簽文本。例如,DTD片段<!ELEMENTTitle(#PCDATA)>定義了一個標簽<Title>,標簽的內(nèi)容為文本字符。該DTD片段對應(yīng)的XML文檔片段為:<Title>軟件工程</Title>。

2.ANY(可包含任何內(nèi)容)

ANY指定元素包含任何子元素或文本內(nèi)容,且沒有順序的限制,相當(dāng)于該元素的內(nèi)容沒有任何限制。ANY為關(guān)鍵字,需要大寫。

【例3-8】

案例說明:可包含任何元素或文本的內(nèi)容模型。

程序名稱:ch3-6.xml

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

02 <!DOCTYPEStudentList[03

<!ELEMENTStudentANY>

04

<!ELEMENTStudentList(Student,Student)>

05 ]>

06 <StudentList>

07

<Student/>

08

<Student>軟英051班學(xué)生</Student>

09 </StudentList>案例分析:第03行Student元素內(nèi)容聲明為ANY,則該元素的內(nèi)容不受限制。對應(yīng)的第07行為空元素,第08行元素含有文本。

3.EMPTY(空元素)

EMPTY指定元素不能包含子元素或文本內(nèi)容。EMPTY是聲明語句的關(guān)鍵字,必須大寫。例如,DTD片段<!ELEMENTAliasEMPTY>聲明一個元素<Alias>,內(nèi)容為空。該DTD片段對應(yīng)的XML片段為<Alias></Alias>或者<Alias/>。

4.元素的順序關(guān)系

使用序列可以指定元素中包含什么子元素,且以何種順序出現(xiàn)。序列是一個以逗號分隔的元素名稱列表,用來告訴XML處理器定義的元素中必須出現(xiàn)什么元素,且以何種順序出現(xiàn)。序列的格式如下:

<!ELEMENT元素名稱(子元素1,子元素2,子元素3,…)>

XML中的“子元素1”、“子元素2”、“子元素3”等子元素必須按先后順序出現(xiàn)。在子元素后面可以跟“*”、“+”和“?”修飾符,指定子元素出現(xiàn)的次數(shù)。如果沒有修飾符,則該元素必須出現(xiàn)一次。修飾符的含義如下:

(1)“*”表示該元素出現(xiàn)0次或多次,即任意次。

(2)“+”表示該元素必須至少出現(xiàn)一次。

(3)“?”表示該元素只能出現(xiàn)0次或1次。【例3-9】

案例說明:控制子元素出現(xiàn)順序及出現(xiàn)次數(shù)。

程序名稱:ch3-7.xml

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

02 <!DOCTYPEBookList[

03 <!ENTITYContent"關(guān)于學(xué)習(xí)軟件開發(fā)的圖書信息列表">

04 <!ELEMENTAnnotation(#PCDATA)>

05 <!ELEMENTTitle(#PCDATA)>

06 <!ELEMENTAbstract(#PCDATA)>

07 <!ELEMENTAuthor(#PCDATA)>08 <!ELEMENTPublisher(#PCDATA)>

09 <!ELEMENTPubDate(#PCDATA)>

10 <!ELEMENTPrice(#PCDATA)>

11 <!ELEMENTCategory(#PCDATA)>

12 <!ELEMENTISBN(#PCDATA)>

13 <!ELEMENTBook(Title,Abstract?,Author+,Category,Publisher,PubDate,Price,ISBN)>

14 <!ELEMENTBookList(Annotation,Book*)>

15 ]>

16 <BookList>17 <Annotation>&Content;</Annotation>

18 <Book>

19

<Title>軟件工程</Title>

20

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

21

<Author>鄧良松</Author>

22

<Author>劉海巖</Author>

23

<Category>計算機</Category>

24

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

25

<PubDate>2001年6月</PubDate>

26

<Price>20.00</Price>

27

<ISBN>7-5606-0924-4</ISBN>28 </Book>

29 <Book>

30

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

31

<Author>潘錦平</Author>

32

<Category>計算機</Category>

33

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

34

<PubDate>2001年1月</PubDate>

35

<Price>12.30</Price>

36

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

37 </Book>

38

</BookList>案例分析:第13行Book元素的子元素Title、Abstract、Author、Category、Publisher、PubDate、Price、ISBN的聲明規(guī)定了XML文檔的標簽是有序的。第19行至第27行以及第30行至第36行的元素必須按DTD中定義的次序出現(xiàn),不可顛倒。

第14行Book元素后跟“*”控制符,表示Book元素可以是0個或任意多個,案例中為2個,描述了兩本書的信息。第13行Author子元素后跟“+”控制符,表示書的編著者至少有一個。案例中“軟件工程”的編著者有兩個即“鄧良松”和“劉海巖”,由第21行和第22行的Author子元素描述。“軟件系統(tǒng)開發(fā)技術(shù)(修訂版)”的編著者有一個即“潘錦平”,由第31行的子元素Author描述。

第13行的子元素Abstract后跟“?”控制符,表示圖書的摘要描述可以沒有,或者僅有一個。案例中“軟件工程”有一個摘要,由第20行的Abstract子元素描述。圖書“軟件系統(tǒng)開發(fā)技術(shù)(修訂版)”沒有提供摘要描述。

5.元素的選擇關(guān)系

有時需要在兩個或多個互斥的元素中進行選擇。例如,在一項描述顧客購物的DTD中,結(jié)帳方式信息中的每項Payment元素都有Credit_Card子元素或Cash子元素以便提供付款方式的信息,即采用信用卡支付還是現(xiàn)金支付。然而,單獨的Payment元素不能同時使用兩者,只能選擇一種支付方式。在父元素聲明中,可以使用豎線“|”而不是逗號來分開子元素,以便指明文檔作者需要輸入一個或另一個子元素。

選擇性元素還可以和元素出現(xiàn)次數(shù)的控制符組合使用,實現(xiàn)對元素內(nèi)容的靈活控制?!纠?-10】

案例說明:描述顧客購物DTD中付款方式信息的選擇。

程序名稱:ch3-3.dtd

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

02 <!ELEMENTCash(#PCDATA)>

03 <!ELEMENTCredit_Card(#PCDATA)>

04 <!ELEMENTPayment(Cash|Credit_Card)>

案例分析:第02行聲明現(xiàn)金支付金額標簽,第03行聲明信用卡支付金額標簽,第04行聲明支付方式為現(xiàn)金支付或信用卡支付?!纠?-11】

案例說明:選擇性元素和修飾控制符的組合使用。

程序名稱:ch3-8.xml

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

02 <!DOCTYPEOrder[

03 <!ELEMENTOrderID(#PCDATA)>

04 <!ELEMENTBookName(#PCDATA)>

05 <!ELEMENTNumber(#PCDATA)>

06 <!ELEMENTUnitPrice(#PCDATA)>07 <!ELEMENTCash(#PCDATA)>

08 <!ELEMENTCredit_Card(#PCDATA)>

09 <!ELEMENTBooks(BookName,Number,

UnitPrice)>

10 <!ELEMENTOrder(OrderID,Books+,(Cash|Credit_Card)?)>

11 ]>

12 <Order>

13 <OrderID>1000001</OrderID>

14 <Books>

15 <BookName>軟件工程</BookName>16

<Number>1</Number>

17

<UnitPrice>20.00</UnitPrice>

18 </Books>

19 <Books>

20

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

21

<Number>1</Number>

22

<UnitPrice>12.30</UnitPrice>

23 </Books>

24 <Cash>32.30</Cash>

25 </Order>案例分析:第09行聲明訂購圖書的基本信息,包括書名(BookName)、訂購數(shù)量(Number)和單價(UnitPrice)。第10行聲明訂單的基本信息,包括訂單號(OrderID)、圖書(Books)和應(yīng)付款金額。其中,Books使用了“+”修飾符,表示一份購書訂單至少包含一本圖書。應(yīng)付款組合使用了“|”和“?”控制符,表示Cash和Credit_Card都不選(如贈書)或只選其中一個。程序ch3-8.xml中訂單編號為1000001的訂單訂購了兩本圖書,采用現(xiàn)金支付(Cash),總金額為32.30元。

6.混合型元素

在實際應(yīng)用中,一個元素可能既包含字符數(shù)據(jù)類型(#PCDATA),又包含子元素,這樣的元素可以定義為混合型元素?;旌闲驮芈暶鞯幕菊Z法如下:

<!ELEMENT元素名稱(#PCDATA|子元素1|子元素2|子元素3|…)*>

混合元素模型具有局限性,它不能夠設(shè)定子元素的順序及出現(xiàn)的次數(shù),破壞了XML文檔的層次結(jié)構(gòu),不建議使用。實際使用時可以將#PCDATA可析字符數(shù)據(jù)用新元素封裝,以代替混合元素模型?!纠?-12】

案例說明:混合元素模型的使用。

程序名稱:ch3-9.xml

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

02 <!DOCTYPEBookList[

03 <!ELEMENTTitle(#PCDATA)>

04 <!ELEMENTAbstract(#PCDATA)>

05 <!ELEMENTAuthor(#PCDATA)>

06 <!ELEMENTPublisher(#PCDATA)>

07 <!ELEMENTPubDate(#PCDATA)>08 <!ELEMENTISBN(#PCDATA)>

09 <!ELEMENTBook(#PCDATA|Title|Abstract|Author

|Publisher|PubDate|ISBN)*>

10 <!ELEMENTBookList(Book)*>

11

]>

12

<BookList>

13 <Book>

14 計算機類圖書

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

16 <Abstract>介紹軟件工程理論...</Abstract>17 <Author>鄧良松,劉海巖</Author>

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

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

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

21 </Book>

22 <Book>

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

24 <ISBN>7-5606-0492-7</ISBN>

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

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

28 </Book>

29 <Book>

30 <Title>基督山伯爵</Title>

31 <Author>大仲馬</Author>

32 世界文學(xué)名著

33 </Book>

34

</BookList>案例分析:第09行聲明了Book元素。Book元素是混合型元素,其內(nèi)容可以是文本字符數(shù)據(jù)(#PCDATA)、子元素Title、Abstract、Author、Publisher、PubDate或ISBN之一,可選的混合內(nèi)容后跟“*”控制符,表示Book元素的內(nèi)容可以是0個或任意多個。程序ch3-9.xml中第13行至第21行的Book由一個字符數(shù)據(jù)和6個子元素組成。第22行至第28行的Book由5個子元素組成,不含字符數(shù)據(jù)。第29行至第33行的Book由2個子元素和字符數(shù)據(jù)組成。

7.元素分組

在聲明復(fù)合元素時,可以使用圓括號“()”將邏輯含義相同的部分子元素組合成一個“元素組”,“元素組”和普通元素在特性上相似。在元素組內(nèi)部,元素要按規(guī)定次序出現(xiàn),而且可以用修飾符“*”、“+”和“?”控制元素出現(xiàn)的次數(shù)?!霸亟M”增加了元素內(nèi)容設(shè)定的靈活性?!纠?-13】

案例說明:DTD中使用元素分組聲明XML標簽。

程序名稱:ch3-10.xml

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

02 <!DOCTYPEOrder[

03 <!ELEMENTOrderID(#PCDATA)>

04 <!ELEMENTBookName(#PCDATA)>

05 <!ELEMENTNumber(#PCDATA)>

06 <!ELEMENTUnitPrice(#PCDATA)>

07 <!ELEMENTCash(#PCDATA)>08 <!ELEMENTCredit_Card(#PCDATA)>

09 <!ELEMENTPayment(Cash|Credit_Card)>

10 <!ELEMENTOrder_Date(#PCDATA)>

11 <!ELEMENTOrder(OrderID,(BookName,Number,UnitPrice)+,Payment,Order_Date)>

12

]>

13

<Order>

14 <OrderID>10000001</OrderID>

15 <BookName>軟件工程</BookName>

16 <Number>1</Number>17 <UnitPrice>20.00</UnitPrice>

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

19 <Number>1</Number>

20 <UnitPrice>12.30</UnitPrice>

21 <Payment>

22 <Cash>32.30</Cash>

23 </Payment>

24 <Order_Date>2007年5月10日</Order_Date>

25

</Order>案例分析:用戶訂購圖書的訂單中,描述圖書訂購信息的元素是一致的,可以用元素組來聲明。第11行將BookName(圖書名稱)、Number(訂購數(shù)量)和UnitPrice(單價)組成元素組進行聲明,使用“+”控制符,表示該元素組至少出現(xiàn)一次。第15行至第20行使用元素組描述了兩種圖書的訂購信息。

3.4使用DTD聲明XML屬性

屬性是可以在開始和空標簽中使用的用來添加附加信息的名值對。屬性是對元素的補充和修飾,它能夠?qū)⒁恍┖唵蔚奶匦耘c元素相關(guān)聯(lián)。通過屬性,我們可以給元素綁定大量信息。例如,<BookTitle="軟件系統(tǒng)開發(fā)技術(shù)(修訂版)"ISBN="7-5606-0492-7"UnitPrice="12.30"/>,其中元素Book的屬性Title指出書名“軟件系統(tǒng)開發(fā)技術(shù)(修訂版)”,Book的ISBN屬性值為“7-5606-0492-7”,Book的UnitPrice屬性指出圖書的單價為“12.30”。下面具體介紹屬性的聲明、屬性默認值的設(shè)定和屬性值類型的設(shè)定。3.4.1屬性聲明的基本語法

在XMLDTD中是使用ATTLIST標記聲明屬性的。對于含屬性的元素,至少要通過一個ATTLIST標記聲明其屬性列表。ATTLIST聲明由以下部分構(gòu)成:ATTLIST關(guān)鍵字、屬性修飾的元素名稱,以及零個或多個屬性定義。為了增強可讀性,每個屬性定義通常占據(jù)單獨的一行。屬性定義包含屬性名稱、類型和缺省聲明。在DTD中定義屬性的基本語法為:

<!ATTLISTElementNameAttributeNameType[Keyword][DefaultValue]>上述語法說明如下:

(1)?ATTLIST為定義屬性的指令,是關(guān)鍵字,必須大寫。

(2)?ElementName為DTD中聲明的元素名稱。

(3)?AttributeName為元素ElementName的屬性名稱。

(4)?Type為屬性值的類型。DTD中屬性值的類型的定義有10種,將在3.4.3節(jié)中介紹。

(5)?Keyword為設(shè)定屬性缺省值的關(guān)鍵字,可缺省。屬性缺省值設(shè)定將在3.4.2節(jié)中介紹。

(6)?DefaultValue為屬性的缺省值,該項可以缺省。定義元素的屬性時,可以指定一個缺省值,如果XML文檔中沒有明確對元素屬性賦值,則DTD中定義的該屬性的缺省值將被選用。3.4.2設(shè)定屬性的缺省值

屬性的聲明可以有幾種不同的缺省值,它定義了屬性在文檔中出現(xiàn)的方式。屬性的缺省值可以直接指定,可以要求作者必須提供,也可以忽略屬性值,甚至可以指定固定值。下面分別對這幾種情況進行討論。

1.直接指定缺省值

在DTD中使用關(guān)鍵字ATTLIST進行屬性聲明時,可以給屬性一個缺省值,該缺省值用引號包圍。在XML中如果重新設(shè)定了屬性的新值,則新值將代替缺省值。如果沒有重新設(shè)定該屬性的新值,則DTD中定義的缺省值將作為該屬性的值。聲明語法如下:

<!ATTLIST元素名稱屬性名稱屬性類型"缺省值">下面通過一個案例來說明。

【例3-14】

案例說明:直接指定屬性缺省值。

程序名稱:ch3-11.xml

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

02 <!DOCTYPEBookList[

03 <!ELEMENTTitle(#PCDATA)>

04 <!ELEMENTAuthor(#PCDATA)>

05 <!ELEMENTPublisher(#PCDATA)>

06 <!ELEMENTPubDate(#PCDATA)>07 <!ELEMENTISBN(#PCDATA)>

08 <!ELEMENTBook(Title,Author,Publisher,

PubDate,ISBN)>

09 <!ELEMENTBookList(Book)*>

10 <!ATTLISTBookCategoryCDATA"計算機">

11 ]>

12 <BookList>

13 <BookCategory="計算機">

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

15 <Author>鄧良松,劉海巖</Author>16 <Publisher>西安電子科技大學(xué)出版社</Publisher>

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

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

19 </Book>

20 <Book>

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

22 <Author>潘錦平</Author>

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

24 <PubDate>2001年1月</PubDate>25 <ISBN>7-5606-0492-7</ISBN>

26 </Book>

27 <BookCategory=“小說”>

28 <Title>基督山伯爵</Title>

29 <Author>大仲馬</Author>

30 <Publisher>北京-中國對外翻譯出版公司</Publisher>

31 <PubDate>2005年5月</PubDate>

32 <ISBN>7-5001-1365-X</ISBN>

33 </Book>

34

</BookList>案例分析:第10行的DTD聲明中為元素Book定義一個屬性Category,該屬性為字符數(shù)據(jù)類型,屬性的默認值為“計算機”,定義了圖書默認類別為計算機類圖書。案例中的XML文檔描述了三本圖書的信息。第13行為第一本圖書“軟件工程”指定了圖書的類別“計算機”。第20行沒有指定圖書“軟件系統(tǒng)開發(fā)技術(shù)(修訂版)”的類別,在實際使用時,XML的解析器將會使用DTD中聲明的屬性缺省值“計算機”作為該圖書的類別。第27行指定了圖書“基督山伯爵”的類別為“小說”,實際使用時XML解析器將會用新值“小說”代替屬性缺省值“計算機”。

圖3-1為程序ch3-11.xml在瀏覽器中的顯示結(jié)果。圖3-1程序ch3-11.xml在瀏覽器中的顯示結(jié)果

2.#REQUIRED

有時無法知道屬性的默認值是什么,但在XML文檔中又必須要求提供屬性值。這時可以使用大寫關(guān)鍵字#REQUIRED作為屬性的缺省值,要求XML文檔的編寫者在編寫XML文檔時,必須給設(shè)定了關(guān)鍵字#REQUIRED的屬性賦值,并將其包含到指定的元素中。如果語法分析器遇到應(yīng)包含該屬性的元素而沒有設(shè)定該屬性,將返回一個錯誤。聲明語法如下:

<!ATTLIST元素名稱屬性名稱屬性類型#REQUIRED>【例3-15】

案例說明:使用關(guān)鍵字#REQUIRED作為屬性的缺省值。

案例名稱:ch3-12.xml

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

02 <!DOCTYPEBookList[

03 <!ELEMENTTitle(#PCDATA)>

04 <!ELEMENTAuthor(#PCDATA)>

05 <!ELEMENTPublisher(#PCDATA)>

06 <!ELEMENTPubDate(#PCDATA)>

07 <!ELEMENTISBN(#PCDATA)>08 <!ELEMENTBook(Title,Author,Publisher,PubDate,ISBN)>

09 <!ELEMENTBookList(Book)*>

10 <!ATTLISTBook

CategoryCDATA“計算機”

PageCountCDATA#REQUIRED>

11

]>

12

<BookList>

13 <BookCategory="計算機"PageCount="308">

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

15 <Author>鄧良松,劉海巖</Author>16

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

17

<PubDate>2001年6月</PubDate>

18

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

19

</Book>

20

<BookPageCount=“248”>

21

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

22

<Author>潘錦平</Author>

23

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

24

<PubDate>2001年1月</PubDate>

25

<ISBN>7-5606-0492-7</ISBN>26 </Book>

27 <BookCategory=“小說”PageCount=“239”>

28 <Title>基督山伯爵</Title>

29 <Author>大仲馬</Author>

30 <Publisher>北京-中國對外翻譯出版公司</Publisher>

31 <PubDate>2005年5月</PubDate>

32 <ISBN>7-5001-1365-X</ISBN>

33 </Book>

34

</BookList>案例分析:第10行的DTD為元素Book聲明了屬性Category(圖書類別)、PageCount(圖書總頁數(shù))。Category指定了默認值“計算機”,PageCount沒有直接指定默認值,而是使用關(guān)鍵字#REQUIRED要求在編寫XML文檔時必須根據(jù)實際情況封裝圖書總頁數(shù)。程序ch3-12.xml的第13、20、27行分別使用屬性PageCount指出三本圖書的總頁數(shù)。

3.#IMPLIED

當(dāng)不強調(diào)為某個屬性指定缺省值,而且也不需要強制文檔開發(fā)人員必須在文檔中使用該屬性時,可以使用大寫的關(guān)鍵字#IMPLIED作為該屬性的缺省值。XML的處理器在處理XML文檔時,如果XML文檔的編寫者為缺省值是#IMPLIED的屬性設(shè)定屬性值,處理器則向XML應(yīng)用程序提供編寫者設(shè)定的屬性值;如果XML文檔編寫者沒有設(shè)定屬性值,則處理器明確通知XML應(yīng)用程序該屬性沒有可用值。#IMPLIED的聲明語法如下:

<!ATTLIST元素名稱屬性名稱屬性類型#IMPLIED>【例3-16】

案例說明:使用關(guān)鍵字#IMPLIED作為屬性的缺省值。

程序名稱:ch3-13.xml

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

02 <!DOCTYPEBookList[

03 <!ELEMENTTitle(#PCDATA)>

04 <!ELEMENTAuthor(#PCDATA)>

05 <!ELEMENTPublisher(#PCDATA)>

06 <!ELEMENTPubDate(#PCDATA)>

07 <!ELEMENTISBN(#PCDATA)>08 <!ELEMENTBook(Title,Author,Publisher,PubDate,

ISBN)>

09 <!ELEMENTBookList(Book)*>

10 <!ATTLISTBook

CategoryCDATA“計算機”

PageCountCDATA#IMPLIED>

11

]>

12

<BookList>

13 <BookCategory="計算機">

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

15 <Author>鄧良松,劉海巖</Author>16

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

17

<PubDate>2001年6月</PubDate>

18

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

19 </Book>

20 <Book>

21

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

22

<Author>潘錦平</Author>

23

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

24

<PubDate>2001年1月</PubDate>

25

<ISBN>7-5606-0492-7</ISBN>26 </Book>

27 <BookCategory=“小說”PageCount=“239”>

28 <Title>基督山伯爵</Title>

29 <Author>大仲馬</Author>

30 <Publisher>北京-中國對外翻譯出版公司</Publisher>

31 <PubDate>2005年5月</PubDate>

32 <ISBN>7-5001-1365-X</ISBN>

33 </Book>

34

</BookList>案例分析:第10行聲明了元素Book的屬性PageCount。PageCount的缺省值為#IMPLIED,案例中XML第13行和第20行沒有為圖書指定總頁數(shù),第27行指定了圖書總頁數(shù)為239頁。XML處理器在處理該XML文檔時,對“軟件工程”和“軟件系統(tǒng)開發(fā)技術(shù)(修訂版)”兩本圖書將不向應(yīng)用程序提供PageCount的屬性值,而在處理“基督山伯爵”圖書時向應(yīng)用程序提供PageCount的屬性值239。

程序ch3-13.xml在瀏覽器中的顯示結(jié)果如圖3-2所示。圖3-2程序ch3-13.xml在瀏覽器中的顯示結(jié)果

4.#FIXED

如果需要為一個特定的屬性提供默認值,并且不希望XML的編寫者將默認值替代掉,可以使用大寫關(guān)鍵字#FIXED為屬性提供默認值。#FIXED加上屬性默認值,屬性的值永遠固定為默認值。如果元素中不包含該屬性,XML解析器將默認值作為該元素指定屬性的屬性值。包含#FIXED關(guān)鍵字的屬性聲明語法如下:

<!ATTLIST元素名稱屬性名稱屬性類型#FIXED"默認值">【例3-17】

案例說明:使用#FIXED關(guān)鍵字聲明屬性默認值。

程序名稱:ch3-14.xml

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

02 <!DOCTYPEBookList[

03 <!ELEMENTTitle(#PCDATA)>

04 <!ELEMENTAuthor(#PCDATA)>

05 <!ELEMENTPublisher(#PCDATA)>

06 <!ELEMENTPubDate(#PCDATA)>

07 <!ELEMENTISBN(#PCDATA)>08 <!ELEMENTBook(Title,Author,Publisher,

PubDate,ISBN)>

09 <!ELEMENTBookList(Book)*>

10 <!ATTLISTBook

CategoryCDATA#FIXED“計算機”

PageCountCDATA#IMPLIED>

11

]>

12

<BookList>

13 <BookCategory=“計算機”PageCount=“308”>

14

<Title>軟件工程</Title>

15

<Author>鄧良松,劉海巖</Author>

16

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

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

19 </Book>

20 <BookPageCount=“248”>

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

22 <Author>潘錦平</Author>

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

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

25 <ISBN>7-5606-0492-7</ISBN>

26 </Book>

27

</BookList>案例分析:第10行使用關(guān)鍵字#FIXED聲明元素Book的屬性Category,指定Category的默認值為“計算機”,則程序ch3-14.xml文檔只能描述圖書類別為計算機類的圖書。文檔中出現(xiàn)其他類的圖書則不合法。第13行使用屬性Category指定圖書類別為“計算機”。第20行沒有設(shè)置屬性Category,XML文檔解析

溫馨提示

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

評論

0/150

提交評論