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。