DTD -- XML验证
DTD(文檔類型定義)的作用是定義 XML 文檔的合法構(gòu)建模塊。
DTD 可被成行地聲明于 XML 文檔中,也可作為一個(gè)外部引用。
DTD簡介
內(nèi)部的 DOCTYPE 聲明
假如 DTD 被包含在您的 XML 源文件中,它應(yīng)當(dāng)通過下面的語法包裝在一個(gè) 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 元素有四個(gè)元素:"to、from、heading,、body"
!ELstrongENT to (第四行)定義 to 元素為 "#PCDATA" 類型
!ELstrongENT from (第五行)定義 frome 元素為 "#PCDATA" 類型
!ELstrongENT heading (第六行)定義 heading 元素為 "#PCDATA" 類型
!ELstrongENT body (第七行)定義 body 元素為 "#PCDATA" 類型
?
外部文檔聲明
假如 DTD 位于 XML 源文件的外部,那么它應(yīng)通過下面的語法被封裝在一個(gè) DOCTYPE 定義中:
<!DOCTYPE root-element SYSTEM "filename">以下是 XML 文檔,這個(gè)XML文檔和上面的 XML 文檔相同,但是擁有一個(gè)外部的 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,您的每一個(gè) XML 文件均可攜帶一個(gè)有關(guān)其自身格式的描述。
通過 DTD,獨(dú)立的團(tuán)體可一致地使用某個(gè)標(biāo)準(zhǔn)的 DTD 來交換數(shù)據(jù)。
而您的應(yīng)用程序也可使用某個(gè)標(biāo)準(zhǔn)的 DTD 來驗(yàn)證從外部接收到的數(shù)據(jù)。
您還可以使用 DTD 來驗(yàn)證您自身的數(shù)據(jù)。
?
DTD - XML 構(gòu)建模塊
XML 文檔構(gòu)建模塊
所有的 XML 文檔(以及 HTML 文檔)均由以下簡單的構(gòu)建模塊構(gòu)成:
Elements :元素
Attributes :屬性
Entities :實(shí)體
PCDATA :
意思是被解析的字符數(shù)據(jù)(parsed character data)。
可把字符數(shù)據(jù)想象為 XML 元素的開始標(biāo)簽與結(jié)束標(biāo)簽之間的文本。
PCDATA 是會(huì)被解析器解析的文本。這些文本將被解析器檢查實(shí)體以及標(biāo)記。
文本中的標(biāo)簽會(huì)被當(dāng)作標(biāo)記來處理,而實(shí)體會(huì)被展開。
不過,被解析的字符數(shù)據(jù)不應(yīng)當(dāng)包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 實(shí)體來分別替換它們。
CDATA :
意思是字符數(shù)據(jù)(character data)。
CDATA 是不會(huì)被解析器解析的文本。在這些文本中的標(biāo)簽不會(huì)被當(dāng)作標(biāo)記來對(duì)待,其中的實(shí)體也不會(huì)被展開。
?
DTD - 元素
在一個(gè) DTD 中,元素通過元素聲明來進(jìn)行聲明。
聲明一個(gè)元素
在 DTD 中,XML 元素通過元素聲明來進(jìn)行聲明。元素聲明使用下面的語法:
<!ELEMENT element-name category> 或 <!ELEMENT element-name (element-content)>?
空元素
空元素通過類別關(guān)鍵詞EMPTY進(jìn)行聲明:
<!ELEMENT element-name EMPTY>實(shí)例:<!ELEMENT br EMPTY>XML example:<br />?
只有 PCDATA 的元素
只有 PCDATA 的元素通過圓括號(hào)中的 #PCDATA 進(jìn)行聲明:
<!ELEMENT element-name (#PCDATA)>實(shí)例:<!ELEMENT from (#PCDATA)>?
帶有任何內(nèi)容的元素
通過類別關(guān)鍵詞 ANY 聲明的元素,可包含任何可解析數(shù)據(jù)的組合:
?
帶有子元素(序列)的元素
帶有一個(gè)或多個(gè)子元素的元素通過圓括號(hào)中的子元素名進(jìn)行聲明:
?
當(dāng)子元素按照由逗號(hào)分隔開的序列進(jìn)行聲明時(shí),這些子元素必須按照相同的順序出現(xiàn)在文檔中。在一個(gè)完整的聲明中,子元素也必須被聲明,同時(shí)子元素也可擁有子元素。"note" 元素的完整聲明是:
<!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>?
聲明只出現(xiàn)一次的元素
<!ELEMENT element-name (child-name)>實(shí)例:<!ELEMENT note (message)>上面的例子聲明了:message 子元素必須出現(xiàn)一次,并且必須只在 "note" 元素中出現(xiàn)一次。
聲明最少出現(xiàn)一次的元素
上面的例子中的加號(hào)(+)聲明了:message 子元素必須在 "note" 元素內(nèi)出現(xiàn)至少一次。
聲明出現(xiàn)零次或多次的元素
上面的例子中的星號(hào)(*)聲明了:子元素 message 可在 "note" 元素內(nèi)出現(xiàn)零次或多次。
?
聲明出現(xiàn)零次或一次的元素
<!ELEMENT element-name (child-name?)>實(shí)例:<!ELEMENT note (message?)>上面的例子中的問號(hào)(?)聲明了:子元素 message 可在 "note" 元素內(nèi)出現(xiàn)零次或一次。
?
聲明"非.../既..."類型的內(nèi)容
實(shí)例:<!ELEMENT note (to,from,header,(message|body))>上面的例子聲明了:"note" 元素必須包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素既 "body" 元素。
?
聲明混合型的內(nèi)容
實(shí)例:<!ELEMENT note (#PCDATA|to|from|header|message)*>上面的例子聲明了:"note" 元素可包含出現(xiàn)零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"。
?
DTD - 屬性
?
DTD - 實(shí)體
?
轉(zhuǎn)載于:https://www.cnblogs.com/hf8051/p/4846432.html
總結(jié)
以上是生活随笔為你收集整理的DTD -- XML验证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软 Win11 发行预览版 22621
- 下一篇: 退押金无望:ofo 小黄车已彻底无法登录