XML文件類型定義DTD

來源:互聯網
上載者:User
文章目錄
  • 相同的元素至少出現一次的聲明
  • 相同的元素不出現或者多次出現的聲明

(Document Type Definition)
  DTD 是一套關於標記符的文法規則。它是XML1.0版規格得一部分,是XML檔案的驗證機制,屬於XML檔案組成的一部分。
  DTD 是一種保證XML文檔格式正確的有效方法,可以通過比較XML文檔和DTD檔案來看文檔是否符合規範,元素和標籤使用是否正確。一個DTD文檔包含:元素的定義規則,元素間關係的定義規則,元素可使用的屬性,可使用的實體或符號規則。
  XML檔案提供應用程式一個資料交換的格式,DTD正是讓XML檔案能夠成為資料交換的標準,因為不同的公司只需定義好標準的DTD,各公司都能夠依照DTD建立XML檔案,並且進行驗證,如此就可以輕易的建立標準和交換資料,這樣滿足了網際網路共用和資料互動。

  DTD檔案是一個ASCII的文字檔,尾碼名為.dtd。 

 

 

1、DTD 簡介

文件類型定義(DTD)可定義合法的XML文檔構建模組。它使用一系列合法的元素來定義文檔的結構。
  DTD 可被成行地聲明於 XML 文檔中,也可作為一個外部參考。
  內部的 DOCTYPE 聲明
  假如 DTD 被包含在您的 XML 摘要檔案中,它應當通過下面的文法封裝在一個 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 位於 XML 摘要檔案的外部,那麼它應通過下面的文法被封裝在一個 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 檔案均可攜帶一個有關其自身格式的描述。
  通過 DTD,獨立的團體可一致地使用某個標準的 DTD 來交換資料。
  而您的應用程式也可使用某個標準的 DTD 來驗證從外部接收到的資料。  您還可以使用 DTD 來驗證您自身的資料。2、DTD - XML 構建模組

XML 以及 HTML 文檔的主要構建模組是類似 <body>....</body> 這樣的標籤。
  XML 文檔構建模組
  所有的 XML 文檔(以及 HTML 文檔)均由以下簡單的構建模組構成:
  元素 
  屬性 
  實體 
  PCDATA 
  CDATA 
  下面是每個構建模組的簡要描述。
  元素
  元素是 XML 以及 HTML 文檔的主要構建模組。
  HTML 元素的例子是 "body" 和 "table"。XML 元素的例子是 "note" 和 "message" 。元素可包含文本、其他元素或者是空的。空的 HTML 元素的例子是 "hr"、"br" 以及 "img"。
  執行個體:
  *********************************************************
  <body>body text in between</body>
  <message>some message in between</message>
  *********************************************************
  屬性
  屬性可提供有關元素的額外資訊。
  屬性總是被置於某元素的開始標籤中。屬性總是以名稱/值的形式成對出現的。下面的 "img" 元素擁有關於源檔案的額外資訊:
  *********************************************************
  <img src="computer.gif" />
  *********************************************************
  元素的名稱是 "img"。屬性的名稱是 "src"。屬性的值是 "computer.gif"並且可以用樣式來控制大小等顯示效果。由於元素本身為空白,它被一個 " /" 關閉。
  實體
  實體是用來定義普通文本的變數。實體引用是對實體的引用。
  大多數同學都瞭解這個 HTML 實體引用:" "。這個“無折行空格”實體在 HTML 中被用於在某個文檔中插入一個額外的空格。
  當文檔被 XML 解析器解析時,實體就會被展開。
  PCDATA
  PCDATA 的意思是被解析的字元資料(parsed character data)。
  可把字元資料想象為 XML 元素的開始標籤與結束標籤之間的文本。
  PDATA 是會被解析器解析的文本。這些文本將被解析器檢查實體以及標記。
  文本中的標籤會被當作標記來處理,而實體會被展開。
  不過,被解析的字元資料不應當包含任何 &、< 或者 > 字元;需要使用 &、&lt; 以及 &gt; 實體來分別替換它們。
  CDATA
  CDATA 的意思是字元資料(character data)。
  CDATA 是不會被解析器解析的文本。在這些文本中的標籤不會被當作標記來對待,其中的實體也不會被展開。3、DTD - 元素

