曝光臺 注意防騙
網(wǎng)曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
</DIVISION>
</LEAGUE>
</SEASON>
表8-1 列出了本例中的元素及它們必須遵守的條件。每一元素都有它必須包含的元素、它可能包含的元素以及必須包含它的
元素。有些情況下,一個元素可能包含不止一個同一類型的子元素。SEASON 元素包含一個YEAR 和兩個LEAG UE 元素。一個
XML 實用大全
第 195 頁
DIVISION 通常包含不止一個TEAM 元素。較不明顯的是,一些擊球手在各場比賽中在指定的投球手和外場之間交替出現(xiàn)。這
樣,一個PLAYER 元素就可能有不止一個POSITION。在該表格中,要求的子元素的數(shù)目是通過在元素前加數(shù)字來指明的(如
2 LEAGUE),而多子元素的可能性是通過在元素名尾加(s)指明的,如PLAYER(s)。
清單8-4 遵守了這些條件。如果把兩個PLAYER 元素和一些TEAM 元素省略,文檔可以短些。如果包括進其他一些PLAYER 元
素,文檔就會長些。但是其他元素的位置都不能變動。
XML 元素有兩種基本類型。簡單元素包含文本,也就是所謂的可析字符數(shù)據(jù),即上下文中的#PCDATA 或PCDATA。
復(fù)合元素包含其他元素,有的還包含文本和其他元素。標準XML 沒有整數(shù)、浮點、日期或其他數(shù)據(jù)類型。因而不能使用DTD
說明走步數(shù)一定是一個非負的整數(shù),或ERA 一定是0.0 和1.0 之間的一個浮點數(shù),盡管在如本例一樣的例子中這樣做是有用
的。有人做過努力來定義一種方案,以便使用XML 句法描述傳統(tǒng)上DTD 中編碼的信息以及數(shù)據(jù)類型信息。直到1999 年中期,
這些努力仍主要是理論上的,很少有實際的實現(xiàn)方式。
表格8-1 棒球統(tǒng)計中的元素
元素 必須包含的元素 可能包含的元素 必須包含它的元素
SEASON YEAR 2 LEAGUE
YEAR 文本 SEASON
LEAGUE
LEAGUE_NAME,
3 DIVISION
SEASON
LEAGUE_NAME 文本 LEAGUE
DIVISION
DIVISION_NAME,
TEAM
TEAM(s) LEAGUE
DIVISION_NAME 文本 DIVISION
TEAM
TEAM_CITY,
TEAM_NAME
PLAYER(s) DIVISION
TEAM_CITY 文本 TEAM
TEAM_NAME 文本 TEAM
XML 實用大全
第 196 頁
PLAYER SURNAME, GIVEN_NAME,
POSITION, GAMES
GAMES_STARTED, AT_BATS,RUNS,
HITS,
DOUBLES,TRIPLES,
HOME_RUNS, RBI,
STEALS,
CAUGHT_STEALING,
SACRIFICE_HITS,
SACRIFICE_FLIES,
ERRORS, WALKS,
STRUCK_OUT,
HIT_BY_PITCH,
COMPLETE_GAMES, SHUT_OUTS,
ERA, INNINGS,
HIT_BATTER,
WILD_PITCHES, BALK,
WALKED_BATTER,
STRUCK_OUT_BATTER
TEAM
SURNAME 文本 PLAYER
GIVEN_NAME 文本 PLAYER
POSITION 文本 PLAYER
GAMES 文本 PLAYER
GAMES_STARTED 文本 PLAYER
AT_BATS 文本 PLAYER
RUNS 文本 PLAYER
HITS 文本 PLAYER
DOUBLES 文本 PLAYER
TRIPLES 文本 PLAYER
HOME_RUNS 文本 PLAYER
RBI 文本 PLAYER
STEALS 文本 PLAYER
CAUGHT_STEALING 文本 PLAYER
SACRIFICE_HITS 文本 PLAYER
SACRIFICE_FLIES 文本 PLAYER
ERRORS 文本 PLAYER
WALKS 文本 PLAYER
STRUCK_OUT 文本 PLAYER
HIT_BY_PITCH 文本 PLAYER
COMPLETE_GAMES 文本 PLAYER
SHUT_OUTS 文本 PLAYER
ERA 文本 PLAYER
INNINGS 文本 PLAYER
HOME_RUNS_AGAINST 文本 PLAYER
XML 實用大全
第 197 頁
RUNS_AGAINST 文本 PLAYER
HIT_BATTER 文本 PLAYER
WILD_PITCHES 文本 PLAYER
BATTER 文本 PLAYER
STRUCK_OUT_BATTER 文本 PLAYER
既然已經(jīng)標識了要存儲的數(shù)據(jù),以及這些元素間可選的和必然的關(guān)系,就可以為簡明概括那些聯(lián)系的文檔建立DTD 了。
從一個DTD 剪切和粘貼到另一個往往是很可行和方便的。許多元素可以在其他上下文中再使用。例如,對TEAM 的描寫同樣
可應(yīng)用于足球、曲棍球和很多其他在隊間進行的運動。
可以把一個DTD 包括在另一個之內(nèi),這樣文檔就可以從兩個DTD 中得到標記。例如,可以使用一份詳細地描寫單個隊員的統(tǒng)
計數(shù)據(jù)的DTD 然后把該DTD 嵌套在更廣泛的球隊運動的DTD 內(nèi)。如想從棒球轉(zhuǎn)換到足球,只要簡單地把棒球球員DTD 換為足
球球員DTD 就可以了。
為達到此目的,包含DTD 的文檔就被定義為外部實體。外部參數(shù)實體引用將在第9 章“實體”中討論。
XML 實用大全
第 198 頁
8.5 元素聲明
在合法的XML 文檔中使用的每項標記都要在DTD 中的元素聲明中加以聲明。一項元素聲明指明了元素名稱和元素可能的內(nèi)容。
內(nèi)容清單有時稱為內(nèi)容規(guī)格。內(nèi)容規(guī)格使用一種簡單的語法精確地指明文檔中允許什么和不允許什么。這聽起來復(fù)雜,卻只
需在元素名稱上加上如*、?或+的標點以便指明它可能出現(xiàn)不止一次,可能出現(xiàn)或可能不出現(xiàn),或必須出現(xiàn)至少一次。
DTD 很保守,沒有明確允許的就是禁止的。然而,DTD 句法使您能夠嚴格地區(qū)分那些用語句很難說清的關(guān)系。例如,DTD 很
容易地說明GIVEN_NAME 要在SURNAME 前,而SURNAME 必須放在POSITION 前,POSITION 要放在GAME 前,GAME 要放在
GAMES_STARTED 前,GAMES_STARTED 要放在AT_BATS 前,AT_BATS 要放在RUNS 前,RUNS 要在HITS 前,所有這些只能出現(xiàn)在
一個PLAYER 元素內(nèi)。
從外到內(nèi),逐級建立DTD 是最容易的。這使您能在建立DTD 的同時建立一份樣本文檔來驗證DTD 本身是合法的和真正地描述
您想要的格式。
8.5.1 ANY
要做的第一件事是標識基本元素。在棒球的例子中,SEASON 是基本元素。!DOCTYPE 聲明指明了這一點:
<!DOCTYPE SEASON [
]>
但是,這僅僅是說基本標記是SEASON,而沒有提到元素能或不能包含的內(nèi)容,這就是為什么接下來要在元素聲明中聲明
SEASON 元素。這可通過下列一行代碼來實現(xiàn):
<!ELEMENT SEASON ANY>
中國航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML實用大全(61)