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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章XML文檔類型定義

----DTD

1目標理解文檔類型定義DTD聲明元素聲明屬性聲明實體聲明2XML確認

----確保XML文檔中數據的一致性

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

53.2.1內部DTD

內部DTD是在XML文件的文件序言區域中定義的。內部DTD的XML文檔的結構為:

<?xmlversion="1.0"?>

<!DOCTYPE根元素名[

元素描述

]>

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

NAME

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

21修飾符號------無符號:只能出現一次

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

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

元素名稱

屬性名稱類型屬性特點 …...>CDATA

ID

IDREF/IDREFS

NMTOKEN/NMTOKENS

Enumerated#REQUIRED

#IMPLIED

#FIXEDvalue

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

姓名CDATA#REQUIRED

>

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

<木偶姓名="PiLuocao"/>

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

<!ATTLIST公司職員

編號ID#REQUIRED

姓名CDATA#REQUIRED

><公司職員編號="Z001"姓名="張三"/><公司職員編號="Z002"姓名="李四"/><公司職員編號="Z001"姓名="張三"/><公司職員編號="Z001"姓名="李四"/>√×ID屬性值必須是合格的XML名字XML示例:28屬性類型-IDREF/IDREFSIDREF屬性的值指向文檔中其它地方聲明的ID類型的值。IDREFS同IDREF,但是可以具有由空格分開的多個引用。<!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事先定義好一些值,屬性的值必須在所列出的值的范圍內。<!ATTLISTperson 婚姻狀態(single|married|divorced|widowed)#IMPLIED><!ATTLISTpersion性別(男|女)#REQUIRED>30屬性的特點-#REQUIRED元素的所有實例都必須有該屬性的值(NOTNULL)語法:<!ATTLIST元素名屬性名屬性類型#REQUIRED>DTD示例:<!ATTLISTpersonnumberCDATA#REQUIRED>

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

<!ATTLIST元素名屬性名

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

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

溫馨提示

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

評論

0/150

提交評論