02 XML DTD
一、DTD 簡介
DTD (Document Type Definition 文檔類型定義)可定義合法的XML文檔構建模塊。它使用一系列合法的元素來定義文檔的結構。DTD 可被成行地聲明於 XML 文檔中,也可作爲一個外部引用。
二、DTD 文檔聲明
-
內部聲明
基本格式:<!DOCTYPE 根元素 [元素聲明]>
<?xml version="1.0"?> <!DOCTYPE note [ <!ELEMENT note (to,from)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> ]> <note> <to>George</to> <from>John</from> </note>
以上 DTD 解釋如下:
!DOCTYPE note (第二行)定義此文檔是 note 類型的文檔。
!ELEMENT note (第三行)定義 note 元素有四個元素:“to、from、heading,、body”
!ELEMENT to (第四行)定義 to 元素爲 “#PCDATA” 類型
!ELEMENT from (第五行)定義 from 元素爲 “#PCDATA” 類型 -
外部引用
基本格式:<!DOCTYPE 根元素 SYSTEM "文件名">
<?xml version="1.0"?> <!DOCTYPE note SYSTEM "note.dtd"> <note> <to>George</to> <from>John</from> </note>
外部引用文件:note.dtd
<!ELEMENT note (to,from)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)>
三、DTD - XML 構建模塊
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="001">
<name>張三</name>
<age>18</age>
<hobby>籃球</hobby>
</student>
<student id="002">
<name>李四</name>
<age>25</age>
<hobby>足球</hobby>
</student>
</students>
XML 構建模塊構成:
- 元素
students 、student 、name 、age 、hobby
都是元素 - 屬性
id="001"
,其中id
是屬性,"001"
是屬性值 - PCDATA
PCDATA 的意思是被解析的字符數據(parsed character data)。
可把字符數據想象爲 XML 元素的開始標籤與結束標籤之間的文本。
PCDATA 是會被解析器解析的文本。這些文本將被解析器檢查實體以及標記。
文本中的標籤會被當作標記來處理,而實體會被展開。
不過,被解析的字符數據不應當包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 實體來分別替換它們。 - CDATA
CDATA 的意思是字符數據(character data)。
CDATA 是不會被解析器解析的文本。在這些文本中的標籤不會被當作標記來對待,其中的實體也不會被展開。
四、DTD 元素
-
聲明一個元素
<!ELEMENT 元素名稱 類別>
或者
<!ELEMENT 元素名稱 (元素內容)>
-
空元素
<!ELEMENT 元素名稱 EMPTY>
-
只有 PCDATA 的元素
<!ELEMENT 元素名稱 (#PCDATA)>
-
帶有任何內容的元素
<!ELEMENT 元素名稱 ANY>
-
帶有子元素(序列)的元素
<!ELEMENT 元素名稱 (子元素名稱 1,子元素名稱 2,.....)>
-
聲明最少出現一次的元素
<!ELEMENT 元素名稱 (子元素名稱+)>
-
聲明出現零次或多次的元素
<!ELEMENT 元素名稱 (子元素名稱*)>
-
聲明出現零次或一次的元素
<!ELEMENT 元素名稱 (子元素名稱?)>
-
聲明“非…/既…”類型的內容
<!ELEMENT note (to,from,header,(message|body))>
上面的例子聲明瞭:“note” 元素必須包含 “to” 元素、“from” 元素、“header” 元素,以及非 “message” 元素既 “body” 元素。 -
聲明混合型的內容
<!ELEMENT note (#PCDATA|to|from|header|message)*>
上面的例子聲明瞭:“note” 元素可包含出現零次或多次的 PCDATA、“to”、“from”、“header” 或者 “message”。
五、DTD 屬性
-
屬性聲明
屬性聲明使用下列語法:
<!ATTLIST 元素名稱 屬性名稱 屬性類型 默認值>
-
屬性類型的選項
類型 | 描述 |
---|---|
CDATA | 值爲字符數據 (character data) |
(en1 | en2 |
ID | 值爲唯一的 id |
IDREF | 值爲另外一個元素的 id |
IDREFS | 值爲其他 id 的列表 |
NMTOKEN | 值爲合法的 XML 名稱 |
NMTOKENS | 值爲合法的 XML 名稱的列表 |
ENTITY | 值是一個實體 |
ENTITIES | 值是一個實體列表 |
NOTATION | 此值是符號的名稱 |
xml: | 值是一個預定義的 XML 值 |
- 默認值參數可使用值
值 | 解釋 |
---|---|
值 | 屬性的默認值 |
#REQUIRED | 屬性值是必需的 |
#IMPLIED | 屬性不是必需的 |
#FIXED value | 屬性值是固定的 |
六、DTD 實體
-
內部實體定義
<!ENTITY 實體名稱 "實體的值">
示例: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note [ <!ELEMENT note (name)> <!ELEMENT name (#PCDATA)> <!ENTITY write "張三"> ]> <note> <name>&write;</name> </note> //一個實體由三部分構成: 一個和號 (&), 一個實體名稱, 以及一個分號 (;)。
-
外部引用實體
<!ENTITY 實體名稱 SYSTEM "URI/URL">