學(xué)習(xí)java&XML第二天熟悉一下DTD
DTD(Document Type Definition)文件類(lèi)型描述
第一點(diǎn)要注意的:DTD中的關(guān)鍵字必須全部大寫(xiě)!
一、DTD的位置
DTD可以放在xml文檔里面:
出自《XML入門(mén)》
<?xml version = "1.0" encoding="GB2312" standalone = "yes"?>
<!DOCTYPE 聯(lián)系人列表[
<!ELEMENT 聯(lián)系人列表 (聯(lián)系人)*>
<!ELEMENT 聯(lián)系人 (姓名,ID,公司,EMAIL,電話,地址)>
<!ELEMENT 地址 (街道,城市,省份)>
<!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT ID (#PCDATA)>
<!ELEMENT 公司 (#PCDATA)>
<!ELEMENT EMAIL (#PCDATA)>
<!ELEMENT 電話 (#PCDATA)>
<!ELEMENT 街道 (#PCDATA)>
<!ELEMENT 城市 (#PCDATA)>
<!ELEMENT 省份 (#PCDATA)>
]>
<聯(lián)系人列表>
...................................
放在里面的時(shí)候,應(yīng)該注意“standalone = "yes"”
也可以放在外面,放在外面有兩種形式,一種是引用本地文件,如:
<?xml version = "1.0" encoding="GB2312" standalone = "no"?>
<!DOCTYPE 聯(lián)系人列表 SYSTEM "fclml.dtd">
<聯(lián)系人列表>
..................
引用的格式是:<!DOCTYPE 根元素名 SYSTEM "外部DTD文件的URL">
另外一種是引用公共的文檔定義,如:
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">格式為:<!DOCTYPE 根元素 PUBLIC "DTD名稱(chēng)" "外部DTD的URL">
其中DTD名稱(chēng)解釋為:
這個(gè)DTD標(biāo)識(shí)的命名規(guī)則和XML文件的命名規(guī)則稍有不同。具體地說(shuō),DTD名稱(chēng)只能包含字母、數(shù)字、空格和下面的符號(hào):_%$#@()+:=/!*;?。同時(shí),DTD名稱(chēng)還必須符合一些標(biāo)準(zhǔn)的規(guī)定。例如,ISO標(biāo)準(zhǔn)的DTD以“ISO”三個(gè)字母開(kāi)頭;被改進(jìn)的非ISO標(biāo)準(zhǔn)的DTD以加號(hào)“+”開(kāi)頭;未被改進(jìn)的非ISO標(biāo)準(zhǔn)的DTD以減號(hào)“-”開(kāi)頭。
所以說(shuō)struts的配置文件就是“未被改進(jìn)的非ISO標(biāo)準(zhǔn)的DTD文檔”
二、DTD的內(nèi)容
DTD文檔的內(nèi)容總結(jié)下來(lái)有幾個(gè)比較重要也比較常用的:參數(shù)實(shí)體定義、元素定義和屬性定義
1、參數(shù)實(shí)體定義
實(shí)體實(shí)際上在XML當(dāng)中充當(dāng)宏定義或者別名之類(lèi)的意思,也可以理解成public static String......
參數(shù)實(shí)體是專(zhuān)門(mén)用在DTD當(dāng)中的,你可以在下面兩項(xiàng)元素定義和屬性定義中引用參數(shù)實(shí)體。
其定義方式如下:
<!ENTITY % 實(shí)體名 "實(shí)體內(nèi)容"> 注意,在XML中的實(shí)體定義是沒(méi)有%的
或者是:
<!ENTITY % 實(shí)體名 SYSTEM "外部文件名">
引用方式:
%實(shí)體名
例子:
<!ENTITY % Boolean "(true|false|yes|no)">表示定義了一個(gè)Boolean 的參數(shù)實(shí)體,值是"(true|false|yes|no)"
在struts的配置文件的DTD中有如下描述:
<!ATTLIST form-bean dynamic %Boolean; #IMPLIED>
也就定義了form-bean這個(gè)元素的dynamic屬性可以取得值是true、false、yes、no其中之一。
2、元素定義
用來(lái)定義元素的格式以及元素的子孫等。
定義形式:
<!ELEMENT 元素名 元素內(nèi)容描述>
元素定義這里由于篇幅有限,僅列幾個(gè)例子
1、<!ELEMENT 聯(lián)系人列表 ANY>表示聯(lián)系人列表這個(gè)元素的格式及其子孫都不受限制。
2、<!ELEMENT 姓名(#PCDATA)>表示姓名這個(gè)元素只能包含文本數(shù)據(jù)
3、<!ELEMENT 聯(lián)系人(姓名 EMAIL)>表示聯(lián)系人這個(gè)元素只能包含姓名和EMAIL兩種子孫,順序不限,并且姓名只能由一個(gè),EMAIL也只能由一個(gè)。
4、<!ELEMENT 聯(lián)系人(姓名,EMAIL)>表示聯(lián)系人這個(gè)元素只能包含姓名和EMAIL兩種子孫,有順序的限制,并且姓名只能由一個(gè),EMAIL也只能由一個(gè)。
5、<!ELEMENT 聯(lián)系人(姓名,EMAIL+)>表示聯(lián)系人必須有且僅有一個(gè)姓名子孫,有一個(gè)到多個(gè)EMAIL子孫,其中,如果+換作*,則表示零個(gè)或者多個(gè)。
6、<!ELEMENT 聯(lián)系人(姓名,EMAIL)+>表示聯(lián)系人有一組到多組子孫,每組中有且僅有一對(duì)姓名和EMAIL
7、<!ELEMENT 聯(lián)系人(姓名,(電話|EMAIL))>表示聯(lián)系人有一組到多組子孫,每組中第一個(gè)元素一定是姓名,第二個(gè)元素要么是電話,要么是EMAIL,兩者選一個(gè)。
8、<!ELEMENT 聯(lián)系人 EMPTY>聯(lián)系人這個(gè)元素不包含任何子孫,也不包含文本。
3、屬性定義
格式:<!ATTLIST 元素名 (屬性名 屬性類(lèi)型 缺省值)*>
例子:
1、<!ATTLIST 頁(yè)面作者
姓名 #CDATA #IMPLIED
年齡 #CDATA #IMPLIED
聯(lián)系信息 #CDATA #REQUIRED
網(wǎng)站職務(wù) #CDATA #FIXED "頁(yè)面作者"
個(gè)人愛(ài)好 #CDATA "上網(wǎng)">
其中,定義了頁(yè)面作者這個(gè)元素的屬性可以有“姓名”,“年齡”,“聯(lián)系信息”,“網(wǎng)站職務(wù)”和“個(gè)人愛(ài)好”
并且,姓名和年齡是純文本,可以沒(méi)有,聯(lián)系信息必須有,網(wǎng)站職務(wù)一定是“頁(yè)面作者”,個(gè)人愛(ài)好如果不填,則默認(rèn)是上網(wǎng)。
2、<!ATTLIST 肉 類(lèi)型( 雞肉 | 牛肉 | 豬肉 | 魚(yú)肉 ) "雞肉">元素肉可以有“類(lèi)型”屬性,類(lèi)型屬性可以選擇 雞肉 | 牛肉 | 豬肉 | 魚(yú)肉其中一個(gè),默認(rèn)是“雞肉”
3、<!ATTLIST 聯(lián)系人 編號(hào) ID #REQUIRED>聯(lián)系人元素有且必須有編號(hào)屬性,其類(lèi)型是ID型的,ID型或者是IDREF型的屬性值必須是一個(gè)有效的XML名稱(chēng),它由字母、數(shù)字或下劃線開(kāi)始,名字中不能出現(xiàn)空白符。類(lèi)似Html中的ID。
4、另外類(lèi)型NMTOKEN和NMTOKENS還有NOTATION類(lèi)型我還不是太明白,那位明白的不妨給出^_^。
第一點(diǎn)要注意的:DTD中的關(guān)鍵字必須全部大寫(xiě)!
一、DTD的位置
DTD可以放在xml文檔里面:
















...................................
放在里面的時(shí)候,應(yīng)該注意“standalone = "yes"”
也可以放在外面,放在外面有兩種形式,一種是引用本地文件,如:




引用的格式是:<!DOCTYPE 根元素名 SYSTEM "外部DTD文件的URL">
另外一種是引用公共的文檔定義,如:

其中DTD名稱(chēng)解釋為:
這個(gè)DTD標(biāo)識(shí)的命名規(guī)則和XML文件的命名規(guī)則稍有不同。具體地說(shuō),DTD名稱(chēng)只能包含字母、數(shù)字、空格和下面的符號(hào):_%$#@()+:=/!*;?。同時(shí),DTD名稱(chēng)還必須符合一些標(biāo)準(zhǔn)的規(guī)定。例如,ISO標(biāo)準(zhǔn)的DTD以“ISO”三個(gè)字母開(kāi)頭;被改進(jìn)的非ISO標(biāo)準(zhǔn)的DTD以加號(hào)“+”開(kāi)頭;未被改進(jìn)的非ISO標(biāo)準(zhǔn)的DTD以減號(hào)“-”開(kāi)頭。
所以說(shuō)struts的配置文件就是“未被改進(jìn)的非ISO標(biāo)準(zhǔn)的DTD文檔”
二、DTD的內(nèi)容
DTD文檔的內(nèi)容總結(jié)下來(lái)有幾個(gè)比較重要也比較常用的:參數(shù)實(shí)體定義、元素定義和屬性定義
1、參數(shù)實(shí)體定義
實(shí)體實(shí)際上在XML當(dāng)中充當(dāng)宏定義或者別名之類(lèi)的意思,也可以理解成public static String......
參數(shù)實(shí)體是專(zhuān)門(mén)用在DTD當(dāng)中的,你可以在下面兩項(xiàng)元素定義和屬性定義中引用參數(shù)實(shí)體。
其定義方式如下:
<!ENTITY % 實(shí)體名 "實(shí)體內(nèi)容"> 注意,在XML中的實(shí)體定義是沒(méi)有%的
或者是:
<!ENTITY % 實(shí)體名 SYSTEM "外部文件名">
引用方式:
%實(shí)體名
例子:
<!ENTITY % Boolean "(true|false|yes|no)">表示定義了一個(gè)Boolean 的參數(shù)實(shí)體,值是"(true|false|yes|no)"
在struts的配置文件的DTD中有如下描述:
<!ATTLIST form-bean dynamic %Boolean; #IMPLIED>
也就定義了form-bean這個(gè)元素的dynamic屬性可以取得值是true、false、yes、no其中之一。
2、元素定義
用來(lái)定義元素的格式以及元素的子孫等。
定義形式:
<!ELEMENT 元素名 元素內(nèi)容描述>
元素定義這里由于篇幅有限,僅列幾個(gè)例子
1、<!ELEMENT 聯(lián)系人列表 ANY>表示聯(lián)系人列表這個(gè)元素的格式及其子孫都不受限制。
2、<!ELEMENT 姓名(#PCDATA)>表示姓名這個(gè)元素只能包含文本數(shù)據(jù)
3、<!ELEMENT 聯(lián)系人(姓名 EMAIL)>表示聯(lián)系人這個(gè)元素只能包含姓名和EMAIL兩種子孫,順序不限,并且姓名只能由一個(gè),EMAIL也只能由一個(gè)。
4、<!ELEMENT 聯(lián)系人(姓名,EMAIL)>表示聯(lián)系人這個(gè)元素只能包含姓名和EMAIL兩種子孫,有順序的限制,并且姓名只能由一個(gè),EMAIL也只能由一個(gè)。
5、<!ELEMENT 聯(lián)系人(姓名,EMAIL+)>表示聯(lián)系人必須有且僅有一個(gè)姓名子孫,有一個(gè)到多個(gè)EMAIL子孫,其中,如果+換作*,則表示零個(gè)或者多個(gè)。
6、<!ELEMENT 聯(lián)系人(姓名,EMAIL)+>表示聯(lián)系人有一組到多組子孫,每組中有且僅有一對(duì)姓名和EMAIL
7、<!ELEMENT 聯(lián)系人(姓名,(電話|EMAIL))>表示聯(lián)系人有一組到多組子孫,每組中第一個(gè)元素一定是姓名,第二個(gè)元素要么是電話,要么是EMAIL,兩者選一個(gè)。
8、<!ELEMENT 聯(lián)系人 EMPTY>聯(lián)系人這個(gè)元素不包含任何子孫,也不包含文本。
3、屬性定義
格式:<!ATTLIST 元素名 (屬性名 屬性類(lèi)型 缺省值)*>
例子:
1、<!ATTLIST 頁(yè)面作者
姓名 #CDATA #IMPLIED
年齡 #CDATA #IMPLIED
聯(lián)系信息 #CDATA #REQUIRED
網(wǎng)站職務(wù) #CDATA #FIXED "頁(yè)面作者"
個(gè)人愛(ài)好 #CDATA "上網(wǎng)">
其中,定義了頁(yè)面作者這個(gè)元素的屬性可以有“姓名”,“年齡”,“聯(lián)系信息”,“網(wǎng)站職務(wù)”和“個(gè)人愛(ài)好”
并且,姓名和年齡是純文本,可以沒(méi)有,聯(lián)系信息必須有,網(wǎng)站職務(wù)一定是“頁(yè)面作者”,個(gè)人愛(ài)好如果不填,則默認(rèn)是上網(wǎng)。
2、<!ATTLIST 肉 類(lèi)型( 雞肉 | 牛肉 | 豬肉 | 魚(yú)肉 ) "雞肉">元素肉可以有“類(lèi)型”屬性,類(lèi)型屬性可以選擇 雞肉 | 牛肉 | 豬肉 | 魚(yú)肉其中一個(gè),默認(rèn)是“雞肉”
3、<!ATTLIST 聯(lián)系人 編號(hào) ID #REQUIRED>聯(lián)系人元素有且必須有編號(hào)屬性,其類(lèi)型是ID型的,ID型或者是IDREF型的屬性值必須是一個(gè)有效的XML名稱(chēng),它由字母、數(shù)字或下劃線開(kāi)始,名字中不能出現(xiàn)空白符。類(lèi)似Html中的ID。
4、另外類(lèi)型NMTOKEN和NMTOKENS還有NOTATION類(lèi)型我還不是太明白,那位明白的不妨給出^_^。
posted on 2005-03-08 14:23 Boris-Java 閱讀(685) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): java&xml