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

<!DOCTYPE rootname SYSTEM URL>

  • 關鍵字SYSTEM表示它是私有DTD(不適用於公開發布)。
  • URL[DTD]的存在表明這是一個外部和內部DTD(DTD的一部分在位於URL的文件中定義,另一部分在XML文件中定義)。

範例

<!DOCTYPE tutorials SYSTEM "tutorials.dtd">

<!DOCTYPE rootname SYSTEM URL [DTD]>

  • 關鍵字SYSTEM表示它是私有DTD(不適用於公開發布)。
  • URL[DTD]的存在表明這是一個外部和內部DTD(DTD的一部分在位於URL的文件中定義,另一部分在XML文件中定義)。

範例

<!DOCTYPE tutorials SYSTEM "tutorials.dtd" [
<!ELEMENT tutorial (summary)>
<!ELEMENT summary (#PCDATA)>
]>

<!DOCTYPE rootname PUBLIC identifier URL>

  • 關鍵字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">