XML DTD詳解


 

XML DTD詳解

 

前情提要與本文內容介紹

  前面的兩篇XML相關博文:

  第一篇是介紹格式正規的XML: 格式正規的XML:語法 屬性 實體 處理指令 樣式單 CDATA節

  第二篇介紹DTD,引入有效的XML的概念(符合語法規范並符合DTD要求),並介紹DTD的三種使用方法:有效的XML: DTD(文檔類型定義)介紹與三種使用方式

  一個有效的XML文檔必然是結構正規的,結構正規的XML文檔不一定是有效的,即有效的是格式正規的一個子集。

  本文詳細介紹DTD,包括其對元素的定義,屬性的定義,以及實體的定義。

 

元素的定義

 

DTD中的修飾符號:

   

  這部分符號可以聯系正則表達式的符號來記憶。

 

屬性的定義

    

 

屬性類型——CDATA

  比如:

<!ATTLIST title name CDATA #REQUIRED>

 

  定義了一個屬性,是屬於title元素的,屬性名叫name,類型是字符串(包括數字和中文),並且是一個必須要有的屬性。

 

屬性類型——NMTOKEN/NMTOKENS

    

  左邊圖中因為加了空格而出錯。

 

屬性類型——ID

  類型為ID的屬性取值必須是唯一的。

 

 

  從這個例子還可以看到同一個元素可以一次定義多個屬性,多個屬性之間用空格分隔即可。

 

屬性類型——IDREF/IDREFS

 

                                        (“兒子”后面漏掉了一個斜線)

 

屬性類型——Enumerated

  實現定義好一些值,屬性的值必須在所列出的值的范圍內。

    

 

屬性的特點

#REQUIRED

  元素的所有實例都必須有該屬性的值(NOT NULL)。

  語法:

<!ATTLIST 元素名 屬性名 屬性類型 #REQUIRED>

 

  DTD示例:

<!ATTLIST person number CDATA #REQUIRED>

 

  XML示例:

<person number="6788"/>

 

 

#IMPLIED

  元素的實例中可以忽略該屬性(NULL)。

  語法:

<!ATTLIST 元素名 屬性名 屬性類型 #IMPLIED>

 

  DTD示例:

<!ATTLIST contact fax CDATA #IMPLIED>

 

  XML示例:

<contact fax="888-228833"/>

 

  沒有這個屬性也是對的。

 

#FIXED value

  元素實例中該屬性的值必須為指定的固定值。

  語法:

<!ATTLIST 元素名 屬性名 屬性類型 #FIXED "value">

 

  DTD示例:

<!ATTLIST sender company CDATA #FIXED "Microsoft">

 

  XML示例:

<sender company="Microsoft"/>

 

 

Default value

  為屬性提供一個默認的值。

  語法:

<!ATTLIST 元素名 屬性名 屬性類型 "value">

 

  DTD示例:

<!ATTLIST hello paymenttype CDATA "check">

 

  XML示例:

<hello paymenttype="check"/>

 

 

定義實體

一般

  語法:

<!ENTITY 實體名 "實體值">

 

  DTD示例:

<!ENTITY writer "Donald Duck">

<!ENTITY copyright "Copyright W3Schools">

 

  XML示例:

<author>&writer;&copyright;</author>

 

 

外部實體:

  語法:

<!ENTITY 實體名 SYSTEM "URI/URL">

 

  DTD示例:

<!ENTITY writer SYSTEM "http://www.baidu.com/index.php?tn=coralqq">

<!ENTITY copyright SYSTEM "http://www.baidu.com/index.php?tn=coralqq">

 

  XML示例:

<author>&writer;&copyright;</author>

 

  與上面的區別就是加上了SYSTEM關鍵字。

  這樣就不是使用網址的字符串來代替,而是用網址的文檔本身內容。

 

實體類型

 

 

  前面所講的都是普通實體,分為內部實體和外部實體。

 

  所謂參數實體,該實體實際上不是在具體實例化文檔中使用,而是在DTD文檔內部被使用。

  我們可以定義一個實體,然后在DTD內部來引用它。

  如下:

<!ENTITY %地址 "街道,城市,郵編,國家">

<!ELEMENT 聯系人 (人名,電話,%地址;)>

 

  

總結如下:

  普通實體:DTD中定義,XML中使用,使用格式: &名;

  參數實體:DTD中定義,定義的時候要用%,DTD中使用,使用格式: %名;

  普通實體和參數實體都分為內部實體外部實體兩種,外部實體定義需要加上SYSTEM關鍵字,其內容是URL所指向的外部文件實際的內容。

  如果不加SYSTEM關鍵字,則為內部實體,表示實體指代內容為字符串。

 

 

參考資料

  聖思園張龍老師視頻教程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM