版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)貿(mào)市場營銷方案(5篇)
- 異構(gòu)系統(tǒng)狀態(tài)估計-洞察分析
- 藥物毒理學(xué)研究-洞察分析
- 云計算環(huán)境下的資產(chǎn)策略-洞察分析
- 單招面試自我介紹(14篇)
- 網(wǎng)絡(luò)音樂平臺品牌建設(shè)-洞察分析
- 企業(yè)中如何實施高效且富有創(chuàng)意的安全教育方案
- 《登快閣黃庭堅》課件
- 顧問勞動合同三篇
- 親子共讀增進溝通的良方
- 營銷中心物業(yè)服務(wù)標準講解
- 五年級閱讀指導(dǎo)課(課堂PPT)
- 廣東飼料項目建議書(參考范文)
- 液堿濃度、密度對照表
- MODBUS通訊協(xié)議編程(VB源代碼)
- 焊工證項目新舊對照表
- 全國護士延續(xù)注冊體檢表
- 阿壩州近12a大風(fēng)時空分布特征分析
- 壓力管道安裝工藝和檢驗規(guī)定
- 小學(xué)英語語音專項練習(xí)題(附答案)
- 2022年2022年財務(wù)部KPI考核指標匯總
評論
0/150
提交評論