曝光臺(tái) 注意防騙
網(wǎng)曝天貓店富美金盛家居專營(yíng)店坑蒙拐騙欺詐消費(fèi)者
當(dāng)用括號(hào)對(duì)元素分組時(shí)豎線還會(huì)更有用?梢园言亟M合在括號(hào)內(nèi)分組,然后在括號(hào)后加星號(hào)、問(wèn)號(hào)和加號(hào)后綴來(lái)指明一定
的元素組合會(huì)出現(xiàn)零次或多次、零次或一次或者一次或多次。
8.5.10 帶括號(hào)的子元素
在父元素聲明中,必須了解有關(guān)子元素安排的最后一件事是如何用括號(hào)分組元素。每一對(duì)括號(hào)把數(shù)個(gè)元素合為一個(gè)獨(dú)立元素。
括號(hào)內(nèi)的元素可以作為獨(dú)立元素嵌套在其他括號(hào)內(nèi)。而且,還可以加上加號(hào)、逗號(hào)或問(wèn)號(hào)后綴。您還可以將這些括號(hào)組合成
更大的括號(hào)組合來(lái)構(gòu)成復(fù)雜的結(jié)構(gòu)。這是一項(xiàng)功能強(qiáng)大的技術(shù)。
XML 實(shí)用大全
第 220 頁(yè)
例如,考慮一份由兩個(gè)互相可交換的元素組成的清單。這基本上是HTML 中定義清單的方法。每項(xiàng)<dt>標(biāo)記要與一項(xiàng)<dd>標(biāo)
記相匹配。如果用XML 來(lái)復(fù)制這一結(jié)構(gòu),dl 元素的聲明看起來(lái)是這樣的:
<!ELEMENT dl (dt , dd)*>
括號(hào)表明要重復(fù)的是相互匹配的<dt><dd>元素對(duì)。
元素經(jīng)常以或多或少的隨機(jī)順序出現(xiàn)。新聞雜志文章通常有一個(gè)標(biāo)題,絕大多數(shù)后接文章段落,帶有圖形、照片、副欄、副
標(biāo)題、通篇夾雜的引文,也許在末尾還有作者行?梢栽诟冈芈暶髦性诶ㄌ(hào)內(nèi)用豎線分組列出所有子元素來(lái)指明這些安排。
然后您在括號(hào)外加星號(hào)來(lái)指明允許括號(hào)內(nèi)元素出現(xiàn)零或多次。例如:
<!ELEMENT ARTICLE (TITLE, (P | PHOTO | GRAPH | SIDEBAR
| PULLQUOTE | SUBHEAD)*, BYLINE?)>
再舉一例,假設(shè)要說(shuō)明一個(gè)DOCUMENT 元素,它沒(méi)有很多子元素,但必須有一個(gè)TITLE 后接任意數(shù)量的混合文本段落和圖像,
以及一個(gè)任選的SIGNATURE 塊。該元素聲明書(shū)寫(xiě)如下:
<!ELEMENT DOCUMENT (TITLE, (PARAGRAPH | IMAGE)*, SIGNATURE?)>
這不是描述這一結(jié)構(gòu)的唯一方法。實(shí)際上這甚至不是最好的方法。另一種方法是聲明一個(gè)包含PARAGRAPH 和IMAGE 元素的
BODY 元素并把它夾在TITLE 和SIGNATURE 元素之間,例如:
<!ELEMENT DOCUMENT (TITLE, BODY, SIGNATURE?)>
<!ELEMENT BODY ((PARAGRAPH | IMAGE)*)>
這兩種途徑的區(qū)別在于第二種途徑在文檔中使用了BODY 元素。這一元素對(duì)讀取文檔的應(yīng)用程序提供了有用的組織層次。問(wèn)
題是文檔的讀者(可能是另一種計(jì)算機(jī)程序)是否要把BODY 作為單一的項(xiàng)目,并同TITLE 和SIGNATURE 分開(kāi),并可從元素
總和中區(qū)別出來(lái)。
再舉一個(gè)國(guó)際地址的例子。美國(guó)以外國(guó)家的地址并不遵循美國(guó)的約定。尤其是郵政編碼有時(shí)在國(guó)家名之前,有時(shí)則在其后,
如下兩例:
Doberman-YPPAN
Box 2021
St. Nicholas QUEBEC
CAN GOS-3LO
或者
Editions Sybex
10/12 Villa Coeur-de-Vey
XML 實(shí)用大全
第 221 頁(yè)
75685 Paris Cedex 14
France
雖然地址項(xiàng)不是按照順序,郵件也可能郵到目的地,但最好還是讓地址更加方便靈活些。允許靈活性的地址元素聲明可以是
這樣:
<!ELEMENT ADDRESS (STREET+, (CITY | STATE | POSTAL_CODE
| COUNTRY)*)>
這表明ADDRESS 元素必須有一個(gè)或多個(gè)STREET 子元素后接任意數(shù)目的CITY、STATE、POSTAL_CODE 或COUNTRY 元素。如果要
每個(gè)元素不多于一個(gè),那這就不夠理想了。遺憾的是,這超出了DTD 的能力。您要使元素的順序更加靈活方便,就要放棄一
些控制每一元素最大數(shù)的能力。
另一方面,可能有一份由任意順序排列的不同元素組成的清單,如一份錄音清單就可能包含CD,唱片集和音帶。區(qū)別各類
不同元素的元素聲明可能如下:
<!ELEMENT MUSIC_LIST (CD | ALBUM | TAPE)*>
在棒球DTD 中,可以使用括號(hào)來(lái)為投手和擊球手做不同的統(tǒng)計(jì)數(shù)據(jù)集。每名隊(duì)員能用一套或另一套數(shù)據(jù),但不能用兩者。元
素聲明如下:
<!ELEMENT PLAYER (GIVEN_NAME, SURNAME, POSITION, GAMES,
GAMES_STARTED,((COMPLETE_GAMES?,WINS?,LOSSES?,SAVES?,
SHUT_OUTS?,ERA?,INNINGS?,EARNED_RUNS?,HIT_BATTER?,
WILD_PITCHES?,BALK?,WALKED_BATTER?,STRUCK_OUT_BATTER? )
|(AT_BATS?, RUNS?,HITS?, DOUBLES?, TRIPLES?, HOME_RUNS?,
RBI?,STEALS?,CAUGHT_STEALING?,SACRIFICE_HITS?,
SACRIFICE_FLIES?, ERRORS?, WALKS?, STRUCK_OUT?,
HIT_BY_PITCH ? )))>
在元素聲明中還有一些不好處理的事情。例如,沒(méi)有好的方法來(lái)說(shuō)明一份文檔要以TITLE 元素開(kāi)始而以SIGNATURE 元素結(jié)束,
兩者之間可包含其他元素。這是因?yàn)锳NY 不能與其他子元素合用。
還有,通常對(duì)元素出現(xiàn)的位置掌握得越不準(zhǔn)確,就越不能控制它們的數(shù)目。例如,不能說(shuō)文檔應(yīng)該有一個(gè)可能出現(xiàn)在文檔任
何地方的TITLE 元素。
XML 實(shí)用大全
第 222 頁(yè)
但是,用括號(hào)來(lái)建立元素塊,按順序的元素用逗號(hào)分隔,平行出現(xiàn)的用豎線分隔,能讓我們建立帶有詳細(xì)的元素出現(xiàn)的位置
規(guī)則的復(fù)雜結(jié)構(gòu)。但是不要無(wú)止境地這樣做。簡(jiǎn)單的解決方法會(huì)更好。DTD 越復(fù)雜,就越難編寫(xiě)出滿足要求的合法的文檔,
更不要說(shuō)維護(hù)DTD 自身的復(fù)雜性了。
8.5.11 混合內(nèi)容
讀者可能已經(jīng)注意到了,在以前的多數(shù)例子中,元素或者包含子元素,或者包含可析的字符數(shù)據(jù),但不能同時(shí)包含兩者。唯
一的例外是以前例子中的一些基本元素。在這些例子中,全部標(biāo)記的列表還沒(méi)有完成。由于基本元素可以包含ANY 數(shù)據(jù),因
而就既可以包含子元素又可以包含原始文本。
可以聲明同時(shí)包含子元素和可析字符數(shù)據(jù)的標(biāo)記。這就叫做混合內(nèi)容。這樣就可以給每個(gè)TEAM 后面加上任意的文本塊。例
如:
<!ELEMENT TEAM (#PCDATA | TEAM_CITY | TEAM_NAME | PLAYER)*>
帶有可析的字符數(shù)據(jù)的混合子元素會(huì)嚴(yán)重地限制文檔的結(jié)構(gòu)。特別是,只能指定可出現(xiàn)的子元素的名稱。不能限定它們出現(xiàn)
的順序,每個(gè)元素的出現(xiàn)次數(shù),或者它們是否出現(xiàn)。借助于DTD,利用下面的DTD 中的一部分可實(shí)現(xiàn)這一要求:
<!ELEMENT PARENT (#PCDATA | CHILD1 | CHILD2 | CHILD3 )* >
除了改變子元素?cái)?shù)目以外的其他事情都是不合法的。不能在包括#PCDATA 的元素聲明中使用逗號(hào)、問(wèn)號(hào)或加號(hào)。用豎線分隔
中國(guó)航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML實(shí)用大全(67)