精簡的記一下DTD
Tips:
DTD的所有關鍵字必須大寫
DTD有外部和內部兩種
1 內部DTD
由 <! 開始 接着 是DOCTYPE 然後是在 [ ] 裏的標記聲明塊 最後由 > 結束
2 外部DTD
用關鍵字 SYSTEM 或者PUBLIC 來指出DTD文件的位置
SYSTEM 表示是私有DTD文件 使用SYSTEM時 格式如下
URL可以是相對或者絕對路徑
PUBLIC 是公共的DTD 並且還要包含一個DTD的名稱 格式如下:
DTD的結構
1 元素類型聲明
內容說明的形式:
(1) #PCDATA 說明包含字符數據
(2) 子元素
* 表示零或者多個
| 表示或者
, 表示按順序出現
+ 表示有一個或者多個
? 表示零個或者一個
一個典型例子
(3) 混合內容 前兩者的結合或者任意組合
(4) EMPTY 表示什麼都不含有的 空元素
(5) ANY 任何字符數據和子元素
2 實體聲明 用來在DTD或者XML中引用定義好的內容 避免重複帶來的麻煩 主要有一般實體和參數實體
比如xml中可能有一個公告 要在很多地方引用
<!DOCTYPE 公告[
<!ELEMENT 公告(時間,內容)>
<!ELEMENT 時間 (#PCDATA)>
<!ELEMENT 內容 (#PCDATA)>
<!ENTITY 時間 "1999年1月1日">
<!ENTITY 內容 "今天是新年的第一天">
]>
<公告>
<時間>&時間;</時間>
<內容>&內容;</內容>
</公告>
以上時一般實體 參數實體的不同就是 只能在DTD內部使用
<!DOCTYPE 公告[
<!ELEMENT 公告(時間,內容)>
<!ELEMENT 時間 (#PCDATA)>
<!ELEMENT 內容 (#PCDATA)>
<!ENTITY %時間 "1999年1月1日">
<!ENTITY 內容 "今天是新年的第一天 %時間;">
]>
<公告>
<時間>1999年1月1日</時間>
<內容>&內容;</內容>
</公告>
此外還有內部實體和外部實體之分
3 屬性表聲明
(1) 默認聲明
#REQUIRED 元素必須提供該屬性
#IMPLIED 可以包含該屬性 也可以不包含該屬性
#FIXED+默認值 這個值是不能被修改的 如果沒有寫 系統會給出默認的值
只有默認值 如果沒有寫就會給出默認值 如果寫了就是修改後的值
屬性類型含有以下值:
Value 值 |
Explanation 解釋 |
---|---|
CDATA |
The value is character data |
(en1|en2|..) |
The value must be one from an enumerated list |
ID |
The value is a unique id |
IDREF |
The value is the id of another element |
IDREFS |
The value is a list of other ids |
NMTOKEN |
The value is a valid XML name |
NMTOKENS |
The value is a list of valid XML names |
ENTITY |
The value is an entity |
ENTITIES |
The value is a list of entities |
NOTATION |
The value is a name of a notation |
xml: |
The value is a predefined xml value |
具體解釋一下
ID 必須以字母 下劃線 冒號中的一個開頭 可以包含字母 下劃線 數字等其他XML標準允許的字符 不能帶有空格 只能有一個 只能設置爲 #IMPLIED 或者#REQUIRED
IDREF 必須是已經有了的ID 就是XML中出現過了的
IDREFS 必須是已經存在的多個ID 以空格分隔
ENTITY 把外部的二進制數據連接到文檔
4 記號聲明 有些 聲音 圖像等 要用外部路徑或者程序時 用來指定一個外部程序
MIME類型
URI 路徑