久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

DTD

來自站長百科
跳轉(zhuǎn)至: 導(dǎo)航、? 搜索
XML代碼

DTD(Document Type Definition) 是一套關(guān)于標(biāo)記符的語法規(guī)則。它是XML1.0版規(guī)格的一部分,是XML文件的驗證機制,屬于XML文件的組成部分。DTD 是一種保證XML文檔格式正確的有效方法,可通過比較XML文檔和DTD文件來看文檔是否符合規(guī)范,元素和標(biāo)簽使用是否正確。XML文件提供應(yīng)用程序一個數(shù)據(jù)交換的格式,DTD正是讓XML文件能成為數(shù)據(jù)交換標(biāo)準(zhǔn),因為不同的公司只需定義好標(biāo)準(zhǔn)DTD,各公司都能依DTD建立XML文件,并且進(jìn)行驗證,如此就可以輕易的建立標(biāo)準(zhǔn)和交換數(shù)據(jù),這樣滿足了網(wǎng)絡(luò)共享和數(shù)據(jù)交互。DTD文件是一個ASCII文本文件,后綴名為.dtd。

文檔類型定義(DTD)可定義合法的XML文檔構(gòu)建模塊。它使用一系列合法的元素來定義文檔的結(jié)構(gòu)。DTD 可被成行地聲明于 XML 文檔中,也可作為一個外部引用。

DTD元素[ ]

在一個 DTD 中,元素通過元素聲明來進(jìn)行聲明。

聲明一個元素

在 DTD 中,XML 元素通過元素聲明來進(jìn)行聲明。元素聲明使用下面的語法:

<!ELEMENT 元素名稱 類別>   
或者   
<!ELEMENT 元素名稱 (元素內(nèi)容)>  
空元素

空元素通過類別關(guān)鍵詞EMPTY進(jìn)行聲明:   

<!ELEMENT 元素名稱 EMPTY>  
只有 PCDATA 的元素