在一個 DTD 中,元素通過元素宣告來進行聲明。
  聲明一個元素
  在 DTD 中,XML 元素通過元素宣告來進行聲明。元素宣告使用下面的文法:
  <!ELEMENT 元素名稱 類別>
  或者
  <!ELEMENT 元素名稱 (元素內容)>
  空元素
  空元素通過類別關鍵詞EMPTY進行聲明:
  <!ELEMENT 元素名稱 EMPTY>
  只有 PCDATA 的元素
  只有 PCDATA 的元素通過圓括弧中的 #PCDATA 進行聲明:
  <!ELEMENT 元素名稱 (#PCDATA)>
  帶有任何內容的元素
  通過類別關鍵詞 ANY 聲明的元素,可包含任何可解析資料的組合:
  <!ELEMENT 元素名稱 ANY>
  帶有子項目(序列)的元素
  帶有一個或多個子項目的元素通過圓括弧中的子項目名進行聲明:
  <!ELEMENT 元素名稱 (子項目名稱 1)>
  或者
  <!ELEMENT 元素名稱 (子項目名稱 1,子項目名稱 2,.....)>
相同的元素至少出現一次的聲明

  文法格式為:
  <!ELEMENT element-name (child-name+)> 
  例:
  <!ELEMENT note (message+)>
  例中的+是指子項目message必須在被包含的note元素裡出現一次或者多次。
相同的元素不出現或者多次出現的聲明

  文法格式為:
  <!ELEMENT element-name (child-name*)>
  例:
  <!ELEMENT note (message*)>  例中的*是指子項目message能夠在被包含的note元素裡不出現或者出現多次。4、DTD - 屬性

在 DTD 中,屬性通過 ATTLIST 聲明來進行聲明。
  聲明屬性
  屬性聲明擁使用下列文法:
  <!ATTLIST 元素名稱 屬性名稱 屬性類型 預設值>
  以下是屬性類型的選項:
  類型 描述 
  CDATA 值為字元資料 (character data) 
  (en1|en2|..) 此值是枚舉列表中的一個值 
  ID 值為唯一的 id 
  IDREF 度量為另外一個元素的 id 
  IDREFS 值為其他 id 的列表 
  NMTOKEN 值為合法的 XML 名稱 
  NMTOKENS 值為合法的 XML 名稱的列表 
  ENTITY 值是一個實體 
  ENTITIES 值是一個實體列表 
  NOTATION 此值是符號的名稱 
  xml: 值是一個預定義的 XML 值 
  預設值參數可使用下列值:
  值 解釋 
  值 屬性的預設值 
  #REQUIRED 屬性值是必需的 
  #IMPLIED 屬性不是必需的 
  #FIXED value 屬性值是固定的 
  規定一個預設的屬性值
  DTD:
  <!ELEMENT square EMPTY>
  <!ATTLIST square width CDATA "0">
  合法的 XML:
  <square width="100" />
  在上面的例子中,"square" 被定義為帶有 CDATA 類型的 "width" 屬性的空元素。如果寬度沒有被設定,其預設值為0 。DTD的優勢和缺陷

DTD的優勢 
  每一個XML文檔都可攜帶一個DTD,用來對該文檔格式進行描述,測試該文檔是否為有效XML文檔。既然DTD有外部和內部之分,當然就可以為某個獨立的團體定義一個公用的外部DTD,那麼多個XML文檔就都可以共用使用該DTD,使得資料交換更為有效。甚至在某些文檔中還可以使內部DTD和外部DTD相結合。在應用程式中也可以用某個DTD來檢測接收到的資料是否符合某個標準。
  對於XML文檔而言,雖然DTD不是必須的,但它為文檔的編製帶來了方便。加強了文檔標記內參數的一致性,使XML文法分析器能夠確認文檔。如果不使用DTD來對XML文檔進行定義,那麼XML文法分析器將無法對該文檔進行確認。
  元素的定義 
  根項目的聲明 
  每個XML文檔都只有一個根項目,其它的子項目都包含在該根項目中。因此在DTD中對根項目的聲明是必不可少的。根項目聲明的一般形式如下:
  <!DOCTYPE root[ 
  <!-- 子項目 --> ]>
  <!-- 檔案體 --> 
  DOCTYPE是“document type”(文件類型)的簡寫,DOCTYPE聲明必須放在文檔最頂部,在所有代碼和標識之上,DOCTYPE聲明是必不可少的關鍵組成部分。DTD文法要求DOCTYPE必須要大寫,而且DOCTYPE和元素之間必須要有空格隔開。如在以上代碼中DOCTYPE和根項目root之間要有空格隔開。
  DTD的缺陷 
  利用DTD驗證有效性的解析器,就能夠立即對文檔的完整性進行可靠的檢查。DTD雖然比較實用,但DTD也有不少的缺陷。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.