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