文檔類型定義(DTD)可定義合法的XML文檔構建模塊。它使用一系列合法的元素來定義文檔的結構。
dtd的三種引入方式
(1)引入外部的dtd文件
<!DOCTYPE 根元素名稱 SYSTEM "dtd路徑">
(2)使用內部的dtd文件
<!DOCTYPE 根元素名稱 [ <!ELEMENT person (name,age)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> ]>
(3)使用外部的dtd文件(網絡上的dtd文件)
<!DOCTYPE 根元素 PUBLIC "DTD名稱" "DTD文檔的URL">
例如 struts2 框架配置文件 使用 外部的dtd文件
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
使用dtd定義元素
簡單元素:沒有子元素的元素 <!ELEMENT 元素名 約束> 如:<!ELEMENT name (#PCDATA)>
約束: (#PCDATA): 約束name是字符串類型
EMPTY : 元素為空(沒有內容)
ANY:任意類型
復雜元素:有子元素的元素 <!ELEMENT 元素名稱 (子元素)> 如:<!ELEMENT person (name+,age?,sex*,school)>
子元素后面的符號表示子元素出現的次數 + :表示一次或者多次
? :表示零次或者一次
* :表示零次或者多次
無 :子元素只能出現一次
子元素直接使用逗號進行隔開 ,表示元素出現的順序
子元素直接使用|隔開,表示元素只能出現其中的任意一個
使用dtd定義屬性
語法: <!ATTLIST 元素名稱 屬性名稱 屬性類型 屬性的約束>
屬性類型:CDATA: 字符串 如:<!ATTLIST birthday ATT CDATA #REQUIRED>
枚舉 : 表示只能在一定的范圍內出現值,但是只能每次出現其中的一個 。如<!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">
實體的定義
語法: <!ENTITY 實體名稱 "實體的值"> 如:<!ENTITY TEST "HAHAHEHE">
使用實體: &實體名稱; 比如 &TEST;(注:定義實體需要寫在內部dtd里面,如果寫在外部的dtd里面,有某些瀏覽器下,內容得不到)
實例:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE person [ <!ELEMENT person (name+,age?,sex*,school,birthday)> <!ELEMENT name (#PCDATA)> <!ATTLIST name ATT ID #REQUIRED > <!ELEMENT age (#PCDATA)> <!ATTLIST age ATT2 (AA|BB|CC) #REQUIRED > <!ELEMENT sex (#PCDATA)> <!ATTLIST sex ATT4 CDATA #FIXED "ABC" > <!ELEMENT school (#PCDATA)> <!ATTLIST school ATT5 CDATA "WWW"> <!ELEMENT birthday (#PCDATA)> <!ATTLIST birthday ATT1 CDATA #IMPLIED > <!ENTITY TEST "HAHAHEHE"> ]> <person> <name ATT="A1">&TEST;</name> <age ATT2="CC">20</age> <sex ATT4="ABC">111</sex> <school>1111</school> <birthday>2015</birthday> </person>
顯示結果:
