DTD語法
XML DTD既可以在文檔中指定,也可以保存在單獨的文檔中,然後可以將文檔鏈接到DTD文檔以使用它。
語法
DTD的基本語法如下 -
<!DOCTYPE element DTD identifier
[
declaration1
declaration2
........
]>
在上面的語法中 -
-
DTD
以<!DOCTYPE
分隔符開頭。 - 元素告訴解析器從指定的根元素解析文檔。
- DTD標識符是文檔類型定義的標識符,可以是系統上文件的路徑或Internet上文件的URL。 如果DTD指向外部路徑,則稱爲外部子集。
- 方括號
[]
包含一個稱爲內部子集的可選實體聲明列表。
內部DTD
如果在XML文件中聲明元素,則這樣的DTD稱爲內部DTD。 要將其作爲內部DTD引用,XML聲明中的standalone
屬性必須設置爲yes
。 它表示聲明的工作獨立於外部源。
語法
內部DTD的語法如下所示 -
<!DOCTYPE root-element [element-declarations]>
其中root-element
是根元素的名稱,element-declarations
是聲明元素的位置。
示例
以下是內部DTD的一個簡單示例 -
<?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 Su</name>
<company>Yiibai Yiibai</company>
<phone>(086) 123-4567-789</phone>
</address>
下面來看看上面的代碼 -
開始聲明 - 使用以下語句開始XML聲明。
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
DTD
- 緊跟在XML標頭之後,文檔類型聲明如下,通常稱爲DOCTYPE
-
<!DOCTYPE address [
DOCTYPE
聲明在元素名稱的開頭有一個感嘆號(!
)。 DOCTYPE
通知解析器DTD與此XML文檔相關聯。
DTD主體 - DOCTYPE
聲明後跟DTD的主體,可以在主體中聲明元素,屬性,實體和符號 -
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone_no (#PCDATA)>
這裏聲明瞭幾個元素,它們構成了<name>
文檔的詞彙表。 <!ELEMENT name(#PCDATA)>
將元素名稱定義爲「#PCDATA」
類型。這裏#PCDATA
表示可解析的文本數據。
結束聲明 - 最後,DTD的聲明部分使用右括號和閉合角括號 - ]>
關閉。 這有效地結束了定義,此後就是XML文檔的內容。
規則
- 文檔類型聲明必須出現在文檔的開頭(僅在XML標題之前) - 文檔中的任何其他位置都不允許。
- 與
DOCTYPE
聲明類似,元素聲明必須以感嘆號開頭。 - 文檔類型聲明中的
Name
必須與根元素的元素類型匹配。
外部DTD
在外部DTD元素在XML文件之外聲明。 可以通過指定系統屬性來訪問它們,這些屬性可以是合法的.dtd
文件或有效的URL。 要將其作爲外部DTD引用,必須將XML聲明中的standalone
屬性設置爲no
。 它表示聲明包括來自外部源的信息。
語法
以下是外部DTD的語法 -
<!DOCTYPE root-element SYSTEM "file-name">
其中file-name
是擴展名爲.dtd
的文件。
示例
以下示例顯示了外部DTD用法 -
<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
<!DOCTYPE address SYSTEM "address.dtd">
<address>
<name>Tanmay Su</name>
<company>Yiibai Yiibai</company>
<phone>(086) 123-4567789</phone>
</address>
DTD文件address.dtd
的內容如下所示 -
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
類型
可以使用系統標識符或公共標識符來引用外部DTD。
系統標識符
系統標識符可用於指定包含DTD聲明的外部文件的位置。 語法如下 -
<!DOCTYPE name SYSTEM "address.dtd" [...]>
如上所見,它包含關鍵字SYSTEM
和指向文檔位置的URI引用。
PUBLIC標識符
PUBLIC
標識符提供了一種定位DTD資源的機制,如下所示 -
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
如上所見,它以關鍵字PUBLIC
開頭,後跟專用標識符。 PUBLIC
標識符用於標識目錄中的條目。 PUBLIC
標識符可以遵循任何格式,但是,常用的格式稱爲PUBLIC
公共標識符或FPI。