<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • XML認(rèn)證教程:Dtd

    時(shí)間:2024-08-15 09:07:28 IBM認(rèn)證 我要投稿
    • 相關(guān)推薦

    XML認(rèn)證教程:Dtd

      一個(gè)“有效的”文件首先應(yīng)該是“形式良好”的。但這還遠(yuǎn)遠(yuǎn)不夠,它還要往前更進(jìn)一 步。一個(gè)XML文件必須遵守文件類型描述Dtd(Document Type Definition)中 定義的種種規(guī)定。所有的文件都是由序言和文件體構(gòu)成的。序言中包含了XML聲明, 在序言中還可以包含Dtd定義。

      最簡(jiǎn)單的使用Dtd的方法是在XML文件的序言部分加入一個(gè)Dtd描述,加入的位置是 緊接在XML處理指示之后。一個(gè)包含Dtd的XML文件的結(jié)構(gòu)為:

      元素描述

      ]>

      文件體.......

      這樣,我們就定義了一個(gè)文件,它以DOCTYPE中規(guī)定的根元素名作為其根元素的名字。

      如果為每一個(gè)XML文件加入一段Dtd定義,是相當(dāng)繁瑣的。而且,更多的情況下,我們 會(huì)為一批XML文件定義一個(gè)相同的Dtd。例如,對(duì)于報(bào)社中的每篇稿件,它們都有相同 的格式,可以采用一個(gè)統(tǒng)一的Dtd,為每一篇單獨(dú)定義既麻煩,又不利于統(tǒng)一格式。 好在XML規(guī)范為我們提供了解決這個(gè)問(wèn)題的方法,它就是外部Dtd。

      v

      外部Dtd的好處是:它可以方便高效地被多個(gè)XML文件所共享。你只要寫(xiě)一個(gè)Dtd 文件,就可以被多個(gè)XML文件所引用。事實(shí)上,當(dāng)許多組織需要統(tǒng)一它們的數(shù)據(jù)交 換格式時(shí),它們就是通過(guò)外部Dtd來(lái)完成的。這樣做不僅簡(jiǎn)化了輸入工作,還保證 當(dāng)你需要對(duì)Dtd做出改動(dòng)時(shí),不用一一去改每個(gè)引用了它的XML文件,只要改一個(gè) 公用的Dtd文件就足夠了。

      為了引用一個(gè)外部Dtd,必須修改XML聲明和DOCTYPE聲明。

      XML聲明中必須說(shuō)明這個(gè)文件不是自成一體的,即standalone屬性的屬性值不再是yes了:

      在DOCTYPE聲明中,應(yīng)該加入SYSTEM屬性:

      例如:

      上面的URL是一個(gè)絕對(duì)路徑,除此以外,它還可以是一個(gè)相對(duì)路徑,如: 它說(shuō)明這個(gè)Dtd文件和引用它的XML文件在同一個(gè)目錄下。

      使用這種方法,你可以方便地把Dtd文件從你的XML文件中分離出來(lái),粘貼到另一 個(gè)文件fclml.dtd中。這樣,你就得到一個(gè)Dtd文件和一個(gè)有效的XML文件。

      公用Dtd

      使用外部Dtd時(shí),要在DOCTYPE中使用關(guān)鍵字SYSTEM。實(shí)際上,SYSTEM不是引 用外部Dtd的唯一方法,這個(gè)關(guān)鍵字主要用于引用一個(gè)作者或組織所編寫(xiě)的眾多 XML文件中通用的Dtd。還存在一種外部Dtd,它是一個(gè)由權(quán)威機(jī)構(gòu)制訂的,提供 給特定行業(yè)或公眾使用的Dtd。因此,另一個(gè)引用外部Dtd的辦法是使用關(guān)鍵字 PUbLIC,引用這一類公開(kāi)給公眾使用的Dtd。

      當(dāng)使用關(guān)鍵字PUbLIC進(jìn)行引用時(shí),這個(gè)外部Dtd還需要得到一個(gè)標(biāo)識(shí)名。引用公 共Dtd的形式為:

      請(qǐng)見(jiàn)下面例子:

      這個(gè)Dtd標(biāo)識(shí)的命名規(guī)則和XML文件的命名規(guī)則稍有不同。具體地說(shuō),Dtd名稱只能 包含字母、數(shù)字、空格和下面的符號(hào):_%$#@()+:=/!*;?。同時(shí),Dtd名稱還必須 符合一些標(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)頭。

      無(wú)論是哪一種情況,開(kāi)始部分后面都跟著兩個(gè)斜杠“//”及Dtd所有者的名稱。在這個(gè) 名稱之后又是兩個(gè)斜杠“//”,再然后是Dtd所描述的文件的類型。最后,在又一對(duì)斜 杠之后是語(yǔ)言的種類(參見(jiàn)ISO 639)。例如下面這個(gè)公用Dtd的引用:

      "http://www.mydomain.com/dtds/fclml.dtd">

      看上去的確比較復(fù)雜,不過(guò)沒(méi)關(guān)系,對(duì)于Dtd的命名通常不是它的引用者的任務(wù),XML 文件的編寫(xiě)者只要在自己的文件中把事先定義好的Dtd名稱放在相應(yīng)的位置中就可以了。

      元素類型聲明1

      一個(gè)Dtd不僅要告訴語(yǔ)法分析器它所關(guān)聯(lián)的XML文件的根元素是什么,而且還要告 訴語(yǔ)法分析器文件的內(nèi)容和結(jié)構(gòu),說(shuō)清文件結(jié)構(gòu)中的每一個(gè)細(xì)節(jié)。為了定義這些細(xì) 節(jié),我們必須展開(kāi)Dtd中元素說(shuō)明部分,使用元素類型聲明(Etd)來(lái)聲明所有有 效的文件元素。

      Etd不但說(shuō)明了每個(gè)文件中可能存在的元素,給出了元素的名字,而且給出了元素的 具體類型。一個(gè)XML元素可以為空,也可以是一段純文本,還可以有若干個(gè)子元素, 而這些子元素同時(shí)又可以有它們的子元素。Dtd正是通過(guò)元素之間的父子關(guān)系,描述 了整個(gè)文件的結(jié)構(gòu)關(guān)系。

      Etd應(yīng)該采用如下的結(jié)構(gòu):

      因此,在前面的例子里,可以在文件序言中通過(guò)如下方式定義“聯(lián)系人列表”這個(gè)元素:

      ]>

      <聯(lián)系人列表>

      ...

      這個(gè)Dtd定義了一個(gè)XML文件,它只有一個(gè)根元素,名為“聯(lián)系人列表”,這個(gè)元素可以 有任何類型的子元素,也可以是純文本,還可以為空。

      但是需要注意,盡管元素“聯(lián)系人列表”被定義為“可以”包含其它元素,但實(shí)際上這個(gè) Dtd除了“聯(lián)系人列表”元素本身外沒(méi)有定義任何其它元素,所以也就沒(méi)有其它元素可 以用作“聯(lián)系人列表”的子元素。“有效的”XML文件規(guī)定文件中所使用的任何元素都必 須在Dtd中給出定義。

      在“ANY”定義下使用任何純文本都是無(wú)須另加說(shuō)明的,這一點(diǎn)與元素不同。故而,在 相同的Dtd定義下,下面一段XML文件則是合法的:

      ]>

      <聯(lián)系人列表>

      純文本信息說(shuō)明聯(lián)系人信息

      元素類型聲明2

      為了使元素“聯(lián)系人列表”中還可以包含其它元素,從而使前面的那個(gè)文件是“有效 的”,我們還需要定義元素“聯(lián)系人”和“姓名”。

      ]>

      <聯(lián)系人列表>

      <聯(lián)系人>

      <姓名>張三

      現(xiàn)在我們已經(jīng)定義了一個(gè)XML文件,它的根元素名為“聯(lián)系人列表”。“聯(lián)系人列表” 中可以包含任何純文本數(shù)據(jù),也可以含有子元素(這即是ANY的含義)。根據(jù)后面的 定義,我們知道,“聯(lián)系人列表”中可以包含子元素“聯(lián)系人”,也可以直接包含子元 素“姓名”;“聯(lián)系人”元素又可以包含自己的子元素,名為“姓名”;而“姓名”則只能 包含純文本數(shù)據(jù)(即(#PCDATA))。

      注意:

      除了根元素外,在定義其它元素時(shí)使用關(guān)鍵字ANY都是不好的習(xí)慣。

      在定義元素時(shí),Etd的順序是無(wú)關(guān)緊要的。

      還有一點(diǎn)要注意,不能對(duì)不同的元素使用相同的元素名,即便這些元素的內(nèi)容、包 含的子元素不同也不行,因?yàn)樗粫?huì)引起文件各個(gè)元素的混淆,使文件的可讀性大打 折扣。

      元素名的第一個(gè)字母必須是字母、或下劃線(_)、或冒號(hào)(:),后跟字母、數(shù) 字、句號(hào)(.)、冒號(hào)、下劃線、連結(jié)號(hào)(-)的組合,并且不能包含空白符,不能以 “xml”開(kāi)頭。盡管XML1.0標(biāo)準(zhǔn)允許使用任何長(zhǎng)度的文件名,但是實(shí)際的XML處理器常 常會(huì)限制標(biāo)記名的長(zhǎng)度。

      定義元素及其子元素

      對(duì)于以下的例子:

      ]>

      <聯(lián)系人列表>

      <聯(lián)系人>

      <姓名>張三

      準(zhǔn)確的說(shuō)法是,元素“聯(lián)系人”必須包含一個(gè),且只能包含一個(gè)子元素“姓名”。可如 果子元素是“EMAIL地址”怎么辦?聯(lián)系人可能根本沒(méi)有自己的EMAIL郵箱,也可能 有好幾個(gè)EMAIL帳號(hào)。

      使用正則表達(dá)式,我們就可以解決上述問(wèn)題,描述父元素與子元素之間非常復(fù)雜的 關(guān)系。例如,你可以對(duì)一個(gè)元素作如下任何一種類型的定義:它有一個(gè)子元素,有 一個(gè)或多個(gè)子元素,有零個(gè)或多個(gè)子元素,至少有一個(gè)子元素。你還可以定義復(fù)合 關(guān)系,比如“元素X是有效的,如果它含有一個(gè)或多個(gè)子元素Y,或一個(gè)子元素Z”。

      元素定義是由它們的元素內(nèi)容模型(ECM)來(lái)描述的,也就是說(shuō),是由緊跟元素后 面的括號(hào)中的內(nèi)容來(lái)定義的。因此,正如我們前面見(jiàn)到的,元素“聯(lián)系人”的ECM被 描述為子元素“姓名”:

      ECM中的內(nèi)容采取一組正則表達(dá)式的形式。在下表中,我們列出了正則表達(dá)式中可能出現(xiàn)的元字符:

    元字符 含義
    + 出現(xiàn)一次或多次
    * 出現(xiàn)零次或多次
    可選,不出現(xiàn)或出現(xiàn)一次
    () 一組要共同匹配的表達(dá)式
    | OR,或,AND 要求嚴(yán)格遵從順序要求

      下面幾節(jié)中,我們將通過(guò)一些例子具體講解這些元字符的用法,對(duì)使用正則表達(dá)式 來(lái)定義ECM的方法獲得一些感性認(rèn)識(shí)。

      有順序的子元素

      一個(gè)元素的各個(gè)子元素之間可以以任意順序出現(xiàn),也可以強(qiáng)制遵循一定的順序。

      考慮下面的Dtd定義:

      遵從這個(gè)Dtd的XML文件可以為:

      <聯(lián)系人>

      <姓名>張三

      zhang@aaa.com

      同樣,下面這個(gè)XML文件也是有效的:

      <聯(lián)系人>

      zhang@aaa.com

      <姓名>張三

      由于我們?cè)贒td定義中僅僅用空白符分隔了元素“聯(lián)系人”的兩個(gè)子元素,這說(shuō)明 我們并沒(méi)有嚴(yán)格要求兩個(gè)元素出現(xiàn)的順序,因此上面兩種寫(xiě)法都是允許的。如果 我們使用逗號(hào)“,”來(lái)分隔兩個(gè)子元素,那么XML文件中,元素“姓名”就必須出現(xiàn) 在元素“EMAIL”前面。

      重復(fù)元素

      讓我們?cè)侔焉瞎?jié)的例子作一個(gè)小小的改動(dòng):

      讓我們看看前面給出的正則表達(dá)式的元字符集列表,它說(shuō)明一個(gè)“聯(lián)系人”元素中必 須含有一個(gè)“姓名”元素,后面接一個(gè)或多個(gè)“EMAIL”元素。這樣,下面的這段XML 文件是“有效的”。

      <聯(lián)系人>

      <姓名>張三

      zhang@aaa.com

      zhang@hotmail.com

      zhang@yahoo.com

      那么下面這段XML文件不是有效的,因?yàn)樗鼪](méi)有“EMAIL”元素,而“+”代表了“一個(gè) 或多個(gè)”。

      <聯(lián)系人>

      <姓名>張三

      如果你需要表示“零個(gè)或多個(gè)”,那么應(yīng)該使用字符“*”。例如:

      成組元素

      子元素可以使用括號(hào)并為一組。因此,下面的Dtd片段說(shuō)明,一個(gè)“聯(lián)系人”元素 中可以有一個(gè)或多個(gè)“姓名/EMAIL”子元素對(duì),并且在每個(gè)子元素對(duì)中,“姓名”都 放在“EMAIL”之前。

      符合這個(gè)Dtd的XML文件可以是:

      <聯(lián)系人>

      <姓名>張三

      zhang@aaa.com

      <姓名>李四

      li@bbb.org

      <姓名>王五

      wang@ccc.org

      注意,僅僅是因?yàn)?ldquo;+”由括號(hào)里面移到括號(hào)外面,元素“聯(lián)系人”的內(nèi)容就大大不同了。

      OR或

      號(hào)“|”描述了一個(gè)OR操作。因此,下面的Dtd片段所規(guī)定的XML元素是:所有的 “聯(lián)系人”元素應(yīng)該有一個(gè)“姓名”子元素,同時(shí),在此之后還應(yīng)該有一個(gè)“電話”或 一個(gè)“EMAIL”元素,但不能同時(shí)有“電話”和“EMAIL”兩個(gè)元素。

      一個(gè)符合上述Dtd定義的“有效的”XML文件的定義應(yīng)該是:

      <聯(lián)系人>

      <姓名>張三

      <電話>12345678

      或者是:

      <聯(lián)系人>

      <姓名>張三

      zhang@yahoo.com

      注意:在一個(gè)組中,只允許使用一種連接符(例如“,”或“|”)。因此,象下面這樣定義的Dtd是不合法的:

      要想使用多種連接符,只有通過(guò)創(chuàng)建子組的方式,使用

      可選子元素

      字符“?”說(shuō)明一個(gè)子元素是可選的,它可以出現(xiàn),也可以不出現(xiàn)。因此,在下面的Dtd 中,我們規(guī)定,每一個(gè)“聯(lián)系人”都必須有一個(gè)“姓名”子元素,同時(shí)或者有一個(gè)“電話” 子元素,或者有一個(gè)“EMAIL”子元素,此外,它還可以包含一個(gè)“地址”子元素,也可 以不包含這種元素。

      根據(jù)這個(gè)Dtd描述,下面的XML片段是“有效的”:

      <聯(lián)系人>

      <姓名>張三

      zhang@aaa.com

      <地址>

      <街道>五街1234號(hào)

      <城市>北京市

      <省份>北京

      同樣,下面這段不包含“地址”元素的XML片段也是“有效的”:

      <聯(lián)系人>

      <姓名>張三

      zhang@aaa.com

      混合內(nèi)容&空元素

      當(dāng)然,可能也有一些時(shí)候,你在一個(gè)元素中既希望包含子元素,也希望包含純文本。 XML中允許這種使用方法,并把這種元素稱為混合內(nèi)容的元素。在下面的例子中, “聯(lián)系人”就是一個(gè)混合元素。

      ]>

      <聯(lián)系人列表>

      <聯(lián)系人>

      <姓名>張三

      <電話>(010)62345678

      zhang@aaa.com

      這是關(guān)于張三的信息

      注意,由于在“(姓名|電話|EMAIL|#PCDATA)”之外有“*”,所以在元素“聯(lián)系人”中可以包含零個(gè)或多個(gè)“姓名”、電話、EMAIL和純文本字段。

      還有一種情況沒(méi)有說(shuō),那就是,一個(gè)元素中不包含任何子元素,也不包含純文本。對(duì)于這種情況,我們可以定義一個(gè)空標(biāo)記。當(dāng)然,定義這樣一個(gè)標(biāo)記很簡(jiǎn)單,你只需 要使用關(guān)鍵字EMPTY就可以了,例如: 這樣,在你的XML文件中,就可以使用一個(gè)空元素。

      定義有效的元素屬性

      現(xiàn)在我們已經(jīng)學(xué)會(huì)如何定義一個(gè)元素以及它的內(nèi)容,如何描述父元素與子元素之間 錯(cuò)綜復(fù)雜的關(guān)系,只差不知道如何定義元素的屬性了。

      在第二篇教程中我們?cè)?jīng)提到過(guò)屬性,那個(gè)例子是一個(gè)有關(guān)“商品”的元素,它有兩個(gè)屬性,即“類型”和“顏色”:<商品 類型 = "服裝" 顏色 = "黃色">

      在Dtd中定義屬性時(shí),我們使用下面的格式:

      元素名是屬性所屬的元素的名字,在上面例子中,元素名是“商品”;屬性名是屬性的命名,例子中,“類型”和“顏色”是屬性名;缺省值說(shuō)明在XML文件中,如果沒(méi)有特別說(shuō)明屬性的取值,語(yǔ)法分析器默認(rèn)它具有的取值;屬性類型則用來(lái)指定該屬性是屬于十個(gè)有效屬性類型中的哪種類型。

      注意:由于ATTLIST是一個(gè)屬性的列表,它可以包含很多屬性,在實(shí)際應(yīng)用中,一個(gè)元素也經(jīng)常有多個(gè)屬性。

      上面例子中的屬性可以如下定義:

      類型 CDATA #REQUIRED

      顏色 CDATA #IMPLIED

      >

      在元素說(shuō)明的四個(gè)部分中,我們需要再詳細(xì)討論一下元素類型和缺省值。在下一節(jié)中,我們就從缺省值說(shuō)起。

      屬性缺省值

      根據(jù)XML文件是否必須為一個(gè)屬性提供取值,屬性的缺省值又可以分為以下三類:

      必須賦值的屬性

      關(guān)鍵字REQUIRED說(shuō)明XML文件中必須為這個(gè)屬性給出一個(gè)屬性值。例如,假設(shè)你 想定義一個(gè)"頁(yè)面作者"元素,并把這個(gè)元素加入所有網(wǎng)站中的每一個(gè)頁(yè)面。之所 以定義這個(gè)元素,是為了頁(yè)面編輯者能夠提供他的聯(lián)系信息,以便當(dāng)發(fā)現(xiàn)頁(yè)面錯(cuò) 誤或無(wú)效鏈接時(shí),可以及時(shí)地通知他。在這種情況下,每個(gè)頁(yè)面作者都有不同的 個(gè)人信息,所以你無(wú)法事先知道應(yīng)該用什么作為缺省值,但你又的確需要提供每 個(gè)人的信息。這時(shí)候,你就可以把與聯(lián)系信息相關(guān)的屬性定義為必須的 (REQUIRED),而且不用提供缺省值。

      屬性值可有可無(wú)的屬性

      當(dāng)使用IMPLIED關(guān)鍵字時(shí),文法解釋器不再?gòu)?qiáng)行要求你在XML文件中給該屬性賦 值,而且也無(wú)須在Dtd中為該屬性提供缺省值。可以說(shuō),這是對(duì)屬性值有無(wú)的最 低要求,現(xiàn)實(shí)中經(jīng)常用到。

      固定取值的屬性

      還有一種特殊情況,你需要為一個(gè)特定的屬性提供一個(gè)缺省值,并且不希望XML 文件的編寫(xiě)者把你的缺省值替代掉。這時(shí)候,就應(yīng)該使用FIXED關(guān)鍵字,同時(shí)為 該屬性提供一個(gè)缺省值。

      定義缺省值的屬性

      如果不使用上面任何一種關(guān)鍵字的話,該種屬性就是屬于這種類型。對(duì)于這種屬 性,你需要在Dtd中為它提供一個(gè)缺省值。而在XML文件中可以為該屬性給出新的 屬性值來(lái)覆蓋事先定義的缺省值,也可以不另外給出屬性值,后一種情況下它就 默認(rèn)為采用Dtd中給出的缺省值。

      至于究竟采用哪種缺省值,就看實(shí)際需要了。下面給出一個(gè)具體的例子:

      姓名 #CDATA #IMPLIED

      年齡 #CDATA #IMPLIED

      聯(lián)系信息 #CDATA #REQUIRED

      網(wǎng)站職務(wù) #CDATA #FIXED "頁(yè)面作者"

      個(gè)人愛(ài)好 #CDATA "上網(wǎng)">

      屬性類型

      一個(gè)元素可以為以下十種類型中的任意一種:

      CDATA

      Enumerated

      ID

      IDREF

      IDREFS

      ENTITY

      ENTITIES

      NMTOKEN

      NMTOKENS

      NOTATION

      下面我們就來(lái)一個(gè)一個(gè)講述。

      CDATA類型

      CDATA指的是純文本,即由字符、符號(hào)“&”、小于號(hào)“<”和引號(hào)“"”組成的字符串。 當(dāng)然,就象我們前面講到的,你應(yīng)該使用實(shí)體&代替“&”,<代替“<”, "代替“"”。

      請(qǐng)看下面這個(gè)關(guān)于劇本的例子:

      encoding="Gb2312"

      standalone = "yes"?>

      ]>

      <劇本>

      <對(duì)話 演員="某甲">我可不這么認(rèn)為!

      <對(duì)話 演員="某乙">為什么呢?

      枚舉類型

      屬性也可以被描述為一組可接受的取值的列表,XML文件中對(duì)屬性的賦值將從這個(gè)列表中選取一個(gè)值。這類屬性屬于枚舉類型ENUMERATED,不過(guò),關(guān)鍵字ENUMERATED是不出現(xiàn)在Dtd定義中的。

      encoding="Gb2312"

      standalone = "yes"?>

      ]>

      <購(gòu)物籃>

      <肉 類型 = "魚(yú)肉"/>

      <肉 類型 = "牛肉"/>

      <肉/>

      注意,在上面這個(gè)例子中,給屬性“類型”定義的缺省值是“雞肉”,所以“購(gòu)物籃”中的第三個(gè)元素的“類型”屬性取值為“雞肉”。

      ID和IDREF

      ID類型

      ID是用屬性值的方式為文件中的某個(gè)元素定義唯一標(biāo)識(shí)的方法,它的作用類似于 HTML文件中的內(nèi)部鏈接。在大多數(shù)情況下,ID由處理文件的程序或腳本語(yǔ)言使用。

      ID的值必須是一個(gè)有效的XML名稱,它由字母、數(shù)字或下劃線開(kāi)始,名字中不能出 現(xiàn)空白符。另外一般而言,不要給ID類型的屬性事先指定缺省值,這很容易引起不 同的元素具有相同的標(biāo)識(shí)的情況,更不能使用FIXED型的缺省值。此類屬性經(jīng)常使 用REQUIRED缺省類型,當(dāng)然,這也不是必須的。有的應(yīng)用并不要求每個(gè)元素都有 自己的標(biāo)識(shí),所以,也可以使用IMPLIED缺省類型。

      encoding="Gb2312"

      standalone = "yes"?>

      ]>

      <聯(lián)系人列表>

      <聯(lián)系人 編號(hào)="1">

      <姓名>張三

      zhang@aaa.com

      <聯(lián)系人 編號(hào)="2">

      <姓名>李四

      li@bbb.org

      ID和IDREF2

      IDREF類型

      IDREF類型允許一個(gè)元素的屬性使用文件中的另一個(gè)元素,方法就是把那個(gè)元素的 ID標(biāo)識(shí)值作為該屬性的取值。例如下面的例子:

      encoding="Gb2312"

      standalone = "yes"?>

      ]>

      <聯(lián)系人列表>

      <聯(lián)系人 編號(hào)="2">

      <姓名>張三

      zhang@aaa.com

      <聯(lián)系人 編號(hào)="1" 上司="2">

      <姓名>李四

      li@aaa.com

      NMTOKEN和NMTOKENS

      類型NMTOKEN和NMTOKENS是諸多屬性類型中面向處理程序的又一個(gè)類型。這兩個(gè) 類型用于指示一個(gè)有效的名字。當(dāng)需要把一個(gè)元素和其它的元件,例如一個(gè)JAVA 類或一個(gè)安全算法,相聯(lián)系時(shí),可以讓它們助你一臂之力。請(qǐng)看下面的例子:

      關(guān)于元素的定義:

      安全性( ON | OFF ) "OFF"

      授權(quán)用戶 NMTOKENS #IMPLIED

      >

      XML文件:

      <數(shù)據(jù) 安全性="ON" 授權(quán)用戶 = "Iggieeb SelenaS Guntherb">

      blah blah blah

      NOTATION類型

      NOTATION類型允許屬性值為一個(gè)Dtd中聲明的符號(hào),這個(gè)類型對(duì)于使用非XML格式的數(shù)據(jù)非常有用。

      現(xiàn)實(shí)世界中存在著很多無(wú)法或不易用XML格式組織的數(shù)據(jù),例如圖象、聲音、影象等 等。對(duì)于這些數(shù)據(jù),XML應(yīng)用程序常常并不提供直接的應(yīng)用支持。通過(guò)為它們?cè)O(shè)定 NOTATION類型的屬性,可以向應(yīng)用程序指定一個(gè)外部的處理程序。例如,當(dāng)你想要 為一個(gè)給定的文件類型指定一個(gè)演示設(shè)備時(shí),可以用NOTATION類型的屬性作為觸發(fā)。

      要使用NOTATION類型作為屬性的類型,首先要在Dtd中為可選用的記號(hào)作出定義。 定義的方式有兩種,一種是使用MIME類型,形式是:

      再有一種是使用一個(gè)URL路徑,指定一個(gè)處理程序的路徑。

      在下面這個(gè)例子中,為"電影"元素指定了兩種可選設(shè)備:一種是movPlayer.exe,用來(lái)播映.mov文件,另一種則用來(lái)繪制GIF圖象。

      encoding="Gb2312"

      standalone = "yes"?>

      ]>

      <文件>

      <電影 演示設(shè)備 = "mp"/>

      實(shí)體屬性類型與參數(shù)實(shí)體

      實(shí)體在XML中充當(dāng)著宏或別名的角色。實(shí)體最根本的作用是幫助你為一大段文本創(chuàng) 建一個(gè)別名,這樣,在文件的另一個(gè)位置需要引用這段文本時(shí),僅需要指向它的別 名就可以了。它還意味著一旦需要修改,僅需要在一個(gè)地方作改動(dòng),就完成了全局 的改動(dòng)。

      我們還提到,實(shí)體分為一般實(shí)體和參數(shù)實(shí)體兩種類型,它們都可以定義為內(nèi)部的也 可以用關(guān)鍵字SYSTEM定義為外部的。實(shí)體的定義必須出現(xiàn)在引用之前,而且要注意 正確嵌套,不能出現(xiàn)循環(huán)引用的情況。在Dtd中,這兩種類型的實(shí)體都得到了廣泛的 應(yīng)用。

      實(shí)體屬性類型

      實(shí)體類型的屬性值屬于一般實(shí)體,如前所述,它的定義方式是:

      或利用SYSTEM定義外部實(shí)體,方式為:

      引用方式為: &實(shí)體名;

      使用關(guān)鍵字ENTITY,則聲明一個(gè)屬性是實(shí)體類型,它的取值為已定義的實(shí)體。請(qǐng)看下面例子:

      encoding="Gb2312"

      standalone = "yes"?>

      ]>

      <文件>

      <電影 來(lái)源 = "&bladeRunner;">

      參數(shù)實(shí)體 參數(shù)實(shí)體專門(mén)用在Dtd中。定義方式是:

      或:

      引用方式為: %實(shí)體名; 使用參數(shù)實(shí)體,可以方便元素和屬性的聲明。例如:

      最后提醒大家注意,不要以為實(shí)體屬性類型的定義與Dtd有關(guān),所以它使用的就是參數(shù) 實(shí)體。參數(shù)實(shí)體只能在Dtd中使用,而對(duì)于任何元素屬性值的指定(除了缺省值外), 都是在XML文件正文中進(jìn)行的,因此實(shí)體屬性值仍屬于一般實(shí)體。

    【XML認(rèn)證教程:Dtd】相關(guān)文章:

    IBM XML認(rèn)證知識(shí)點(diǎn):Dtd09-01

    XML入門(mén)教程10-22

    XML認(rèn)證元素類型聲明05-28

    關(guān)于XML的入門(mén)教程10-06

    關(guān)于IBM XML認(rèn)證考試的要點(diǎn)09-07

    XML名稱空間入門(mén)教程06-07

    MCSA認(rèn)證教程詳解10-04

    XML認(rèn)證考試知識(shí)點(diǎn):Parser08-21

    關(guān)于XML入門(mén)教程:分析XM09-25

    關(guān)于XML的介紹08-29

    主站蜘蛛池模板: 国产成人精品精品欧美| 2023国产精品自拍| 四虎精品8848ys一区二区| 亚洲av午夜国产精品无码中文字| 精品国产第一国产综合精品| 久久久久人妻一区精品果冻| 国产成人精品日本亚洲直接| 中国精品18videosex性中国| 国内精品久久久久久久coent| 国产精品分类视频分类一区| 日韩欧精品无码视频无删节 | 亚洲爆乳精品无码一区二区| 亚洲精品你懂的| 国产精品嫩草视频永久网址| 精品国产一区二区三区不卡| 亚洲日韩精品射精日| 久久精品国产99久久久香蕉| 国产精品无码DVD在线观看| 久久精品国产半推半就| 91国在线啪精品一区| 国产乱人伦偷精品视频AAA| 久久久久久国产精品免费无码| 中文字幕精品一区| 亚洲精品第一国产综合境外资源| 久久亚洲国产成人精品无码区| 国产精品自在线拍国产第一页| 8050免费午夜一级国产精品| 91精品国产91久久久久久| 欧美巨大黑人精品videos| 免费精品99久久国产综合精品| 九九精品在线观看| 久久青青草原精品影院| 亚洲国产精品久久久久网站| 亚洲人成亚洲精品| 成人一区二区三区精品| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲日韩中文在线精品第一| 一本色道久久88综合日韩精品| 亚洲国产婷婷综合在线精品| 自拍偷在线精品自拍偷无码专区 | 国产精品成人在线|