DTD -- XML驗證

來源:互聯網
上載者:User

標籤:

DTD(文件類型定義)的作用是定義 XML 文檔的合法構建模組。

DTD 可被成行地聲明於 XML 文檔中,也可作為一個外部參考。

DTD簡介

內部的 DOCTYPE 聲明

假如 DTD 被包含在您的 XML 摘要檔案中,它應當通過下面的文法封裝在一個 DOCTYPE 聲明中:

<?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>

!DOCTYPE note (第二行)定義此文檔是 note 類型的文檔。

!ELstrongENT note (第三行)定義 note 元素有四個元素:"to、from、heading,、body"

!ELstrongENT to (第四行)定義 to 元素為 "#PCDATA" 類型

!ELstrongENT from (第五行)定義 frome 元素為 "#PCDATA" 類型

!ELstrongENT heading (第六行)定義 heading 元素為 "#PCDATA" 類型

!ELstrongENT body (第七行)定義 body 元素為 "#PCDATA" 類型

 

外部文檔聲明

假如 DTD 位於 XML 摘要檔案的外部,那麼它應通過下面的文法被封裝在一個 DOCTYPE 定義中:

<!DOCTYPE root-element SYSTEM "filename">

以下是 XML 文檔,這個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 來驗證您自身的資料。

 

DTD - XML 構建模組

XML 文檔構建模組

所有的 XML 文檔(以及 HTML 文檔)均由以下簡單的構建模組構成:

Elements :元素

Attributes :屬性

Entities :實體

PCDATA :

  意思是被解析的字元資料(parsed character data)。

  可把字元資料想象為 XML 元素的開始標籤與結束標籤之間的文本。

  PCDATA 是會被解析器解析的文本。這些文本將被解析器檢查實體以及標記。

  文本中的標籤會被當作標記來處理,而實體會被展開。

  不過,被解析的字元資料不應當包含任何 &、< 或者 > 字元;需要使用 &amp;、&lt; 以及 &gt; 實體來分別替換它們。

CDATA :

  意思是字元資料(character data)。

  CDATA 是不會被解析器解析的文本。在這些文本中的標籤不會被當作標記來對待,其中的實體也不會被展開。

 

DTD - 元素

在一個 DTD 中,元素通過元素宣告來進行聲明。

聲明一個元素

在 DTD 中,XML 元素通過元素宣告來進行聲明。元素宣告使用下面的文法:

<!ELEMENT element-name category>或<!ELEMENT element-name (element-content)>

 

空元素

空元素通過類別關鍵詞EMPTY進行聲明:

<!ELEMENT element-name EMPTY>執行個體:<!ELEMENT br EMPTY>XML example:<br />

 

只有 PCDATA 的元素

只有 PCDATA 的元素通過圓括弧中的 #PCDATA 進行聲明:

<!ELEMENT element-name (#PCDATA)>執行個體:<!ELEMENT from (#PCDATA)>

 

帶有任何內容的元素
通過類別關鍵詞 ANY 聲明的元素,可包含任何可解析資料的組合:

<!ELEMENT element-name ANY>執行個體:<!ELEMENT note ANY>

 

帶有子項目(序列)的元素
帶有一個或多個子項目的元素通過圓括弧中的子項目名進行聲明:

<!ELEMENT element-name (child1)>或<!ELEMENT element-name (child1,child2,...)>執行個體:<!ELEMENT note (to,from,heading,body)>

 

當子項目按照由逗號分隔開的序列進行聲明時,這些子項目必須按照相同的順序出現在文檔中。在一個完整的聲明中,子項目也必須被聲明,同時子項目也可擁有子項目。"note" 元素的完整聲明是:

<!ELEMENT note (to,from,heading,body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>

 

聲明只出現一次的元素

<!ELEMENT element-name (child-name)>執行個體:<!ELEMENT note (message)>

上面的例子聲明了:message 子項目必須出現一次,並且必須只在 "note" 元素中出現一次。


聲明最少出現一次的元素

<!ELEMENT element-name (child-name+)>執行個體:<!ELEMENT note (message+)>

上面的例子中的加號(+)聲明了:message 子項目必須在 "note" 元素內出現至少一次。


聲明出現零次或多次的元素

<!ELEMENT element-name (child-name*)>執行個體:<!ELEMENT note (message*)>

上面的例子中的星號(*)聲明了:子項目 message 可在 "note" 元素內出現零次或多次。

 

聲明出現零次或一次的元素

<!ELEMENT element-name (child-name?)>執行個體:<!ELEMENT note (message?)>

上面的例子中的問號(?)聲明了:子項目 message 可在 "note" 元素內出現零次或一次。

 

聲明"非.../既..."類型的內容

執行個體:<!ELEMENT note (to,from,header,(message|body))>

上面的例子聲明了:"note" 元素必須包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素既 "body" 元素。

 

聲明混合型的內容

執行個體:<!ELEMENT note (#PCDATA|to|from|header|message)*>

上面的例子聲明了:"note" 元素可包含出現零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"。

 

DTD - 屬性

 

DTD - 實體

 

DTD -- XML驗證

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.