DTD規範XLM文檔筆記
1、使用DTD的好處
v 用DTD提供統一格式。例如,用DTD規定個人簡歷文檔的邏輯結構,包括所需填寫內容和內容排列方式,所有按照這個DTD編寫的個人簡歷都將具有統一格式。
v 用DTD驗證數據有效性。DTD約束文檔邏輯結構,可以根據DTD檢查數據,驗證其是否符合規定要求,確保數據正確和有效。
v 根據DTD編寫文檔樣式單。DTD能在不提供原始資料的情況下,表示出一個網頁或文檔的架構元素,這意味着用戶能先根據DTD爲未來的文檔編寫樣式單,然後再安全且不破壞結構的把用戶的資料放上去,提高工作效率。
2、Dtd文檔的基本格式
內連接格式:
<?xml version=”1.0 encoding=”utf_8” standalone=”true”?>
<!DOCTYPE 根標記的名稱[約束]> 內部DTD
外連接格式:
<!DOCTYPE 根標記的名稱 SYSTEM “dtd1.dtd”> dtd的引入
格式:<根標記>
<字標記>
</字標記>
………..
</根標記>
3.DTD對元素聲明及應用:
. Dtd1.dtd的定義能在xml文檔出現的元素、屬性、xml文檔的結構
Dtd的格式:
<?xml version=”1.0” encoding=”utf_8”?>
<!ELEMENT 元素的名稱 元素的內容>
<!ATTLIST 元素名 屬性名 類型keyword “默認值”> 對屬性的設置
· (1)空元素即爲單標記 <br/> 或者 <br></br> 兩者形式一樣,但不能加空格 用EMPTY修飾
(2)ANY型的,因爲約束是對文件進行規範的,所以any相對來說沒有任何意義。可以成爲無效的文件
有效的XML文檔的所以屬性都必須在約束中聲明才爲有效的文檔
(3)定義字符串內容的元素
<!ELEMENT 元素名 #PCDATA>
<!ELEMENT 書籍列表 (#PCDATA)>
(4)混合類型內容的元素-1------既有字符串內容,又有子元素的
但一般並不推薦使用這個元素
<!ELEMENT 學生 (#PCDATA|學號|姓名)*>
注: | 和* 一起表示出現多次,而且是無序的,可以出現多次,而且文本出現的順序是任意的
例子:
<?xml version=”1.0” encoding=”utf_8”?>
<喜歡的遊戲>
這是我喜歡的遊戲
<遊戲>
CF遊戲好玩
<遊戲類型>463</遊戲類型>
<遊戲名稱>4trt</遊戲名稱>
CF遊戲好玩
<遊戲類型>rewtre</遊戲類型>
<遊戲名稱>l;lkjhgfds</遊戲名稱>
</遊戲>
</喜歡的遊戲>
混合類型內容的元素2-------包含的不是文本,也是子元素
<!ELEMENT 學生 (學號,姓名)*> * 代表0次或多次
(5)定義子元素
有序的子元素
互斥的子元素
根據出現的頻率來定:
有序的子元素的例子:
<書籍列表>
<計算機書籍>
<書名>順利度過</書名>
</計算機書籍>
<計算機書籍>
<價格>順利度過</價格>
</計算機書籍>
</書籍類表>
4、DTD對屬性聲明
屬性是描述元素的額外信息的,是對元素的修飾與補充。一般來說,信息詳實的XML文檔都是一個特點,即元素通過屬性來描述邊緣信息。
在 DTD 中,屬性通過 ATTLIST 聲明來進行聲明。一個屬性聲明可以聲明一個元素的多個屬性。
(1)對屬性聲明的格式:<!ATTLIST 元素名 屬性名 屬性類型 keyword “默認值”>
<!ELEMENT作者 地址 CDATA #FIXED “保定市”>
注: #FIXED “保定市 可設,可不設,系統默認
(2) 對屬性的限制條件:
# CDATA 純文本的的類型
# IMPLIED 可選的
# FIXED “保定市” 指定固定值
# PEQUIRED 必須爲該屬性指定默認值
# LMMPLIED 不指定默認值
#PCDATA
(3)屬性的類型:
1、CDATA 字符串數據
2、(en1|en2…..) 枚舉類型
例子:<!ATTLIST 作者 性別(男|女) “男”> 默認值
3、ID 標識符必須是唯一的
例子:<!ATTLIST 計算機書籍 ID # REQUIRED>
4、IDREF 該值必須爲另外一個的屬性值
例子:<!ELEMNT 書籍列表 (計算機書籍 | 讀者)>
<!ELEMENT 讀者 EMPTY>
<!ATTLIST 讀者 書號 IDREF # IMPLIED > # IMPLIED表示可選的
5、IDREFS 表示可引用多個id值
<!ATTLIST 讀者 書號 IDREFS # IMPLIED >
<讀者 書號=“0001_0002”>
6、NMTOKEN 和 NMTOKENS類
NMTOKEN 和CDATA類型相比, NMTOKEN要求嚴格
例子:
<!ATTLIST 地址 NMTOKEN # PEQUIRED>
NMTOKENS可以取多個合法的元素
5、實體的定義-------ENTITY ENTITIES 類型的
(1)實體的概念:實體是包含了文檔片段的虛擬存儲單元,可用來存儲XML聲明、DTD其他形式的文本及二進制數據等。簡單來講就是一段代碼或數據的代稱,這個代稱即爲實體
的名字。
(2)實體引用:是用一個字符串代替另一個字符串。
(3)實體的引用例子: conent “java書籍的詳細內容的介紹”
<書名>conten</書名> 用content來代替字符串的內容,減少麻煩
(4)實體引用的作用:
Ø 實體定義的作用:提高代碼的服用,方便修改,維護XML文檔
Ø 使用某些特殊的符號,這些特殊的符號可能會使XML解析器混淆
Ø 減少字符輸入量,如果某個字符串特別長,而且需要經常使用,則可以定義爲實體
(5)實體的分類:可解析的實體和不可解析的實體
1、按照實體的具體內容分類
可解析的實體:可解析實體的具體內容爲簡單的字符、數字、文本塊。
不可解析的實體:具體內容則爲圖片、聲音等二進制文件。
注:一般情況下都爲不可解析的實體
2、按照邏輯存儲分類:
內部實體和外部實體
以下都是內部實體
3、按使用範圍分:
一般實體和參數實體:
一般(普通)實體的定義的語法--------在xml文檔中使用:
<!ELNTITY 實體名 “實體值”>
使用實體時:&實體名;
注意:實體是在dtd中定義的
普通實體可以作爲屬性來表示
<!ATTLIST 簡要介紹 connect >
<簡要介紹 connect=”&title”> 引用實體當做屬性
可以是元素
<簡要介紹>&實體名</簡要介紹>
參數實體------在dtd文檔中使用,對dtd中的屬性設置:
語法:
<!ENTITY %實體名 “實體值“>
使用:&實體名
<!ENTITY % boolean “yes|no|true|false”>
<!ATTLIST 作者 性別 (%boolean;)>
兩者不同:
一般實體 用於xml文檔中 % 實體名 ““ % 實體名;
參數實體 用於dtd文檔中 實體名 ““ &實體名;
外部實體:
在dtd中定義
<!ELEMENT out SYSTEM “文檔名稱“>
<!ELEMENT out SYSTEM “extententity.txt“> out代替了文本中的內容
對外部實體的引用 : <簡要介紹>&outer;</簡要介紹>
注:元素的定義用ELEMENT
屬性的定義用ATTLIST