只有 PCDATA 的元素通過圓括號中的 #PCDATA 進(jìn)行聲明:

 
<!ELEMENT 元素名稱 (#PCDATA)>

 

帶有任何內(nèi)容的元素

通過類別關(guān)鍵詞 ANY 聲明的元素,可包含任何可解析數(shù)據(jù)的組合:

<!ELEMENT 元素名稱 ANY>
帶有子元素(序列)的元素

帶有一個或多個子元素的元素通過圓括號中的子元素名進(jìn)行聲明:

<!ELEMENT 元素名稱 (子元素名稱 1)>

或者

<!ELEMENT 元素名稱 (子元素名稱 1,子元素名稱 2,.....)>
相同的元素至少出現(xiàn)一次的聲明

語法格式為:

<!ELEMENT element-name (child-name+)>   
例:   
<!ELEMENT note (message+)>   

例中的+是指子元素message必須在被包含的note元素里出現(xiàn)一次或者多次。
相同的元素不出現(xiàn)或者多次出現(xiàn)的聲明

語法格式為:  

 
<!ELEMENT element-name (child-name*)>  
 
例:   

<!ELEMENT note (message*)> 
  
例中的*是指子元素message能夠在被包含的note元素里不出現(xiàn)或者出現(xiàn)多次。

DTD屬性[ ]

在 DTD 中,屬性通過 ATTLIST 聲明來進(jìn)行聲明。

聲明屬性

屬性聲明擁使用下列語法:

<!ATTLIST 元素名稱 屬性名稱 屬性類型 默認(rèn)值>   

下面是屬性類型的概述:

類型描述
CDATA 值為字符數(shù)據(jù) (character data)   
(en1|en2|..) 此值是枚舉列表中的一個值   
ID 值為唯一的 id   
IDREF 值為另外一個元素的 id   
IDREFS 值為其他 id 的列表   
NMTOKEN 值為合法的 XML 名稱   
NMTOKENS 值為合法的 XML 名稱的列表   
ENTITY 值是一個實體   
ENTITIES 值是一個實體列表   
NOTATION 此值是符號的名稱   
xml: 值是一個預(yù)定義的 XML 值

默認(rèn)值參數(shù)可使用下列值:

值解釋
值屬性的默認(rèn)值   
#REQUIRED 屬性值是必需的   
#IMPLIED 屬性不是必需的   
#FIXED value 屬性值是固定的 
規(guī)定一個默認(rèn)的屬性值
DTD:   
<!ELEMENT square EMPTY>   
<!ATTLIST square width CDATA "0">   
合法的 XML:   
<square width="100" /> 

補充說明:上面的例子中,"square" 被定義為帶有 CDATA 類型的 "width" 屬性的空元素。如果寬度沒有被設(shè)定,其默認(rèn)值為0 。

DTD實體(ENTITIES)[ ]

  • 實體是用于定義引用普通文本或特殊字符的快捷方式的變量。
  • 實體引用是對實體的引用。
  • 實體可在內(nèi)部或外部進(jìn)行聲明。
一個內(nèi)部實體聲明

語法:<!ENTITY 實體名稱 "實體的值">

DTD 例子:<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright 具體的url">XML 例子:
<author>&writer;&copyright;</author>注釋: 
一個實體由三部分構(gòu)成:
一個和號 (&), 
一個實體名稱, 
以及一個分號 (;)。
一個外部實體聲明

語法:<!ENTITY 實體名稱 SYSTEM "URI/URL">

DTD 例子:
<!ENTITY writer SYSTEM "具體的url">   
<!ENTITY copyright SYSTEM "具體的url">XML 例子:   
<author>&writer;&copyright;</author>
XML代碼

DTD實例[ ]

  • 報紙文章 DTD
<!DOCTYPE NEWSPAPER [   
<!ELEMENT NEWSPAPER (ARTICLE+)>   
<!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)>   
<!ELEMENT HEADLINE (#PCDATA)>   
<!ELEMENT BYLINE (#PCDATA)>   
<!ELEMENT LEAD (#PCDATA)>   
<!ELEMENT BODY (#PCDATA)>   
<!ELEMENT NOTES (#PCDATA)>   
<!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED>   
<!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>   
<!ATTLIST ARTICLE DATE CDATA #IMPLIED>   
<!ATTLIST ARTICLE EDITION CDATA #IMPLIED>   
<!ENTITY NEWSPAPER "Vervet Logic Times">   
<!ENTITY PUBLISHER "Vervet Logic Press">   
<!ENTITY COPYRIGHT "Copyright 1998 Vervet Logic Press">   
]>
  • 產(chǎn)品目錄 DTD
<!DOCTYPE CATALOG [   
<!ENTITY AUTHOR "John Doe">   
<!ENTITY COMPANY "JD Power Tools, Inc.">   
<!ELEMENT CATALOG (PRODUCT+)>   
<!ELEMENT PRODUCT   
(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>   
<!ATTLIST PRODUCT   
NAME CDATA #IMPLIED   
CATEGORY (HandTool|Table|Shop-Professional) "HandTool"   
PARTNUM CDATA #IMPLIED   
PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"   
INVENTORY (InStock|Backordered|Discontinued) "InStock">   
<!ELEMENT SPECIFICATIONS (#PCDATA)>   
<!ATTLIST SPECIFICATIONS   
WEIGHT CDATA #IMPLIED   
POWER CDATA #IMPLIED>   
<!ELEMENT OPTIONS (#PCDATA)>   
<!ATTLIST OPTIONS   
FINISH (Metal|Polished|Matte) "Matte"   
ADAPTER (Included|Optional|NotApplicable) "Included"   
CASE (HardShell|Soft|NotApplicable) "HardShell">   
<!ELEMENT PRICE (#PCDATA)>   
<!ATTLIST PRICE   
MSRP CDATA #IMPLIED   
WHOLESALE CDATA #IMPLIED   
STREET CDATA #IMPLIED   
SHIPPING CDATA #IMPLIED>   
<!ELEMENT NOTES (#PCDATA)>   
]>

DTD內(nèi)部的DOCTYPE聲明[ ]

假如 DTD 被包含在您的 XML 源文件中,它應(yīng)當(dāng)通過下面的語法包裝在一個 DOCTYPE 聲明中:

*****************************************************************************   
<!DOCTYPE 根元素 [元素聲明]>   
*****************************************************************************

  

帶有 DTD 的 XML 文檔實例:

  
*****************************************************************************   
<?xml version="1.0"?>   
<!DOCTYPE note [   
<!ELEMENT note (to,from,heading,body)>   
<!ELEMENT to (#PCDATA)>   
<!ELEMENT from (#PCDATA)>   
<!ELEMENT heading (#PCDATA)>   
<!ELEMENT body (#PCDATA)>   
]>   
<note>   
<to>Tove</to>   
<from>Jani</from>   
<heading>Reminder</heading>   
<body>Don't forget me this weekend</body>   
</note>   
***************************************************************************** 

   以上 DTD 解釋如下:

   
!DOCTYPE note (第二行)定義此文檔是 note 類型的文檔。   
!ELEMENT note (第三行)定義 note 元素有四個元素:"to、from、heading,、body"   
!ELEMENT to (第四行)定義 to 元素為 "#PCDATA" 類型   
!ELEMENT from (第五行)定義 from 元素為 "#PCDATA" 類型   
!ELEMENT heading (第六行)定義 heading 元素為 "#PCDATA" 類型   
!ELEMENT body (第七行)定義 body 元素為 "#PCDATA" 類型

DTD外部文檔聲明[ ]

假如 DTD 位于 XML 源文件的外部,那么它應(yīng)通過下面的語法被封裝在一個 DOCTYPE 定義中:

<!DOCTYPE 根元素 SYSTEM "文件名">

這個 XML 文檔和上面的 XML 文檔相同,但是擁有一個外部的 DTD:

*****************************************************************************
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note> 這是包含 DTD 的 "note.dtd" 文件:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
*****************************************************************************

為什么使用 DTD[ ]

  • 通過 DTD,您的每一個 XML 文件均可攜帶一個有關(guān)其自身格式的描述。   
  • 通過 DTD,獨立的團(tuán)體可一致地使用某個標(biāo)準(zhǔn)的 DTD 來交換數(shù)據(jù)。  
  • 應(yīng)用程序也可使用某個標(biāo)準(zhǔn)的 DTD 來驗證從外部接收到的數(shù)據(jù)。   
  • 還可以使用 DTD 來驗證自身的數(shù)據(jù)。

DTD的優(yōu)缺點[ ]

DTD的優(yōu)勢
  • 每一個XML文檔都可攜帶一個DTD,用來對該文檔格式進(jìn)行描述,測試該文檔是否為有效的XML文檔。既然DTD有外部和內(nèi)部之分,當(dāng)然就可以為某個獨立的團(tuán)體定義一個公用的外部DTD,那么多個XML文檔就都可以共享使用該DTD,使得數(shù)據(jù)交換更為有效。甚至在某些文檔中還可以使內(nèi)部DTD和外部DTD相結(jié)合。在應(yīng)用程序中也可以用某個DTD來檢測接收到的數(shù)據(jù)是否符合某個標(biāo)準(zhǔn)。
  • 對于XML文檔而言,雖然DTD不是必須的,但它為文檔的編制帶來了方便。加強了文檔標(biāo)記內(nèi)參數(shù)的一致性,使XML語法分析器能夠確認(rèn)文檔。如果不使用DTD來對XML文檔進(jìn)行定義,那么XML語法分析器將無法對該文檔進(jìn)行確認(rèn)。
  • 每個XML文檔都只有一個根元素,其它的子元素都包含在該根元素中。因此在DTD中對根元素的聲明是必不可少的。根元素聲明的一般形式如下:
   
<!DOCTYPE root[   
<!-- 子元素 --> ]>   
<!-- 文件體 --> 
  • DOCTYPE是“document type”(文檔類型)的簡寫,DOCTYPE聲明必須放在文檔最頂部,在所有代碼和標(biāo)識之上,DOCTYPE聲明是必不可少的關(guān)鍵組成部分。DTD語法要求DOCTYPE必須要大寫,而且DOCTYPE和元素之間必須要有空格隔開。如在以上代碼中DOCTYPE和根元素root之間要有空格隔開。
DTD的缺陷

利用DTD驗證有效性的解析器,就能夠立即對文檔的完整性進(jìn)行可靠的檢查。DTD雖然比較實用,但DTD自身也有很多的不足之處。   

  • DTD有自己的特殊語法,其本身不是XML文檔;   
  • DTD只提供了有限的數(shù)據(jù)類型,用戶無法自定義類型;   
  • DTD不支持域名機制。

相關(guān)條目[ ]

參考來源[ ]