Like Share Discussion Bookmark Smile

J.J. Huang   2022-11-25   XML 2.延伸介紹   瀏覽次數:次   DMCA.com Protection Status

XML教學 | XML DTD

XML DTD是什麼?

XML提供了兩種文件的驗證機制,其中一個視DTD(縮寫:Data Type Definition),是XML比較早期用來驗證資料格式正確性的做法。
另一個則是XSD(縮寫:XML Schema Definition),目前的主流是使用XSD來驗證文件。

註:建議還是先了解DTD,下一章節會介紹XSD

DTD整個的重點放在Definition,表示用來訂出文件合法的區塊,也就是把元素的架構寫出來。

  • DOCTYPE有兩種類型的聲明:
    • 內部DOCTYPE聲明d
    • 外部文檔聲明

內部聲明的範例

通過以下語法包裝聲明:

1
<!DOCTYPE root-element [element-declarations]>

範例(XML):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>

以上DTD解釋如下:

語法 定義
!DOCTYPE note (第二行) 定義此文檔是 note 類型的文檔。
!ELEMENT note (第三行) 定義 note 元素有四個元素:”to、from、heading,、body”
!ELEMENT to (第四行) 定義 to 元素為 “#PCDATA” 類型
!ELEMENT from (第五行) 定義 from 元素為 “#PCDATA” 類型
!ELEMENT heading (第六行) 定義 heading 元素為 “#PCDATA” 類型
!ELEMENT body (第七行) 定義 body 元素為 “#PCDATA” 類型

注意:!DOCTYPE下面一定接根元素;!DOCTYPE下面的第一行!ELEMENT也一定是根元素開頭。


外部聲明的範例

通過以下語法指定外部聲明的檔案:

1
<!DOCTYPE root-element SYSTEM "filename">

範例(DTD):

1
2
3
4
5
6
7
8
<!DOCTYPE note
[
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>

範例(XML):

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

相關使用時機

  • 何時使用DTD

    • 使用DTD,獨立團體可以同意使用標準DTD來交換資料。
    • 使用DTD,您可以驗證從外部接收的資料是否有效。
    • 您還可以使用DTD來驗證您自己的資料。
  • 什麼時候不使用DTD

    • XML不需要DTD時。
    • 當您試驗XML或處理小型XML文件時,創建DTD可能是浪費時間。
    • 如果您開發應用程序,請等到規範穩定後再添加DTD。否則,您的軟體可能會因為驗證錯誤而停止工作。

結語

此章節「簡單」介紹了XML DTD
其實DTD可以視為一種協議,不同的使用者透過共同訂制的DTD交換資料,應用程式也透過DTD驗證所接收的XML是否正確有效。


註:以上參考了
維基百科-XML
維基百科-XML DTD
w3resource.com - XML DTDXML , XLink 和 XPointer
XML 學習筆記 - XML DTD
Family with 220 icons by inipagi