




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第1頁第3章有效的XML文件—DTD引言本章學習目標本章大綱引言文檔類型定義(DocumentTypeDefinition,DTD)是有效的XML文檔的基礎。用戶可按照XML文檔語法規(guī)則隨意地創(chuàng)建自己的標記,向其中添加元素和屬性等,但是如果每個人或每家公司都按照自己的意愿和愛好設計標記、添加元素及屬性,那么對于同一問題設計出來的文檔之間就可能有很大的不同,不便于解析器解析其中的數(shù)據,因此需要一套機制通過設置特定的規(guī)則來控制XML文檔結構。這套機制就稱為文檔類型定義,簡稱為DTD。本章大綱3.1DTD概述3.2DTD的基本結構3.3DTD元素定義3.4DTD屬性說明3.5DTD實體聲明3.6DTD現(xiàn)狀和Schema的優(yōu)勢本章學習目標● 理解DTD的基本概念● 掌握DTD元素類型及聲明語法● 掌握DTD屬性類型及聲明語法● 理解DTD實體類型及聲明語法● 了解DTD文件現(xiàn)狀DTD概述-1DTD(DocumentTypeDefinition)是一套關于標記符的語法規(guī)則。它是XML1.0版規(guī)格的一部分,是XML文件的驗證機制,屬于XML文件組成的一部分。DTD文件是一個ASCII文本文件,后綴名為.dtd。DTD概述-2DTD提供了一套檢驗數(shù)據的語言,在DTD中詳細描述了每個元素可以包含的子元素、元素的出現(xiàn)順序、出現(xiàn)次數(shù)以及屬性的相關設置等信息。可以確保文檔內部數(shù)據的正確性。文檔類型定義的作用就是給予文檔一種格式(type),使用戶知道所使用的XML文檔需包含哪些標記(tag)、屬性(attribute)、實體(entities)。DTD定義了置標語言、文檔結構的語法和詞匯表,實際上是定義了一個語法分析器。DTD的分類外部DTD可以單獨形成文件,后綴名為.dtd,該文件可以被多個XML文檔共享和DTD調用。內部DTD是在XML文檔中直接定義DTD,該DTD只能被當前XML文檔使用。DTD的基本結構-1
內部DTD文檔類型聲明以“<!DOCTYPE”開始,以“]>”結束,通常將開始和結束標記放在不同的行。<!DOCTYPE根元素名稱[<!ELEMENT子元素名稱(#PCDATA)>]>內部DTD舉例【例3-1】帶有內部DTD的XML文檔<?xmlversion=”1.0”encoding=”GB2312”><!DOCTYPEbook[<!ELEMENTbook(name)><!ELEMENTname(#PCDATA)>]><book><name>《XML教程》</name></book>DTD的基本結構-2外部DTD如果需要在XML文件中使用外部DTD,必須在XML文檔的文檔類型定義部分通過URL引用外部DTD,語法格式聲明如下:<!DOCTYPE
根元素名稱
SYSTEM"DTD-URL">或<!DOCTYPE根元素名稱PUBLIC“DTD-name”“DTD-URL”>外部DTD舉例-1【3-2】外部引用DTD先根據需求構思XML文檔的格式,建立DTD文檔。<?xmlversion=”1.0”encoding=”GB2312”><!ELEMENTbook(name,publisher,company,author)><!ELEMENTname(#PCDATA)><!ELEMENTpublisher(#PCDATA)><!ELEMENTcompany(#PCDATA)><!ELEMENTauthor(#PCDATA)>將上述代碼保存到book.dtd文檔外部DTD舉例-2引用上述DTD文檔的XML文檔內容如下:<?xmlversion=”1.0”encoding=”GB2312”><!DOCTYPE
bookSYSTEM“book.dtd”><book><name>《XML教程》</name><publisher>清華大學出版社</publisher><company>鄭州大學</company><author>慕橙</author></book>DTD基本結構模板DTD的基本結構包括XML聲明、元素聲明、屬性聲明、實體聲明等,DTD基本結構模板如下所示:<!ELEMENT…> <!--定義一個XML元素--><!ELEMENT…>…<!ATTLIST…> <!--指定元素擁有的屬性--><!ATTLIST…>…<!ENTITY…> <!--定義一個實體-->…<!NOTATION…> <!--定義一個符號-->...DTD元素定義元素是DTD的重要組成部分。在DTD中,元素是通過ELEMENT標記聲明的,該標記提供所有聲明元素的名稱和內容規(guī)范。元素的名稱遵守XML對名稱的限制。<!ELEMENT元素名稱類別>或者<!ELEMENT元素名稱(元素內容)>表示XML的標記名指明XML中此元素應該包含什么類型的數(shù)據指明XML中此元素應該包含什么樣的內容對子元素的規(guī)定如果一個元素有一個或多個子元素,需要將子元素定義在括號中。在DTD中,通過正則表達式規(guī)定子元素出現(xiàn)的順序和次數(shù)。語法分析器將這些正則表達式與XML文檔內部的數(shù)據模式相匹配,以判別一個文檔是否是ValidatingXML。符號說明符號說明+必須出現(xiàn)一次以上?不出現(xiàn)或只出現(xiàn)一次*不出現(xiàn)或可出現(xiàn)多次無符號只出現(xiàn)一次子元素聲明舉例【例3-3】聲明子元素Authorlist元素擁有子元素author,且可能有一個或多個:<!ELEMENTauthorlist(author+)>遵循上述DTD規(guī)定的XML文件應該這樣定義:<authorlist><author>李四</author><author>張三</author></authorlist>空元素空元素表示在XML的標記中沒有任何數(shù)據,不能包含子元素和文本,但可以有屬性。語法格式如下:<!ELEMENT元素名EMPTY>【例3-4】聲明空元素<!ElEMENTbrEMPTY>在XML中,下面的元素就是合法的。<br/>Unrestricted元素Unrestricted元素表示在XML文檔中可以包含任何在DTD中定義的元素內容。一般情況下,只把文檔的根元素定義為此類型,這樣設定后,元素出現(xiàn)的次數(shù)和順序不受限制。語法格式如下:<!ELEMENT元素名稱ANY>【例3-5】聲明Unrestricted元素<!ElEMENTanimalsANY>注意:過多地使用ANY會破壞文檔結構的清晰性,所以在DTD中應慎用ANY。簡單元素簡單元素使用關鍵字#PCDATA,此元素可以包含任何字符數(shù)據,但不能包含子元素。語法格式如下:<!ELEMENT
元素名稱
(#PCDATA)>【例3-6】聲明簡單元素<!ELEMENTbookname(#PCDATA)>上述bookname可以是空元素也可以包含數(shù)據內容,但是一定不能包含子元素。如果在XML文檔中定義子元素,則是非法的,例如:<bookname><author>張三</author><name>XML教程</name></bookname>以上代碼會被驗證出錯?;旌显鼗旌显仡愋偷亩x為:<!ELEMENT元素名(#PCDATA|子元素1|子元素2|···|子元素n)*>【例3-7】聲明混合元素<!ELEMENTbook(#PCDATA|author|press)*>相應XML文檔如下所示:<?xmlversion=”1.0”encoding=”GB2312”><!DOCTYPEbook[<!ELEMENTbook(#PCDATA|bookname|author|press)*><!ELEMENTbookname(#PCDATA)><!ELEMENTauthor(#PCDATA)><!ELEMENTpress(#PCDATA)>]><book><bookname>XML教程</bookname></book>DTD屬性說明屬性描述元素的額外信息,是對元素的修飾與補充。信息詳細的XML文檔都有一個特點,即元素通過屬性來添加附加信息。元素的屬性聲明由ATTLIST關鍵字、元素名稱及屬性定義3部分構成。<!ATTLIST元素名屬性名屬性類型屬性限定條件>一個聲明可以同時聲明元素的多個屬性,只需要使用空格分隔即可。屬性的默認值名稱含義#REQUIRED必須賦值的屬性,在XML文檔中必須給出這個屬性的屬性值#IMPLIED屬性值可有可無的屬性,不要求在XML文檔中給該屬性賦值,而且也無需在DTD中為該屬性提供默認值#FIXED固定取值的屬性。需要為一個特定的屬性提供一個特定的默認值,并且不希望XML文檔中另給出元素值把此默認值代替掉Defaultvalue事先定義了默認值的屬性。需要在DTD中提供一個默認值,在XML文檔中可以為該屬性提供新的屬性值,也可以不另外給出屬性值屬性的類型類型含義CDATA純文本,由可顯示字符組成的字符串Enumerated取值來自一組可接受的取值范圍,在()內被指定ID以屬性值的方式為文檔中的某個元素定義唯一的標識,用以區(qū)分具有相同結構、相同屬性的不同元素IDREF屬性值引用已定義的ID值,方法是把那個元素的Tn標識值作為該屬性的取值ENTITY取值為一個已定義的實體ENTITYS該屬性包含多個外部實體,不同實體用空格隔開NMTOKEN表述屬性值只能由字母、數(shù)字、下劃線、句點(.)、冒號(:)、連字符(一)這些符號組成NMTOKENS表示屬性值可以由多個NMTOKEN組成,每個NMTOKEN之間用空格隔開CDATA類型一個CDATA類型的屬性可以包含除小于號“<”、大于號“>”,與符號“&”、雙引號“””和單引號“’”的任何字符,前提條件是它必須滿足規(guī)范格式的約束?!纠?-11】在DTD中定義CDATA類型的屬性<!ATTLISTbooksalesCDATA#REQURED>此定義說明book元素有一個sales是必需賦值的屬性,該屬性值是任何字符數(shù)據,在本例中可用此屬性描述該圖書是否售出的狀態(tài)。如果需要使用小于號“<”、大于號“>”,與符號“&”、雙引號“””和單引號“’”這幾個特殊字符,就使用實體引用(<;,>;,&;,";和&apos;)替代特殊字符。ID類型ID屬性值是具有唯一性的值,如身份證號碼、學生學號都屬于此類。如果在整份XML文件中需要類似數(shù)據表的主索引,就可以將屬性設為ID屬性類型。如果XML文檔在元素屬性的聲明中定義了ID屬性,則這個元素必須在文檔中擁有一個唯一的標識符,只有這樣的文檔才能通過DTD的檢驗?!纠?-13】在DTD中定義ID類型的屬性<!ATTLISTstudentsidID#REQUIRED>上述的屬性聲明指出student元素的sid屬性為ID類型,該屬性的值可以唯一的標識“sid”Enumerated類型Enumerated類型即是枚舉類型,枚舉聲明了屬性的備選值列表,屬性必須從該列表中選擇一個值作為屬性值。通過豎線“|”把備選值隔開?!纠?-14】在DTD中定義枚舉類型的屬性<!ATTLIST學生答題(正確|錯誤)“正確”>本例中包含一個枚舉類型的屬性聲明,元素學生的屬性“答題”的屬性值可以取值“正確”或“錯誤”,而且默認取值為“正確”。IDREF和IDREFSIDREF類型是ID類型的引用類型,IDREFS類型是多個ID類型的引用。IDREF和IDREFS類型的屬性值必須指向帶有ID屬性的元素。對于IDREF類型的屬性,其屬性值必須和文檔中某些ID屬性相匹配。如果IDREF類型的屬性值是一個不存在的ID值時,該XML文檔會被驗證無效?!纠?-15】在DTD中定義IDREF類型的屬性<?Xmlversion=”1.0”encoding=“GB2312”?><!ELEMENTBookOrder(Customer+,book+)><!ELEMENTCustomer(name*)><!ELEMENTname(#PCDATA)><!ELEMENTbook(publishing+)><!ELEMENTpublishing(#PCDATA)><!ATTLISTCustomeroidIDREF#REQUIRED><!ATTLISTbookbidID#REQUIRED>IDREF和IDREFS(續(xù))<?xmlversion=”1.0”encoding=”GB2312”><!DOCTYPEBookOrderSYSTEM“book.dtd”><BookOrder><Customeroid=”ISBN7-333-33333-3”><name>Tom</name></Customer><Customeroid=”ISBN7-333-33333-2”><name>Lucy</name></Customer><bookbid=”ISBN7-333-33333-3”><publishing>清華大學出版社</publishing></book><bookbid=”ISBN7-333-33333-2”><publishing>北京大學出版社</publishing></book></BookOrder>NMTOKEN和NMTOKENSNMTOKEN類型類似CDATA屬性類型,但NMTOKEN是一個比CDATA類型更寬松的類型,它只要求該屬性的屬性值是一個合法的XML表示即可。也就是說,NMTOKEN類型的屬性值也是字符串數(shù)據,但NMTOKEN類型的屬性值中允許出現(xiàn)的字符要多。NMTOKEN類型的屬性值中不能包含空格字符,可以由字母、數(shù)字、下劃線、點號“.”或連字符“_”組成,可以使用數(shù)字、點號或連字符開頭。【例3-16】在DTD中定義NMTOKEN類型的屬性<?xmlversion=”1.0”encoding=“GB2312”?><!ELEMENT書籍列表(計算機書籍*)><!ELEMENT計算機書籍(書名,作者,價格,簡要介紹)><!ELEMENT書名(#PCDATA)><!ELEMENT作者(#PCDATA)><!ELEMENT價格(#PCDATA)><!ELEMENT簡要介紹(#PCDATA)><!ATTLIST作者地址NMTOKEN#REQUIRED>NMTOKEN和NMTOKENS(續(xù))<?xmlversion=”1.0”encoding=”GB2312”><!DOCTYPE書籍列表SYSTEM“book.dtd”><書籍列表><計算機書籍><書名>XML教程</書名><作者地址=”鄭州”>李剛</作者><價格>63</價格><簡要介紹>該書主要介紹了XML的各種相關知識。</簡要介紹></計算機書籍></書籍列表>ENTITY和ENTITIESENTITY類型的屬性包含在DTD的其他位置聲明的未解析實體中,它能夠把外部二進制數(shù)據,即外部未解析的普通實體鏈接到XML文檔。ENTITY類型的屬性值是在DTD中聲明的未解析常規(guī)實體的名稱,它與外部數(shù)據相連?!纠?-17】在DTD中定義ENTITY類型的屬性<?Xmlversion=”1.0”encoding=”gb2312”><!DOCTYPEphotos[<!ELEMENTphotos(photo*)><!ELEMENTphotoEMPTY><!ATTLISTphotosourceENTITY#REQUIRED><!ENTITYsrcSYSTEM“img.gif”>]><photos><photosource=”src”/></photos>DTD實體聲明在XML文檔中,可以將經常使用的XML文本區(qū)段定義成實體,這樣可以快速地將XML文本內容插入到任何需要插入的地方。此外,也可以將外部文件定義成實體,然后將外部數(shù)據附加到XML文檔。實體的概念在XML中,實體一詞具有廣泛的含義,其基本意思是指與XML文檔相關的下列任何形式的存儲單元。有效的XML文檔本身。外部的DTD子集。定義成DTD中外部實體的外部文檔。在DTD中定義的,用引號括起來的字符。實體的分類實體可以通過3種方式進行分類。(1)通用實體與參數(shù)實體通用實體可以在XML文檔中使用。參數(shù)實體只能用在DTD文件中,該實體包含了可以被安插在DTD中的XML文檔。(2)內部實體和外部實體內部實體是實體的內容已經包含在DTD文件中。外部實體的內容是通過URI引用DTD以外的其他文件。(3)可解析實體與不可解析實體可解析實體就是可以被解析器解析的數(shù)據。不可解析實體就是解析器無法解析的數(shù)據,通常指二進制數(shù)據。XML文檔中不可引用不可解析實體。內部通用實體-1內部通用實體是在文檔實體內部定義和使用的實體,其內容通常是一段文本字符。這種實體要在DTD中通過DTD語句的定義,可以在XML文檔中使用,也可以在DTD中使用。其定義的語法格式如下:<!ENTITYentity_name“entity_value”>其中,<!ENTITY>為關鍵字,entity_name為實體名稱,entity_value為實體所代替的文本內容。引用內部通用實體以“&”開始,以“;”結束。例:&entity_name;內部通用實體-2當內部通用實體在DTD中引用時,需注意以下兩方面:(1)不能在元素及屬性的聲明中引用內部通用實體,如下面的語句是非法的:<!ENTITYpcd(#PCDATA)><!ELEMENTtitle&pcd>(2)在語句中不能出現(xiàn)循環(huán),如下面的語句是非法的。<!ENTITYthepub“北大&pub;”><!ELEMENTpub“出版社&thepub:”>外部通用實體外部通用實體為獨立的文件,可被多個文檔所引用。正因為每一個完整的XML文檔都是一個合法的實體,所以XML通過對外部通用實體的引用,可以在一個XML文檔中嵌入另一個XML文檔,或者將多個文檔組合成一個文檔。其定義的語法格式如下:<!ENTITYentity_name“URL”>其中,URL為引用的外部實體的URL地址。引用外部通用實體也與引用內部通用實體的方法一樣:&entity_name;參數(shù)實體與通用實體的區(qū)別(1)在引用形式上,通用實體的引用為“&entity_name;”,而參數(shù)實體的引用則為“%entity_name;”(2)在引用范圍上,通用實體可在XML文檔中引用,也可在DTD中引用,而參數(shù)實體只可在DTD中引用。內部參數(shù)實體內部參數(shù)實體是指在獨立的內部DTD文檔的內部定義和使用的實體,其內容僅能為DTD而非XML文檔內容的書寫文本。定義內部參數(shù)實體的語法格式如下:<!ENTITY%entity_name“entity_value”>【例3-21】內部參數(shù)實體的定義及引用<!ENTITY%HeadingAlign“l(fā)eft|center|right”><!ELEMENTmessage(Content,Align)+><!ELEMENTContent(#PCDATA)><!ELEMENTAlign(%HeadingAlign;)>外部參數(shù)實體外部參數(shù)實體是指在獨立的外部DTD文檔的外部定義和使用的實體,外部參數(shù)實體用于將多個獨立的DTD文檔組合成一個大的DTD文檔。定義外部參數(shù)實體的語法格式如下:<!ENTITY%entity_name“URL”>DTD現(xiàn)狀DTD是驗證XML文檔有效性的方法之一,其存在著一些不足。作為SGMLDTD的一個子集,XMLDTD與XML的格式完全不同。因此,XML文檔開發(fā)人員必須使用這套與XML本身不同的語法來驗證X
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人力資源咨詢顧問合同書
- 產品售后服務情況說明表
- 制造業(yè)企業(yè)知識產權保護策略研究
- 光纜遷移施工方案范本
- 橡膠跑道施工方案
- 涼山道路施工方案
- TCSMT YB011-2024 天然氣發(fā)熱量測量裝置測試技術規(guī)范
- 建筑工程人工費承包合同-@-1
- 物業(yè)地面處理方案
- 透水砼路面施工方案
- 《農村合作金融機構非信貸資產風險分類指引》(銀監(jiān)發(fā)[2007]29號)
- 電纜敷設施工方案及安全措施范文
- 卡通手繪可愛小兔子PPT模板
- 小兒體格檢查(課堂PPT)
- ppt模板:信保專用中國出口信用保險公司課件
- (高清版)建筑塑料復合模板工程技術規(guī)程JGJ_T 352-2014
- 人教版八年級數(shù)學下冊全冊教案(完整版)教學設計
- 電機零部件中英文對照表
- 設備安裝工程監(jiān)理規(guī)劃
- 注冊安全工程師(延續(xù)注冊)履職情況說明
- 路長制巡查記錄表
評論
0/150
提交評論