DTD聲明元素屬性
使用DTD的ATTLIST關(guān)鍵字可以為XML聲明元素的屬性策彤。
<!ATTLIST price unit CDATA "RMB">
price
: 表示要聲明屬性所在的元素
unit
: 表示屬性名稱
CDATA
: 表示屬性的類型
RMB
: 表示屬性默認(rèn)值店诗,unit省略不寫時默認(rèn)為RMB庞瘸。
在DTD聲明列舉屬性值
如果希望屬性值是一系列固定值之一赠叼,可以使用列舉屬性值。
使用DTD的ATTLIST關(guān)鍵字聲明屬性時瞬场,“|” 可以為屬性列舉具體的屬性值涧郊,在XML中使用該屬性時,其值必須為列舉的值之一彤灶。
<!ATTLIST price unit (元|角|分) "元">
(元|角|分)
: 列舉price屬性值為元批旺,或角,或分苞轿。
"元"
: 表示未明確寫出該屬性時,其屬性值為元瑟俭。
內(nèi)部定義DTD
XML 的使用規(guī)則是由使用者自己來定義的,如果其他人想使用這個XML就要遵守其使用規(guī)則微饥,這個規(guī)則可以通過 DTD 來定義欠橘。
在定義 XML 文檔結(jié)構(gòu)時现恼,使用DOCTYPE可以聲明DTD。
如果DTD編寫錯誤始锚,使用瀏覽器打開XML文件瞧捌,也會報錯润文。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book (name, publisher, author, ISBN, price, url)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT publisher (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT ISBN (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT url (#PCDATA)>
]>
<book>
<name><<Java范例完全自學(xué)手冊>></name>
<publisher>人民郵電出版社</publisher>
<author>張三&李四</author>
<ISBN>987115201027</ISBN>
<price>59.80</price>
<url><![CDATA[http://www.baidu.com]]></url>
</book>
DOCTYPE
: 表示聲明 DTD 的關(guān)鍵字皮钠。
ELEMENT
: 用于聲明 XML 元素赠法。
使用外部 DTD
一般會把DTD單獨定義成一個DTD文檔砖织,XML通過引用的方式使用DTD的定義。
<!DOCTYPE book SYSTEM "simple_demo.dtd">
使用DOCTYPE表示DTD時新锈,SYSTEM表示引用一個外部DTD妹笆,在SYSTEM后面添寫DTD的URL地址。
book
: 表示是XML的根節(jié)點
simple_demo.dtd
: 表示DTD文件的名稱
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT book (name, publisher, author, ISBN, price, url)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT publisher (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT ISBN (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT url (#PCDATA)>
SYSTEM的位置既可以定義為SYSTEM墩新,又可以定義為PUBLIC海渊,當(dāng)定義為PUBLIC時,表示引用的DTD是由權(quán)威機構(gòu)定制的哲鸳,供特定行業(yè)或公眾使用。
使用DTD定義XML元素
XML的基本單位是元素讯沈,所以在DTD中聲明元素也是最基本的芙盘,ELEMENT用于DTD元素的聲明,在聲明的同時還可以定義元素的使用情況蝴乔。
使用DTD的ELEMENT關(guān)鍵字可以聲明XML元素。
<!ELEMENT name (#PCDATA)>
name
: 表示XML元素的名稱
根據(jù)上述定義薇正,book元素只能包含name元素片酝、publisher元素、author元素挖腰、ISBN元素雕沿、price元素、url元素猴仑。
在定義DTD時审轮,如果不想給某個元素的約束太強,讓它包含任意內(nèi)容辽俗,可以把元素定義成ANY疾渣。
<!ELEMENT book ANY>
如果希望元素內(nèi)容沒有任何內(nèi)容,則可以定義為EMPTY崖飘。
<!ELEMENT name EMPTY>
DTD聲明重復(fù)元素
定義DTD時榴捡,默認(rèn)子元素只能在父元素里出現(xiàn)一次。
如果希望父元素內(nèi)部能出現(xiàn)多個子元素朱浴,聲明時要在子元素的謀面添加“+”吊圾。
<!ELEMENT book (name, publisher, author+, ISBN, price, url)>
- 使用 “+” 表示XML子元素在其父元素里至少出現(xiàn)一次,也可以出現(xiàn)多次呈枉。
- 使用 “*” 表示XML子元素可以在其父元素中出現(xiàn)零次或多次。
- 使用 “?” 表示該元素只能出現(xiàn)零次或一次啃憎。
DTD聲明選擇性元素
使用 “|” 元素時,“|” 前后的兩個元素在父元素中有且只有一個出現(xiàn)。
<!ELEMENT book (name, publisher, author+, ISBN, price, (tel|phone))>
在DTD里把 “|” 和 “*” 混合在一起使用辉阶,可使定義的元素更靈活集绰。
<!ELEMENT book (name|publisher|author|ISBN|price|tel|phone)*>