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。