第3章 XML文檔類型定義 DTD_第1頁
第3章 XML文檔類型定義 DTD_第2頁
第3章 XML文檔類型定義 DTD_第3頁
第3章 XML文檔類型定義 DTD_第4頁
第3章 XML文檔類型定義 DTD_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章XML文檔類型定義

----DTD

1目標(biāo)理解文檔類型定義DTD聲明元素聲明屬性聲明實(shí)體聲明2XML確認(rèn)

----確保XML文檔中數(shù)據(jù)的一致性

符合語法的XML文檔稱為結(jié)構(gòu)良好的XML文檔。通過DTD驗(yàn)證的XML文檔稱為有效的XML文檔。33.1 DTD概述文檔類型定義--DocumentTypeDefinitionDTD用來描述XML文檔的結(jié)構(gòu),DTD定義了XML文檔中可用的合法元素。用DTD指定:可以在文檔中存在的元素元素可以具有的屬性在元素內(nèi)部元素的層次結(jié)構(gòu)元素在整個(gè)文檔中出現(xiàn)的順序43.2DTD聲明DTD可以是一個(gè)完全獨(dú)立的文件,也可以在XML文件中直接設(shè)定。DTD分為外部DTD(在XML文件中調(diào)用另外已經(jīng)編輯好的DTD)和內(nèi)部DTD(在XML文件中直接設(shè)定DTD)兩種。

53.2.1內(nèi)部DTD

內(nèi)部DTD是在XML文件的文件序言區(qū)域中定義的。內(nèi)部DTD的XML文檔的結(jié)構(gòu)為:

<?xmlversion="1.0"?>

<!DOCTYPE根元素名[

元素描述

]>

