XML 文檔類(lèi)型定義,俗稱 DTD,它是一種準(zhǔn)確描述 XML 語(yǔ)言的方式。DTDs 根據(jù)適當(dāng) XML 語(yǔ)言的語(yǔ)法規(guī)則檢查 XML 文檔的詞匯和結(jié)構(gòu)的有效性。
XML DTD 可以指定在文檔內(nèi)部,也可以保存在獨(dú)立的文檔中然后單獨(dú)鏈接。
DTD 的基本語(yǔ)法如下所示:
<!DOCTYPE element DTD identifier
[
declaration1
declaration2
........
]>
上述語(yǔ)法中:
如果一個(gè)元素聲明在 XML 文檔的內(nèi)部則 DTD 被稱為內(nèi)部 DTD。為了把它作為內(nèi)部 DTD,XML 聲明中的 standalone 屬性必須設(shè)置為 yes。這意味著,聲明的工作獨(dú)立于外部源。
內(nèi)部 DTD 語(yǔ)法如下所示:
<!DOCTYPE root-element [element-declarations]>
這里 root-element 是根元素的名稱,element-declarations 表示我們聲明的元素。
下面是一個(gè)內(nèi)部 DTD 的簡(jiǎn)單示例:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE address [
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
]>
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
我們來(lái)看一下上面的代碼:
開(kāi)始聲明 - 使用如下語(yǔ)句開(kāi)始 XML 聲明:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
DTD - 緊跟在 XML 頭后面,_文檔類(lèi)型聲明_如下,通常被稱為 DOCTYPE:
<!DOCTYPE address [
DOCTYPE 聲明在元素名稱的開(kāi)頭包含一個(gè)感嘆號(hào)(!)。DOCTYPE 會(huì)通知解析器有一個(gè) DTD 與這個(gè)文檔相關(guān)聯(lián)。
DTD Body - DOCTYPE 聲明后面緊跟 DTD 體,這里我們聲明元素,屬性,實(shí)體和符號(hào):
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone_no (#PCDATA)>
許多元素都在這里通過(guò) <name>
文檔詞匯聲明。<!ELEMENT name (#PCDATA)>
定義元素_名稱_為 "#PCDATA" 類(lèi)型。這里 #PCDATA 意味著可解析的文本數(shù)據(jù)。
結(jié)束聲明 - 最后,DTD 的聲明部分使用方括號(hào)和尖括號(hào)(]>)閉合。這是一個(gè)有效的結(jié)束定義,后面緊跟的就是 XML 文檔內(nèi)容。
在外部 DTD 中元素聲明在 XML 文檔的外部。通過(guò)指定 system 屬性來(lái)訪問(wèn),這個(gè)屬性值可以是合法的 .dtd 文件或者有效的 URL。為了指示它是外部 DTD,XML 聲明的 standalone 屬性必須設(shè)置為 no。這就意味著,聲明包含來(lái)自外部源的信息。
下面是外部 DTD 的語(yǔ)法:
<!DOCTYPE root-element SYSTEM "file-name">
這里 file-name 就是 .dtd 擴(kuò)展的文件。
下面的示例展示了外部 DTD 的用法:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE address SYSTEM "address.dtd">
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
DTD 文件 address.dtd 的內(nèi)容如下所示:
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
我們可以通過(guò)使用系統(tǒng)標(biāo)示符或者公共標(biāo)示符引用一個(gè)外部DTD。
系統(tǒng)標(biāo)示符
系統(tǒng)標(biāo)示符允許我們指定包含 DTD 聲明的外部文件的位置。語(yǔ)法如下:
<!DOCTYPE name SYSTEM "address.dtd" [...]>
正如我們可以看到的,它包含 SYSTEM 關(guān)鍵字和一個(gè)指向文檔位置的 URI 引用。
公共標(biāo)示符
公共標(biāo)示符提供了一種定位 DTD 資源的機(jī)制,寫(xiě)法如下:
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
正如我們可以看到的,它以 PUBLIC 關(guān)鍵字開(kāi)始,后面緊跟的是專(zhuān)門(mén)的標(biāo)識(shí)符。公共標(biāo)識(shí)符被用來(lái)標(biāo)識(shí)目錄中的條目。公共標(biāo)識(shí)符可以遵循任意格式,但是常用的格式是正式公用標(biāo)識(shí)符(或者 FPIs)。