曝光臺(tái) 注意防騙
網(wǎng)曝天貓店富美金盛家居專營(yíng)店坑蒙拐騙欺詐消費(fèi)者
時(shí),它會(huì)用這三個(gè)屬性取代參數(shù)實(shí)體名稱。如果我們需要在D T D輸入該屬性集合,只需引用實(shí)
體p e o p l e P a r a m e t e r s即可。
在D T D中,所有參數(shù)實(shí)體必須在引用之前進(jìn)行聲明。這意味著D T D內(nèi)部子集不能引用在外
部子集中聲明的參數(shù)實(shí)體,因?yàn)榻馕銎魇紫茸x取內(nèi)部子集—所以會(huì)導(dǎo)致引用出現(xiàn)在聲明之前。
引用參數(shù)實(shí)體時(shí),需要在實(shí)體名稱之前增加百分號(hào),在其后增加分號(hào)。定界符與名稱之間
沒有空格。下面的代碼顯示了如何引用上面定義的參數(shù)實(shí)體:
第3章文檔類型定義使用57 下載
以上代碼聲明I n s u r e d P e r s o n元素包含4個(gè)屬性:其中c a r r i e r是顯式聲明的,其余三個(gè)參數(shù)
(a g e、w e i g h t和h e i g h t)包含在參數(shù)實(shí)體中,當(dāng)解析器用置換文本取代實(shí)體引用時(shí),會(huì)出現(xiàn)元素
的完整列表。因此,上面的例子等價(jià)于以下代碼段:
程序清單3 - 1
這種類型的替換形式—在聲明中進(jìn)行替換—只能用于D T D外部子集。在內(nèi)部子集中,
參數(shù)實(shí)體引用只能位于其他聲明之間;因此這類實(shí)體引用的置換文本必須是一個(gè)完整的聲明,
否則將影響D T D格式的正規(guī)性。
一個(gè)格式正規(guī)的文檔應(yīng)該遵循的規(guī)則都可以應(yīng)用于參數(shù)實(shí)體。用置換文本取代實(shí)體引用后,
仍然必須保證文檔格式的正規(guī)性。當(dāng)你構(gòu)建參數(shù)實(shí)體時(shí),一定要謹(jǐn)記這條規(guī)則。通常,在參數(shù)
實(shí)體的置換文本中使用標(biāo)記時(shí)要格外謹(jǐn)慎。下面的例子就破壞了格式正規(guī)約束:
% m y P a r m ;的置換文本是不完整的聲明,它缺少結(jié)束標(biāo)記>,因此當(dāng)解析器替換% m y P a r m ;時(shí),
D T D就不再是格式正規(guī)的了。
與通用實(shí)體類似,參數(shù)實(shí)體的置換文本也可以位于外部文件中。例如:
從以上討論可以看出,對(duì)于定義X M L文檔詞匯表來說,實(shí)體是一種非常有價(jià)值的工具。下
面讓我們看看如何定義詞匯表中的元素類型。
3.3.2 元素
元素是X M L的核心與靈魂。在D T D中,元素類型是通過E L E M E N T標(biāo)記聲明的。除了關(guān)鍵
字,標(biāo)記還提供所聲明類型的名稱和內(nèi)容規(guī)范。正如第2章所述,元素類型名要遵守X M L對(duì)名稱
的限制。名稱可以是字母、數(shù)字,也可以使用標(biāo)點(diǎn)符號(hào),如:冒號(hào)( :)、下劃線( _)、連字符
(-)和句點(diǎn)( .)。然而,名稱不能以數(shù)字開頭。它的第一個(gè)字符只能是字母、下劃線或冒號(hào)。
雖然名稱中可以使用冒號(hào),但是在第7章介紹名稱空間時(shí),你會(huì)看到有關(guān)冒號(hào)的保留用法。
鑒于這方面的原因,最好避免在元素名稱中使用冒號(hào)。
元素內(nèi)容可以分為以下四種類型:空、元素、復(fù)合及任意。空元素中既不包含文本,也不
含子元素。但是它可以有屬性。它用關(guān)鍵字E M P T Y來表示。元素(更確切地說是純?cè)兀﹥?nèi)容
是指元素中只包含子元素,而不含文本。顧名思義,復(fù)合內(nèi)容是元素和可解析字符數(shù)據(jù)
(# P C D ATA)或文本的組合。對(duì)于兩種類型,我們可以通過結(jié)構(gòu)表達(dá)所需的內(nèi)容。復(fù)合內(nèi)容和
元素內(nèi)容是采用內(nèi)容模型( content model)表示的。內(nèi)容模型是一種規(guī)范,它定義了元素內(nèi)容
的內(nèi)部結(jié)構(gòu)。如果你希望元素具有任意形式的內(nèi)容,同時(shí)不破壞X M L的格式正規(guī)語法,應(yīng)該使
58使用XML 高級(jí)編程
下載
用關(guān)鍵字A N Y進(jìn)行聲明。
元素類型S o m e D a t a不含任何內(nèi)容。下面是該類型的實(shí)例:
通常,在以下情況你可能會(huì)使用空元素。在文檔中寫入元素本身足以起到標(biāo)識(shí)的作用。例
如,H T M L中的< B R / >元素。你可以利用這種方法通知應(yīng)用程序改變處理模式。如果你希望在文
檔中插入一組相關(guān)的參數(shù),而專門為它們建立結(jié)構(gòu)又不太值得,此時(shí)你可以使用空元素,利用
它來表達(dá)參數(shù)之間的關(guān)系。稍后討論屬性時(shí),你會(huì)對(duì)此有進(jìn)一步認(rèn)識(shí), X M L定義的某些屬性類
型可以用來表示一對(duì)一或一對(duì)多關(guān)系。如果你要說明的僅僅是關(guān)系本身,空元素是最適合不過
的。
A n y O l d T h i n g聲明為A N Y內(nèi)容,因此我們可以使
用元素和文本的任意組合。一般而言,使用A N Y內(nèi)
容模型時(shí)要格外謹(jǐn)慎,因?yàn)榻馕銎骰旧喜荒芴峁?br />
有效性驗(yàn)證。
內(nèi)容模型即元素結(jié)構(gòu)的聲明。它是由圓括號(hào)包含的若干子元素名稱、運(yùn)算符和# P C D ATA關(guān)鍵
字的組合。運(yùn)算符用于說明元素包含的元組,以及元素和字符數(shù)據(jù)之間的組合方式(參見表3 - 3)。
以逗號(hào)分隔的列表表示順序排列的元素。下面的代碼聲明了P e r s o n N a m e元素:
在元素實(shí)例中, F i r s t、M i d d l e和L a s t必須按指定的順序出現(xiàn)。如果你希望為文檔的創(chuàng)作者提
供選擇的余地,可以參考下面的F r u i t B a s k e t元素類型聲明,它可以包含A p p l e或O r a n g e,但是兩
者不能同時(shí)出現(xiàn):
內(nèi)容模型可以嵌套。下面的例子是修改后的F r u i t B a s k e t,它包含的第一個(gè)參數(shù)是C h e r r y,第
二個(gè)參數(shù)可以從A p p l e或O r a n g e中選擇其一:
根據(jù)以上聲明產(chǎn)生的實(shí)例必須包含兩個(gè)元素: C h e r r y以及A p p l e或O r a n g e,且它們必須按照
指定的順序出現(xiàn)。根據(jù)聲明,元素實(shí)例只可能有以下兩種形式:
程序清單3 - 2
程序清單3 - 3
第3章文檔類型定義使用59 下載
表3 - 3
順序運(yùn)算符含義
, (逗號(hào))表示嚴(yán)格順序
| (管道符號(hào))表示選擇
除了我們前面介紹的順序運(yùn)算符,還有一種非
常重要的運(yùn)算符——元組運(yùn)算符。特定的元素類型
允許多少實(shí)例?表3 - 4列出了元組運(yùn)算符。
如果沒有元組運(yùn)算符,說明元組數(shù)為一。元組
運(yùn)算符可以用于元素或內(nèi)容模型,它能夠產(chǎn)生許多
非常復(fù)雜的結(jié)構(gòu)。讓我們進(jìn)一步修改F r u i t B a s k e t元
素類型聲明:
以上內(nèi)容模型組表示F r u i t B a s k e t可以有一個(gè)或多個(gè)元素類型C h e r r y的實(shí)例,以及零個(gè)或多個(gè)
A p p l e或O r a n g e的實(shí)例。而且所有C h e r r y元素必須連續(xù)出現(xiàn)。下面是一個(gè)正確的F r u i t B a s k e t實(shí)例:
程序清單3 - 4
如果你希望表示復(fù)合內(nèi)容,需要在內(nèi)容模型中包含# P C D ATA。內(nèi)容模型中的元素必須以|運(yùn)
中國(guó)航空網(wǎng) m.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級(jí)編程上(25)