国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > XML > 正文

XML DTD詳解

2024-07-21 02:52:12
字體:
供稿:網(wǎng)友

前情提要與本文內(nèi)容介紹

  前面的兩篇xml相關(guān)博文:

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

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

  一個有效的XML文檔必然是結(jié)構(gòu)正規(guī)的,結(jié)構(gòu)正規(guī)的XML文檔不一定是有效的,即有效的是格式正規(guī)的一個子集。

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

 

元素的定義

 

DTD中的修飾符號:

   

  這部分符號可以聯(lián)系正則表達(dá)式的符號來記憶。

 

屬性的定義

    

 

屬性類型——CDATA

  比如:

<!ATTLIST title name CDATA #REQUIRED>

 

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

 

屬性類型——NMTOKEN/NMTOKENS

    

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

 

屬性類型——ID

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

 

 

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

 

屬性類型——IDREF/IDREFS

 

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

 

屬性類型——Enumerated

  實現(xiàn)定義好一些值,屬性的值必須在所列出的值的范圍內(nèi)。

    

 

屬性的特點

#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

  為屬性提供一個默認(rèn)的值。

  語法:

<!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>

 

  與上面的區(qū)別就是加上了SYSTEM關(guān)鍵字。

  這樣就不是使用網(wǎng)址的字符串來代替,而是用網(wǎng)址的文檔本身內(nèi)容。

 

實體類型

 

 

  前面所講的都是普通實體,分為內(nèi)部實體和外部實體。

 

  所謂參數(shù)實體,該實體實際上不是在具體實例化文檔中使用,而是在DTD文檔內(nèi)部被使用。

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

  如下:

<!ENTITY %地址 "街道,城市,郵編,國家"><!ELEMENT 聯(lián)系人 (人名,電話,%地址;)>

 

  

總結(jié)如下:

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

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

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

  如果不加SYSTEM關(guān)鍵字,則為內(nèi)部實體,表示實體指代內(nèi)容為字符串。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 田东县| 郯城县| 彩票| 桦甸市| 郓城县| 庄河市| 高碑店市| 彭泽县| 尼勒克县| 萝北县| 闽侯县| 胶州市| 潍坊市| 巨鹿县| 江城| 四川省| 康定县| 大关县| 深泽县| 措勤县| 广南县| 阿拉善右旗| 平凉市| 喜德县| 肇东市| 镇雄县| 杂多县| 河东区| 江城| 梓潼县| 资中县| 阳新县| 衡南县| 湛江市| 长沙县| 定西市| 禄丰县| 临泽县| 思南县| 金堂县| 通许县|