如果您檢視某些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文件中元素的規則。
要在XML文件中使用DTD,需要宣告它。 DTD可以是內部的(寫入正在使用的文件中),也可以是外部的(位於另一個文件中)。
使用!DOCTYPE
宣告在XML文件的頂部(在prolog
中)宣告了一個DTD。 基本語法是:
<!DOCTYPE rootname [DTD]>
其中,rootname
是根元素,[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的文件中定義)。範例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">