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