DTD <!DOCTYPE>
如果您查看某些XML文檔,可能已經注意到一行以<!DOCTYPE
開頭出現在文檔頂部附近。
如果您查看過(有效)XHTML文件的源代碼,可能會看到如下所示的行:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
此行的目的是聲明文檔類型定義(DTD)。 實際上,是使用了!DOCTYPE
聲明來定義實體。DTD指定了有關XML文檔中元素的規則。
1. DOCTYPE語法
要在XML文檔中使用DTD,需要聲明它。 DTD可以是內部的(寫入正在使用的文檔中),也可以是外部的(位於另一個文檔中)。
使用!DOCTYPE
聲明在XML文檔的頂部(在prolog
中)聲明瞭一個DTD。 基本語法是:
<!DOCTYPE rootname [DTD]>
其中,rootname
是根元素,[DTD]
是實際定義。
實際上,根據DTD是內部還是外部(或兩者),公共或私人,有一些細微的變化。 它們概述如下。
DTD的變化
<!DOCTYPE rootname [DTD]>
這是一個內部DTD(DTD在XML文檔中的方括號之間定義)。
示例
<!DOCTYPE tutorials [
<!ELEMENT tutorials (tutorial)+>
<!ELEMENT tutorial (name,url)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT url (#PCDATA)>
<!ATTLIST tutorials type CDATA #REQUIRED>
]>
- 關鍵字
SYSTEM
表示它是私有DTD(不適用於公開發布)。 -
URL
和[DTD]
的存在表明這是一個外部和內部DTD(DTD的一部分在位於URL的文檔中定義,另一部分在XML文檔中定義)。
示例
<!DOCTYPE tutorials SYSTEM "tutorials.dtd">
- 關鍵字
SYSTEM
表示它是私有DTD(不適用於公開發布)。 -
URL
和[DTD]
的存在表明這是一個外部和內部DTD(DTD的一部分在位於URL的文檔中定義,另一部分在XML文檔中定義)。
示例
<!DOCTYPE tutorials SYSTEM "tutorials.dtd" [
<!ELEMENT tutorial (summary)>
<!ELEMENT summary (#PCDATA)>
]>
- 關鍵字
PUBLIC
表示它是公共DTD(用於公共分發)。 -
URL
的存在表明這是一個外部DTD(DTD在位於URL的文檔中定義)。 - 標識符表示正式的公共標識符,在使用公共DTD時是必需的。
示例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">