DTD 學習筆記
前言
DTD (Document Type Definition)的作用是定義 XML 文檔的合法構模組化塊。
DOCTYPE 聲明方式
一、内部的 DOCTYPE 聲明
格式:
<!DOCTYPE 根元素 [元素聲明]>
例如:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE book [
<!ELEMENT book (bookName, publishedDate, author)>
<!ELEMENT bookName (#PCDATA)>
<!ELEMENT publishedDate (#PCDATA)>
<!ELEMENT author (authorName, birthday)>
<!ELEMENT authorName (#PCDATA)>
<!ELEMENT birthday (#PCDATA)>
]>
<book>
<bookName>Thinking in Java</bookName>
<publishedDate>2017-04</publishedDate>
<author>
<authorName>Bruce Eckel</authorName>
<birthday>1957-07-08</birthday>
</author>
</book>
二、外部的 DOCTYPE 聲明
<!DOCTYPE 根元素 SYSTEM "檔案名">
DTD 檔案(bookOuter.dtd)
<!ELEMENT book (bookName, publishedDate, author)>
<!ELEMENT bookName (#PCDATA)>
<!ELEMENT publishedDate (#PCDATA)>
<!ELEMENT author (authorName, birthday)>
<!ELEMENT authorName (#PCDATA)>
<!ELEMENT birthday (#PCDATA)>
XML 檔案
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE book SYSTEM "bookOuter.dtd">
<book>
<bookName>Thinking in Java</bookName>
<publishedDate>2017-04</publishedDate>
<author>
<authorName>Bruce Eckel</authorName>
<birthday>1957-07-08</birthday>
</author>
</book>
構模組化塊
元素
聲明一個元素
<!--元素第一種形式-->
<!ELEMENT 元素名稱 類别>
<!--元素第二種形式-->
<!ELEMENT 元素名稱 (元素内容)>
<!--空元素-->
<!ELEMENT 元素名稱 EMPTY> eg: <!ELEMENT br EMPTY>
<!--隻有 PCDATA 的元素-->
<!ELEMENT 元素名稱 (#PCDATA)> eg: <!ELEMENT bookName (#PCDATA)>
<!--可以帶任何内容的元素-->
<!ELEMENT 元素名稱 ANY> eg: <!ELEMENT book ANY>
<!--帶子元素的元素-->
<!ELEMENT 元素名稱 (子元素清單)> eg: <!ELEMENT book (bookName, publishedDate, author)>
聲明元素出現次數
<!--子元素清單中每個元素,隻能出現一次-->
<!ELEMENT 元素名稱 (子元素清單)>
<!--子元素清單中的元素至少出現一次-->
<!ELEMENT 元素名稱 (子元素清單)+>
<!--子元素清單中的元素,出現零次或者多次-->
<!ELEMENT 元素名稱 (子元素清單)*>
<!--子元素清單中的元素,出現零次或者一次-->
<!ELEMENT 元素名稱 (子元素清單)?>
<!--子元素清單中聲明非某元素既某元素,元素C、元素D隻能出現一個元素-->
<!ELEMENT 元素名稱 (子元素A,子元素B,(子元素C|子元素D))>
屬性
元素聲明之後,可以聲明元素中對應的屬性
<!ELEMENT 元素名稱 (子元素清單)>
<!ATTLIST 元素名稱 屬性名稱 屬性類型 預設值 屬性值的預設性>
屬性類型

屬性值的預設性
*實體
<!ENTITY 實體名稱 "實體值">
實體由三部分組成: & + 實體名稱 + ;
需要将 ; 前面的 \ 去掉
PCDATA
PCDATA 是會被解析器解析的文本。文本中标簽和實體會被解析處理。
CDATA
CDATA 是不會被解析器解析的文本。文本中标簽和實體當做文本處理。