曝光臺 注意防騙
網(wǎng)曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費(fèi)者
枚舉類型,文檔創(chuàng)作者只需創(chuàng)建新的值,就能夠適應(yīng)新的安全級別要求,而不必每次都編輯
D T D。只要符合我們前面介紹的有效的N M TO K E N值應(yīng)該遵守的規(guī)則,任何值都可以作為這種
屬性的值。
顯然,N M T O K E N類型使得應(yīng)用程序必須承擔(dān)驗(yàn)證值有效性的任務(wù)。然而對于枚舉類型,
解析器能夠提供有效性檢查。
與I D R E F S和E N T I T I E S類似,你可以聲明屬性類型N M TO K E N S,它的值由多個(gè)名稱記號構(gòu)
成。每個(gè)名稱必須是有效的名稱記號,它們之間以空格分隔:
程序清單3 - 11
這個(gè)職員能夠訪問名為r e d、g r e e n、m e g a和u l t r a的安全區(qū)域。就類型而言,這些都是有效的
N M TO K E N值。與枚舉類型不同,解析器不檢查這些值的有效性。文檔的作者必須確保自己使
用了適當(dāng)?shù)拿Q。
6. NOTAT I O N:非X M L數(shù)據(jù)
當(dāng)我們討論實(shí)體類型的屬性時(shí),曾經(jīng)提及表示法。通過將實(shí)體名稱作為屬性值,可以將G I F
和J P E G圖形文件與元素相關(guān)聯(lián)。然而, X M L解析器不能處理二進(jìn)制格式。那么,解析器的作用
是什么呢?我們可以使用表示法標(biāo)識要鏈接到X M L文檔的外部數(shù)據(jù)項(xiàng)的格式。表示法聲明能夠
說明格式的名稱,以及相關(guān)的外部處理器。解析器可以根據(jù)聲明將自己不能識別的數(shù)據(jù)交給外
部處理器處理。處理器聲明類似于用于定位D T D文件的D O C T Y P E聲明。它可以是P U B L I C或
S Y S T E M的,而且必須包含外部處理器的名稱:
現(xiàn)在我們知道,當(dāng)j p g作為表示法名稱時(shí),與之相關(guān)的數(shù)據(jù)將發(fā)送給j p g v i e w e r. e x e處理。利
用表示法, X M L文檔可以容納多種不同的數(shù)據(jù)類型。這對于報(bào)表、病歷、法律文書、學(xué)術(shù)報(bào)告,
以及任何豐富多彩的多媒體演示來說都是非常有用的。但是, X M L僅僅是一個(gè)最基本的工具集。
為了提供正確的表示語義,應(yīng)用程序還有大量工作要做。
通過使用關(guān)鍵字N O TAT I O N,可以將屬性定義為表示法名稱類型的。例如:
66使用XML 高級編程
下載
在以上聲明中, I m a g e元素可以有一個(gè)名為t y p e的屬性,它是表示法類型的。該屬性可選的
值有g(shù) i f和j p g。如果元素實(shí)例沒有定義t y p e屬性,解析器會(huì)假設(shè)該屬性設(shè)置為缺省值g i f。然而,
在上述實(shí)例中,值j p g覆蓋了缺省值。
7. 枚舉類型:選擇
名稱記號的長度是不受限的。雖然N M TO K E N和N M TO K E N S屬性值的格式必須符合命名規(guī)
則,但是它所允許的值是可以自由設(shè)置的。在許多情況下,我們只希望允許一小部分字符串值,
例如:y e s和n o是表示決策的枚舉值; r e d、y e l l o w和g r e e n是信號燈的顏色,等等。在這些情況下,
我們要采用枚舉屬性。
為了聲明枚舉屬性,在通常出現(xiàn)類型關(guān)鍵字的位置應(yīng)該放置一組值。這些可選值包含在圓
括號中,并以管道符號( |)分隔。聲明中的可選值不需要帶引號,但是與X M L中的名稱一樣,
它是大小寫敏感的。文檔中的屬性實(shí)例必須包含唯一的一個(gè)可選值,且這個(gè)值必須是在屬性聲
明中列舉的。與其他屬性值類似,枚舉值必須包含在引號中。下面是兩個(gè)簡單的例子:
程序清單3 - 1 2
在第一個(gè)例子中,屬性值只能是y e s或n o;Y E S、N O和m a y b e都是無效的。設(shè)置屬性值時(shí),
不僅必須使用枚舉類型聲明中提供的值,而且要注意大小寫。如果你構(gòu)建的枚舉類型的值可能
由用戶手工輸入,應(yīng)該考慮因大小寫產(chǎn)生的各種變體。
現(xiàn)在讓我們討論D T D中使用的另一種技術(shù)。
3.3.4 條件部分
許多程序員都習(xí)慣于在程序中指定要解析的信息,僅當(dāng)滿足特定的條件時(shí),編譯器才解析
指定的內(nèi)容。D T D提供了類似的功能,雖然它比通常的編程語言有更多的限制—運(yùn)行時(shí)不能
執(zhí)行條件表達(dá)式。D T D可以包含條件部分,它用于向解析器說明包含或忽略聲明部分。它們能
夠用來控制D T D中的相關(guān)聲明塊。然而, D T D內(nèi)部子集不支持條件部分。
條件部分包括:驚嘆號、左方括號、關(guān)鍵字,以及由方括號包含的聲明塊。如果關(guān)鍵字為
I N C L U D E,其中的聲明被認(rèn)為是D T D的一部分。如果關(guān)鍵字為I G N O R E,處理器雖然讀取其中
的聲明,但是在處理時(shí)忽略它:
程序清單3 - 1 3
第3章文檔類型定義使用67 下載
在上例中, A u d i t E n t r y及其屬性將成為D T D的一部分,D e b u g E n t r y及其屬性則不會(huì)對D T D產(chǎn)
生任何影響。根據(jù)該D T D創(chuàng)建的文檔可以使用A u d i t E n t r y,但是文檔中的D e b u g E n t r y元素會(huì)被認(rèn)
為是無效的。
這一特征乍看起來沒有什么價(jià)值。如果你不需要某些聲明,為什么還要將它們添加到D T D
中呢?如果聲明包含在D T D中,為什么要使用I N C L U D E呢?實(shí)際上,條件部分應(yīng)該與參數(shù)實(shí)體
配合使用。讓我們更改一下以上實(shí)例,并就條件部分的用法作進(jìn)一步說明。假設(shè)創(chuàng)建文檔時(shí),
我們在文檔實(shí)例的D O C T Y P E聲明中寫入以下實(shí)體聲明:
程序清單3 - 1 4
假設(shè)文檔在創(chuàng)建時(shí)需要包含調(diào)試信息或計(jì)費(fèi)信息。如果D T D外部子集包含以下代碼:
程序清單3 - 1 5
然后,假設(shè)文檔實(shí)例是要交給財(cái)務(wù)部門的:
程序清單3 - 1 6
68使用XML 高級編程
下載
這樣,文檔就能夠正確地驗(yàn)證有效性。
由于內(nèi)部D T D子集中的聲明是先讀的,因此實(shí)際上,參數(shù)實(shí)體聲明是出現(xiàn)在外部D T D子
集中的參數(shù)實(shí)體引用之前的。
在以上例子中,我們需要的是在生產(chǎn)環(huán)境中用于審核的元素,但是在某些情況,出于測試
或錯(cuò)誤檢測的需要,我們可能希望在文檔中包含用于調(diào)試的元素。與A u d i t E n t r y相關(guān)的聲明將包
含在D T D中,而與D e b u g E n t r y相關(guān)的聲明將被忽略。為了將D e b u g E n t r y作為文檔的有效元素,
只需交換參數(shù)實(shí)體的關(guān)鍵字,這一操作是相當(dāng)簡單的。如果使用恰當(dāng),條件部分能夠提供大量
功能,并改善代碼的可重用性。
3.4 DTD的缺點(diǎn)
D T D能夠有效地推動(dòng)X M L的發(fā)展。然而,它也受到一些因素的限制。首先,它使用自己的
中國航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(28)