1. 程式人生 > >XML學習之路(二)

XML學習之路(二)

req 方式 test 無符號 規範 內容 了解 實體 文本

DTD

一、什麽是DTD?

DTD即Document Type Definition,文檔類型定義。

我們知道,XML的標簽可以自定義,不受任何約束。但有時侯,為了符合邏輯和業務需要,我們需要對XML文檔加以約束。而DTD就是用來約束XML文檔的。使其在一定的規範下使用。除了DTD技術,Schema技術也用於約束XML文檔。

二、DTD文檔的聲明

外部文檔聲明
<!DOCTYPE 根元素 SYSTEM|PUBLIC "DTD文件路徑">

eg:
<!DOCTYPE webapp PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"
> 除了外部文檔聲明,還有內部文檔聲明,內外部文檔聲明。 內部文檔聲明:<!DOCTYPE 根元素 [定義內容]> 內外部文檔聲明:<!DOCTYPE 根元素 SYSTEM "DTD文件路徑"> 對於內部文檔聲明,內外部文檔聲明,我們簡單了解即可。主要還是采用外部文檔聲明的方式。

註意事項:
1.定義關鍵字一定要大寫,比如DOCTYPE ELEMENT ATTLIST,此外SYSTEM PUBLIC也應該大寫。
2.當引用的是本地的DTD文檔時,在聲明中使用SYSTEM關鍵字。  eg:<!DOCTYPE stu SYSTEM "test.dtd">
3.當引用的是網絡上公共的DTD文檔時,采用PUBLIC關鍵字。  eg:<!DOCTYPE webapp PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"

三、DTD元素

基本語法:<!ELEMENT NAME CONTENT>
解釋:ELEMENT 關鍵字   NAME 元素名稱  
CONTENT 元素類型,主要有以下幾種,都必須大寫:
1.EMPTY  ----該元素不能包含任何元素或文本,但可以有屬性
2.ANY---該元素可以包含在DTD中定義的元素內容。
3.#PCDATA ---該元素不包含其他元素,只有文本內容,也就是說鈣元素內部不能嵌套其他標簽。用關鍵字#PCDATA進行定義,它代表已經編譯過的字符數據。
4.子元素類型---該元素可以包含其他一系列子元素。子元素內容模型用來指定鈣元素可以包含哪些子元素。
eg:
<!ELEMENT stu(classID,name,age,addr)> 上面代碼表示:stu元素包含classID,name,age,addr四個子元素。 根據子元素之間的關系,子元素內容模型可能有以下兩種結構: 1.序列,所有子元素必須出現且只出現一次。註意事項:使用序列時,序列中不能出現#PCDATA。子元素中可以包含其他子元素。 2.選擇。 eg:<!ELEMENT stu(classID|name|age|addr)>。 上述代碼表示,stu的子元素只能是classID,name,age,addr中的一個,且只能有一個。 元素出現現次數指示符:
?    0次或一次
*    0次或者多次
+    至少出現一次
無符號  只能出現一次

四、XML屬性定義

基本語法:<!ATTLIST 標簽名 屬性名 屬性類型 屬性說明>
解釋:
屬性類型可以是以下幾種類型;
1.CDATA:最普通的字符串
2.枚舉 即(值1|值2|值三),需要括號
3.ID:表示該屬性值是唯一的。  屬性值需要以字母或者下劃線開頭。

屬性說明:
1、#REQUIRED:必須設置。
<!ATTLIST stu school (NCU|Pecking University|Wuhan University) #REQUIRED>
2.#IMPLIED:可選值,也就是說可以設置該屬性的值,也可以不設置
<!ATTLIST addr CDATA #IMPLIED>
3.#FIXED:固定值.也就是說給該屬性指定一個固定的值。語法格式為:#FIXED ”固定值"
<!ATTLIST stu class #FIXED "電子商務161">
4.默認值。
<!ATTLIST addr (北京|南昌|武漢) "南昌"

五、XML實體

實體:實體是用來定義普通文本快捷方式的變量。
實體分為:引用實體和參數實體
.
引用實體在XML中使用,格式為:&實體名
參數實體在DTD內部使用,格式為:%實體名


引用實體:定義格式:<!ENTITY 實體名 文本值>
eg:<!ENTITY copyright "Evil.company">

參數實體:定義格式:<!ENTITY %  實體名 文本值> 註意:定義時%與實體名之間存在空格,使用的時候不需要空格。
eg:<!ENTITY % name "HelloWorld">

XML學習之路(二)