文檔數(shù)據(jù)區(qū).......63.2.1內(nèi)部DTD(續(xù))<?xmlversion='1.0'encoding='gb2312'?><!DOCTYPEpoem[<----------------根元素的名稱<!ELEMENTpoem(author,title,content)><-----------子元素的名稱及順序<!ELEMENTauthor(#PCDATA)><------------------子元素的數(shù)據(jù)類型<!ELEMENTtitle(#PCDATA)><!ELEMENTcontent(#PCDATA)>]><------------------------結(jié)束標(biāo)簽<poem><author>王維</author><title>鹿柴</title><content>空山不見人,但聞人語聲.返景入深林,復(fù)照青苔上.</content></poem>注意:例中的定義關(guān)鍵字一定要大寫,如DOCTYPE、ELEMENT、#PCDATA,且元素名稱與數(shù)據(jù)類型之間也要有空格。內(nèi)部DTD示例73.2.2外部DTD外部DTD是一個(gè)獨(dú)立于XML文件的文件,實(shí)際上也是一個(gè)文本文件,只是使用.dtd為文件擴(kuò)展名。外部DTD的好處是:它可以方便高效地被多個(gè)XML文檔所共享。外部DTD的創(chuàng)建方式、語法和內(nèi)部DTD是一樣的。83.2.2外部DTD(續(xù)2-1)使用外部DTD的XML文檔的結(jié)構(gòu)為:<?xmlversion="1.0"?><!DOCTYPE根元素名SYSTEM/PUBLIC"外部DTD文件名及其位置">文檔數(shù)據(jù)區(qū).......93.2.2外部DTD(續(xù)2-2)<?xmlversion='1.0'encoding='gb2312'?><!DOCTYPEpoemSYSTEM"ex2.dtd"><poem> <author>王維</author> <title>鹿柴</title> <content>空山不見人,但聞人語聲.返景入深林,復(fù)照青苔上.</content></poem><?xmlversion="1.0"encoding="gb2312"?><!ELEMENTpoem(author,title,content)><!ELEMENTauthor(#PCDATA)><!ELEMENTtitle(#PCDATA)><!ELEMENTcontent(#PCDATA)>外部DTD使用示例103.3 DTD語法一個(gè)DTD文檔包含元素(ELEMENT)的定義規(guī)則元素之間的關(guān)系規(guī)則屬性(ATTLIST)的定義規(guī)則可使用的實(shí)體(ENTITY)或符號(hào)(NOTATION)規(guī)則113.3.1元素聲明—確定元素及其類型元素有三種不同的類型數(shù)據(jù)型(即字符內(nèi)容)<Text>Hello</Text>元素型(即包含的內(nèi)容是元素)<Letter><sub>QUIT</sub><Body>Helloeverybody!</Body></Letter>混合型(包含的內(nèi)容既有元素又有內(nèi)容)<para>Helloeverybody<bold>quit</bold></para>123.3.1元素聲明——元素的定義(1/5)語法<!ELEMENT

NAME

CONTENT>關(guān)鍵字元素名稱EMPTY-該元素不能包含子元素和文本,但可以有屬性-(空元素)ANY-該元素可以包含任何在DTD中定義的元素內(nèi)容#PCDATA-可以包含任何字符數(shù)據(jù),但是不能在其中包含任何子元素PCDATA代表字符數(shù)據(jù),為防止與關(guān)鍵字混淆,加#前綴純?cè)仡愋停话釉?,并且這些子元素外沒有文本混合類型--包含子元素和文本數(shù)據(jù)的混合體元素類型133.3.1元素聲明——元素的定義(2/5)EMPTY示例--空元素<!ELEMENT人EMPTY>XML示例:<家庭> <人名字="皮諾曹"性別="男"年齡="6"/></家庭><家庭> <人>皮諾曹</人> <人><大人>皮諾曹爸爸</大人></人></家庭>√×143.3.1元素聲明——元素的定義(3/5)ANY示例<!ELEMENT人ANY>XML示例:<家庭> <人>皮諾曹</人> <人><大人>皮諾曹爸爸</大人></人></家庭>將根元素設(shè)為ANY類型后,元素出現(xiàn)的次數(shù)和順序不受限制。15√×3.3.1元素聲明——元素的定義(4/5)#PCDATA示例<!ELEMENT人(#PCDATA)><家庭> <人性別="男"年齡="6">皮諾曹</人></家庭><家庭> <人><大人>皮諾曹爸爸</大人></人></家庭>XML示例:163.3.1元素聲明——元素的定義(5/5)組合類型示例<!ELEMENT家庭(人+,家電*)>XML示例:<家庭> <人名字="郭大路"性別="男"年齡="25"/> <人名字="李尋歡"性別="男"年齡="38"愛好="作個(gè)教育家和偉人"/> <家電名稱="彩電"數(shù)量="3"/></家庭>17注意1:在元素設(shè)置中,如果元素包含多個(gè)子元素,如:〈!ELEMENT書籍(名稱,作者,價(jià)格)〉這種含多個(gè)子元素的聲明,那么“名稱”、“作者”、“價(jià)格”這些標(biāo)記在XML文件中必須以上面排列的順序出現(xiàn),每個(gè)標(biāo)記必須而且只能夠出現(xiàn)一次。18練習(xí)—判斷對(duì)錯(cuò)若DTD為:<!ELEMENT學(xué)生(姓名,性別,英語,數(shù)學(xué))>其對(duì)應(yīng)的XML:<學(xué)生> <姓名>李方方</姓名> <性別>男</性別><英語>99</英語><數(shù)學(xué)>88</數(shù)學(xué)><數(shù)學(xué)>88</數(shù)學(xué)></學(xué)生>×19注意2:如果在設(shè)定元素時(shí),按照〈!ELEMENT書籍ANY〉,這樣在元素下就可以包含任意被設(shè)定過的元素,出現(xiàn)的次數(shù)和順序也不受限制,并且在該元素下,除了可以包含子元素以外,還能夠包含一般的文字。20注意3:在XML文件中,一個(gè)標(biāo)記可能多次出現(xiàn)(或者不出現(xiàn)),除了在它們的父元素中用ANY關(guān)鍵字之外,還可以在元素的旁邊加上特定的符號(hào)來控制標(biāo)記出現(xiàn)的次數(shù)。

21修飾符號(hào)------無符號(hào):只能出現(xiàn)一次

符號(hào)用途示例示例說明()用來給元素分組(古龍|金庸|梁羽生),(王朔|余杰),毛毛分成三組|在列出的對(duì)象中選擇一個(gè)(男人|女人)表示男人或者女人必須出現(xiàn),兩者至少選一+該對(duì)象最少出現(xiàn)一次,可以出現(xiàn)多次(1或多次)(成員+)表示成員必須出現(xiàn),而且可以出現(xiàn)多個(gè)成員*該對(duì)象允許出現(xiàn)零次到任意多次(0到多次)(愛好*)愛好可以出現(xiàn)零次到多次?該對(duì)象可以出現(xiàn),但只能出現(xiàn)一次(0到1次)(菜鳥?)菜鳥可以出現(xiàn),也可以不出現(xiàn),如果出現(xiàn)的話,最多只能出現(xiàn)一次,對(duì)象必須按指定的順序出現(xiàn)(西瓜,蘋果,香蕉)表示西瓜、蘋果、香蕉必須出現(xiàn),并且按這個(gè)順序出現(xiàn)22練習(xí)—解釋語句<!ELEMENT圖書(書名,作者+,書號(hào)?,出版日期*)><!ELEMENT元素名(子元素名1|子元素名2|子元素名3|…)><!ELEMENT作者聯(lián)系方式(姓名,地址+,(電話|手機(jī)|email))><!ELEMENT作者(姓名,(電話|手機(jī)|email)*)><!ELEMENT元素名(#PCDATA|子元素名1|子元素名2|子元素名3|…)*>233.3.2屬性聲明

在DTD中定義屬性時(shí),我們使用下面的格式來給一個(gè)元素定義一組合適的屬性,同時(shí)指定這些屬性的類型和缺省值:<!ATTLIST元素名(屬性名值類型[屬性類型][“缺省值“])>其中:元素名是屬性所屬的元素的名字。屬性名是屬性的命名。值類型是給屬性分配的值。缺省值是屬性的初值。24屬性的定義語法<!ATTLIST

元素名稱

屬性名稱類型屬性特點(diǎn) …...>CDATA

ID

IDREF/IDREFS

NMTOKEN/NMTOKENS

Enumerated#REQUIRED

#IMPLIED

#FIXEDvalue

Defaultvalue25屬性類型-CDATA屬性值可以是任何字符(包括數(shù)字和中文)<!ATTLIST木偶

姓名CDATA#REQUIRED

>

XML示例:<木偶姓名="皮諾曹"/>

<木偶姓名="PiLuocao"/>

<木偶姓名="123"/>26屬性類型-NMTOKEN/NMTOKENSNMTOKEN是CDATA的一個(gè)子集,表示屬性值必須是英文字母、數(shù)字、句號(hào)、破折號(hào)、下劃線或冒號(hào)(不能是中文!)。NMTOKENS與NMTOKEN類似,包含多個(gè)由空格分隔的字符。<?xmlversion="1.0"encoding="gb2312"?><!DOCTYPEpoems[<!ELEMENTpoems(title,content)><!ELEMENTtitle(#PCDATA)><!ATTLISTtitleauthorNMTOKEN#REQUIRED><!ELEMENTcontent(#PCDATA)>]><poems><titleauthor="杜甫">八陣圖</title><content>功蓋三分國,名成八陣圖,江流石不轉(zhuǎn),遺恨失吞吳.</content></poems><?xmlversion="1.0"encoding="gb2312"?><!DOCTYPEpoems[<!ELEMENTpoems(title,content)><!ELEMENTtitle(#PCDATA)><!ATTLISTtitleauthorNMTOKEN#REQUIRED><!ELEMENTcontent(#PCDATA)>]><poems><titleauthor="dupu">八陣圖</title><content>功蓋三分國,名成八陣圖,江流石不轉(zhuǎn),遺恨失吞吳.</content></poems>×√XML示例:27屬性類型-ID表明該屬性的取值必須是唯一的。該ID必須以一個(gè)字母開頭<!ELEMENT公司職員ANY>

<!ATTLIST公司職員

編號(hào)ID#REQUIRED

姓名CDATA#REQUIRED

><公司職員編號(hào)="Z001"姓名="張三"/><公司職員編號(hào)="Z002"姓名="李四"/><公司職員編號(hào)="Z001"姓名="張三"/><公司職員編號(hào)="Z001"姓名="李四"/>√×ID屬性值必須是合格的XML名字XML示例:28屬性類型-IDREF/IDREFSIDREF屬性的值指向文檔中其它地方聲明的ID類型的值。IDREFS同IDREF,但是可以具有由空格分開的多個(gè)引用。<!ELEMENT家庭(人+)>

<!ELEMENT人EMPTY>

<!ATTLIST人

relIDID#REQUIRED

parentIDIDREFS#IMPLIED

nameCDATA#REQUIRED

><家庭>

<人relID="P_1"name="爸爸"/>

<人relID="P_2"name="媽媽"/>

<人relID="P_3"parentID="P_1P_2"name="兒子">

</家庭>空格XML示例29屬性類型-Enumerated事先定義好一些值,屬性的值必須在所列出的值的范圍內(nèi)。<!ATTLISTperson 婚姻狀態(tài)(single|married|divorced|widowed)#IMPLIED><!ATTLISTpersion性別(男|女)#REQUIRED>30屬性的特點(diǎn)-#REQUIRED元素的所有實(shí)例都必須有該屬性的值(NOTNULL)語法:<!ATTLIST元素名屬性名屬性類型#REQUIRED>DTD示例:<!ATTLISTpersonnumberCDATA#REQUIRED>

XML示例:<personnumber="5677"/>31屬性的特點(diǎn)-#IMPLIED元素的實(shí)例中可以忽略該屬性(NULL)。語法:

<!ATTLIST元素名屬性名

屬性類型#IMPLIED>DTD示例:<!ATTLISTcontactfaxCDATA#IMPLIED>XML示例:<contactfax="555-667788"/>32屬性的特點(diǎn)-#FIXEDvalue元素實(shí)例中該屬性的值必須為指定的固定值。在元素中不能夠設(shè)定該屬性,因?yàn)檫@個(gè)屬性被設(shè)為具有固定值的屬性(#FIX關(guān)鍵字)語法:<!ATTLIST元素名屬性名類型#FIXED"value">DTD示例:<!ATTLISTsendercompanyCDATA#FIXED"Microsoft">XML示例:<sendercompany="Microsoft"/>33屬性的特點(diǎn)-Defaultvalue為屬性提供一個(gè)默認(rèn)的值語法:<!ATTLIST元素名屬性名類型"value">DTD示例:<!ATTLISTpaymenttypeCDATA"check">

XML示例:<paymenttype="check"/>34定義實(shí)體-內(nèi)部實(shí)體作用:避免重復(fù)輸入-(宏、變量)XML中五個(gè)預(yù)定義實(shí)體自定義實(shí)體語法:<!DOCTYPE根元素[<!ENTITY實(shí)體名"實(shí)體內(nèi)容">]>引用已定義的實(shí)體:&實(shí)體名;實(shí)體符號(hào)<<>>&&""''35實(shí)體示例?xmlversion="1.0"encoding="gb2312"?><!--文件名:例3-13.xml--><!DOCTYPE圖書信息表[<!ELEMENT圖書信息表(圖書+)><!ELEMENT圖書(書名,類別,作者,出版

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論