DTD定義:Document Type Definition,全稱爲文檔類型定義。
DTD的引用:XML文件使用 DOCTYPE 聲明語句來指明它所遵循的DTD文件,DOCTYPE聲明語句有兩種形式:
(1)外部引入
可以將dtd的約束內容寫在外置的dtd文件中,這個文件後綴必須爲.dtd而文件保存時必須用utf-8編碼保存,再在xml文件中使用
<!DOCTYPE 根元素名稱 SYSTEM 文件的位置>
如果寫的是SYSTEM表明當前引入的dtd在當前文件系統中,後面制定的文件位置是當前硬盤中的位置
<!DOCTYPE 文檔根結點 PUBLIC "DTD名稱" "DTD文件的URL">
如果寫的是PUBLIC表明當前引入的dtd在網絡公共位置中,後面要指明dtd的名字和dtd所在網絡位置URL地址
(2)內部引入
直接在xml中書寫dtd
<!DOCTYPE 根元素名稱[
dtd約束....
]>
DTD語法:
1.元素約束:
<!ELEMENT 元素名稱元素約束>
存放類型約束: ANY/EMPTY
元素內容約束:
子元素的列表,將可以包含的子元素用小括號括起來
如:<!ELEMENT 書架 (書名,作者,售價)>
子元素之間可以使用逗號進行分割,表明子元素必須按照順序出現
子元素之間可以使用豎線進行分割,表面子元素出現其中之一
#PCDATA 表明包含標籤體
如:<!ELEMENT 書名 (#PCDATA)>
+ 表示一次或多次
* 表示0次或多次
? 表示0次或一次
也可以使用小括號進行組的操作
2.屬性約束:
<!ATTLIST 元素名
屬性名 屬性類型 屬性約束
屬性名2 屬性類型 屬性約束
......
>
屬性約束:
#REQUIRED --- 表明當前屬性是一個必須存在的屬性,如果這樣的屬性不存在則在校驗時會報錯
#IMPLIED --- 表明當前屬性是一個可選的屬性,可以有也可以沒有
#FIXED('固定值')--- 表明當前屬性具有一個固定值,這樣的屬性不需要進行賦值,自動就會取這個固定值爲值.如果這樣的屬性指定了一個不是固定值的值則校 驗報錯
' 默認值' --- 表明當前屬性具有一個默認值,如果給了其他的值就用其他值,如果沒有給值則取這個默認值
屬性類型:
CDATA:表示屬性的值是一個普通字符串
ENUMERATED : 屬性的值是一個枚舉列表中的值
ID: 表明屬性的值必須在整個文檔中都是唯一的,如果有重複的id則校驗不通過,ID 屬性的值只能由字母,下劃線開始,不能使用數字,不能出現空白字符
3.ENTITY(實體)
<!ENTITY >,就是對一大段內容的引用,可以簡化代碼的複用
引用實體:在xml中引用的實體叫做引用實體
<!ENTITY 實體名稱 “實體內容” >
使用方式:&實體名稱;
參數實體:在dtd中引用的實體叫做參數實體
<!ENTITY % 實體名稱 "實體內容">
使用方式:%實體名稱;
例:<!ENTITY % TAG_NAMES "姓名 | EMAIL | 電話 | 地址">
<!ELEMENT 個人信息 (%TAG_NAMES; | 生日)>
<!ELEMENT 客戶信息 (%TAG_NAMES; | 公司名)>