(二)XML之DTD文檔

什麼是DTD、爲什麼要用DTD?

文檔類型定義——Document Type Definition,DTD用來描述XML文檔的結構,一個DTD文檔包含:
- 元素(ELEMENT)的定義規則
- 元素之間的關係規則
- 屬性(ATTLIST)的定義規則
- 可使用的實體(ENTITY)或符號(NOTATION)規則

1、DTD文檔與XML文檔實例的關係:相當於類與對象或者數據庫表結構與數據記錄的關係

    有了DTD,每個XML文件可以攜帶一個自身格式的描述。可以使用DTD校驗自己的XML數據

2、DTD文檔的聲明及引用:
- 內部DTD文檔:<!DOCTYPE 根元素 [定義內容]>
- 外部DTD文檔:<!DOCTYPE 根元素 SYSTEM "DTD文件路徑">
- 內外部DTD文檔結合:<!DOCTYPE 根元素 SYSTEM "DTD文件路徑" [ 定義內容]>

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8">  
  2. <!DOCTYPE poem [  
  3. <!ELEMENT poem (author,title,content)>  
  4. <!ELEMENT author (#PCDATA)>  
  5. <!ELEMENT title (#PCDATA)>  
  6. <!ELEMENT content (#PCDATA)>  
  7. ]>  
  8. <poem>  
  9.     <author>王維</author>  
  10.     <title>鹿柴</title>  
  11.     <content>空山不見人,但聞人語聲</content>  
  12. </poem>  

以上是內部DTD文檔的XML文件

poem(author,title,content)表示poem元素有三個子元素,並且必須按照指定的順序出現;#PCDATA(Parsed Character Data),可解析的字符數據

定義一個外部的DTD文檔:dtd_1.dtd

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8">  
  2. <!ELEMENT poem (author,title,content)>  
  3. <!ELEMENT author (#PCDATA)>  
  4. <!ELEMENT title (#PCDATA)>  
  5. <!ELEMENT content (#PCDATA)>  

xml文檔對DTD進行引用:

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8">  
  2. <!DOCTYPE poem SYSTEM "dtd_1.dtd">      
  3. <poem>  
  4.     <author>王維</author>  
  5.     <title>鹿柴</title>  
  6.     <content>空山不見人,但聞人語聲</content>  
  7. </poem>  

第二行是對外部dtd的引用。

3、元素的定義:

- 語法:<!ELEMENT NAME CONTENT>
!ELEMENT是關鍵字,NAME是元素的名稱,CONTENT是元素類型,元素類型有如下幾種:EMPTY——該元素不能包含子元素和文本,但可以有屬性(空元素);ANY——該元素可以包含任何在DTD中定義的元素內容;#PCDATA——可以包含任何字符數據,但不能在其中包含任何子元素;純元素類型——只能包含子元素,並且這些子元素外沒有文本;混合類型——包含子元素和文本數據的混合體。

DTD中的修飾符號:

舉例:<!ELEMENT poem (author+,title*,content?)>

4、屬性的定義

語法:<!ATTLIST 元素名稱 屬性名稱 類型 屬性特點>
類型有如下幾種:CDATA、ID、IDREF/IDREFS、NMTOKEN/NMTOKENS、Enumerated、ENTITY/ENTITIES、NOTATION、NOTATIONS
屬性特點主要有:#REQUIRED、#IMPLIED、#FIXED value、Default value

舉例:<!ATTLIST author name CDATA  #REQUIRED>

CDATA——屬性值可以是任何字符(包括數字和中文);NMTOKEN/NMTOKENS——是CDATA的一個子集,表示屬性值必須是英文字母、數字、句號、破折號、下劃線或冒號,屬性值不能含有空格,NMTOKENS與NMTOKEN類似,包含多個由空格分隔的字符;ID——表示該屬性的取值必須是唯一的;IDREF/IDREFS——IDREF屬性的值指向文檔中其他地方聲明的ID類型的值,IDREFS同IDREF,但是可以具有由空格分開的多個引用;Enumerated——事先定義好一些值,屬性的值必須在所列出的值的範圍內。如:<!ATTLIST person 性別 (男|女) #REQUIRED>;

屬性的特點:#REQUIRED——必須有的;#IMPLIED——可以忽略該屬性,可有可無;#FIXED value——該屬性的值必須爲指定的固定值;Default value——爲屬性提供一個默認值;

5、實體類型:普通實體、外部實體、參數實體、外部參數實體

關於普通實體與參數實體
1) 普通實體是在dtd中定義,xml中使用,使用的時候格式爲:&address;
2) 參數實體是在dtd中定義,dtd中使用,定義的時候使用%,使用的時候也需要使用%, %address;
3) 外部普通實體的定義方式是:<!ENTITY address SYSTEM “http://www.shengsiyuan.com/xml.xml”>
表示使用http://www.abc.com/xml.xml網址的內容來替換掉address,而不是使用http://www.abc.com/xml.xml字符串本身來替換掉address
4)外部參數實體:<!ENTITY % address SYSTEM “http://www.abc.com/xml.xml”>,使用的時候:%address;

6、命名空間(Namespace)

使用原因:XML的元素名是不固定的,當兩個不同的文檔使用同樣的名稱描述兩個不同類型的元素的時候,就會發生命名衝突,

使用前綴解決命名衝突問題:<h:table></h:table>與<f:table></f:table>類似與java的pakage

使用命名空間屬性:<h:table xmlns:h="http://www.abc.com/tr/html4/"></h:table>,使用全球唯一的url表示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章