XML - DTD



XML 文件型別宣告,通常稱為 DTD,是一種精確描述 XML 語言的方法。DTD 根據相應 XML 語言的語法規則,檢查 XML 文件的詞彙和結構的有效性。

XML DTD 可以寫在文件內部,也可以儲存在單獨的文件中,然後單獨連結。

語法

DTD 的基本語法如下:

<!DOCTYPE element DTD identifier
[
   declaration1
   declaration2
   ........
]>

在上述語法中:

  • DTD 以 <!DOCTYPE 分隔符開頭。

  • 元素 告訴解析器從指定的根元素開始解析文件。

  • DTD 識別符號 是文件型別定義的識別符號,可以是系統上檔案的路徑,也可以是網際網路上檔案的 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 Patil</name>
   <company>TutorialsPoint</company>
   <phone>(011) 123-4567</phone>
</address>

讓我們來看一下上面的程式碼:

開始宣告 - 使用以下語句開始 XML 宣告。

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>

DTD - 在 XML 頭之後,緊跟著文件型別宣告,通常稱為 DOCTYPE:

<!DOCTYPE address [

DOCTYPE 宣告在元素名稱的開頭有一個感嘆號 (!) 。DOCTYPE 通知解析器此 XML 文件與 DTD 相關聯。

DTD 主體 - DOCTYPE 宣告之後是 DTD 的主體,在其中宣告元素、屬性、實體和符號。

<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone_no (#PCDATA)>

這裡聲明瞭幾個元素,它們構成了<name>文件的詞彙表。<!ELEMENT name (#PCDATA)> 定義元素name 的型別為“#PCDATA”。這裡 #PCDATA 表示可解析的文字資料。

結束宣告 - 最後,DTD 的宣告部分用右括號和右尖括號 (]>) 關閉。這有效地結束了定義,之後 XML 文件緊隨其後。

規則

  • 文件型別宣告必須出現在文件的開頭(僅在 XML 頭之前) - 不允許出現在文件中的其他任何位置。

  • 與 DOCTYPE 宣告類似,元素宣告必須以感嘆號開頭。

  • 文件型別宣告中的名稱必須與根元素的元素型別匹配。

外部 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 Patil</name>
   <company>TutorialsPoint</company>
   <phone>(011) 123-4567</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 引用。

公共識別符號

公共識別符號提供了一種定位 DTD 資源的機制,其編寫方式如下:

<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">

如您所見,它以關鍵字 PUBLIC 開頭,後跟一個專用識別符號。公共識別符號用於標識目錄中的條目。公共識別符號可以遵循任何格式,但是,常用的格式稱為正式公共識別符號,或 FPI

廣告