一.什么是DTD
?????? 它是標準通用標記語言和[1]可擴展標記語言1.0版規(guī)格的一部分馅巷,文檔可根據(jù)某種DTD語法規(guī)則驗證格式是否符合此規(guī)則瘪贱。
二.DTD的分類
DTD分為內(nèi)部DTD和外部DTDA编饺,外部DTD又分為system和public。
三.DTD的引入
(1)引入外部DTD文件
<!DOCTYPE 根元素名稱 SYSTEM “dtd路徑”>
(2)引入內(nèi)部DTD文件
<!DOCTYPE 根元素名稱{
??????????? <!ELEMENT students(student+)>
????????????<!ELEMENT student(name,age)>
??????????? <!ELEMENT?name(#PCDATA)>
??????????? <!ELEMENT age(#PCDATA)>
>
(3)引入外部DTD文件(網(wǎng)絡上的dtd文件)
<!DOCTYPE 根元素名稱 PUBLIC "DTD名稱" “DTD文檔的URL”>
四.使用DTD定義元素
??????????????? 簡單元素:沒有子元素的元素? ? 如:約束: (#PCDATA): 約束name是字符串類型
??????????????????????????????????????????????????????????????????????????? EMPTY : 元素為空(沒有內(nèi)容)
???????????????????????????????????????????????????????????????????????????? ANY:任意類型
???????????????? 復雜元素:有子元素的元素?? ?如:子元素后面的符號表示子元素出現(xiàn)的次數(shù)
???????????????????????????????????????????????????????????? + :表示一次或者多次
???????????????????????????????????????????????????????????????? ? :表示零次或者一次
???????????????????????????????????????????????????????????????? * :表示零次或者多次
?????????????????????????????????????????????????????????????? 無 :子元素只能出現(xiàn)一次
????? 子元素直接使用逗號進行隔開 ,表示元素出現(xiàn)的順序
????? 子元素直接使用|隔開萍程,表示元素只能出現(xiàn)其中的任意一個
五.使用DTD定義屬性
???? 語法:<!ATTLIST 元素名稱 屬性名稱 屬性類型 屬性的約束>
???? 屬性類型:CDATA: 字符串? ? ? ? ? 如:<!ATTLIST? birthday? ATT? CDATA? #REQUIRED>
???? 枚舉 : 表示只能在一定的范圍內(nèi)出現(xiàn)值,但是只能每次出現(xiàn)其中的一個 阀湿。如:<!ATTLIST? age? ATT2? (AA|BB|CC)? #REQUIRED>
???? ID: 值只能是字母或者下劃線開頭,如:<!ATTLIST name? ATT3? ID? ? #REQUIRED>
???? 屬性的約束: #REQUIRED:屬性必須存在
???? #IMPLIED:屬性可有可無
???? #FIXED: 表示一個固定值,如:<!ATTLIST? sex ATT4? CDATA? #FIXED? "ABC">
???? 直接值:不寫屬性瑰妄,使用直接值,寫了屬性陷嘴,使用設置那個值,如:<!ATTLIST school ATT5 CDATA "WWW">