曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
每個元素只能在其<!ELEMENT>內聲明一次,即使它以其他<!ELEMENT>聲明的子元素出現也一樣。這里,我把LEAGUE_NAME
聲明放在引用它的LEAGUE 聲明之后,這沒有關系。XML 允許這一類提前引用。只要聲明全部包含在DTD 中,元素標記出現
的順序無關緊要。
可以向文檔中添加這兩項聲明,然后在SEASON 元素中包括LEAGUE 和LEAGUE_NAME 元素。如清單8-8 所示。圖8-8 是顯示出
來的文檔。
清單8-8:有兩個LEAGUE 子元素的SEASON 元素
<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/css" href="greeting.css"?>
<!DOCTYPE SEASON [
<!ELEMENT YEAR (#PCDATA)>
<!ELEMENT LEAGUE (LEAGUE_NAME)>
<!ELEMENT LEAGUE_NAME (#PCDATA)>
XML 實用大全
第 203 頁
<!ELEMENT SEASON ANY>
]>
<SEASON>
<YEAR>1998</YEAR>
<LEAGUE>
<LEAGUE_NAME>American League</LEAGUE_NAME>
</LEAGUE>
<LEAGUE>
<LEAGUE_NAME>National League</LEAGUE_NAME>
</LEAGUE>
</SEASON>
圖8-8 包含樣式單、YEAR 元素和兩個LEAGUE 子元素的合法的文檔
8.5.4 序列
讓我們限制一下SEASON 元素。一個SEASON 元素包含正好一個YEAR 元素和其后的兩個LEAGUE 子元素。不把SEASON 元素聲
明為可以包含ANY 元素,我們在SEASON 元素聲明中包括這三個子元素,用括號括起來并用逗號分隔開,如下所示:
<!ELEMENT SEASON (YEAR, LEAGUE, LEAGUE)>
XML 實用大全
第 204 頁
用逗號隔開的一系列子元素稱為一個序列。利用這一聲明,每個合法的SEASON 元素必須包含正好一個YEAR 元素,后面正好
是兩個LEAGUE 元素,沒有別的。整個文檔類型定義現在看上去是下面的樣子:
<!DOCTYPE SEASON [
<!ELEMENT YEAR (#PCDATA)>
<!ELEMENT LEAGUE (LEAGUE_NAME)>
<!ELEMENT LEAGUE_NAME (#PCDATA)>
<!ELEMENT SEASON (YEAR, LEAGUE, LEAGUE)>
]>
清單8-8 所列的文檔部分確實符合這項DTD 的規定,因為它的SEASON 元素包含一個YEAR 子元素,后接兩個LEAGUE 子元素,
再沒有別的。但是,如果文檔只包括一個SEASON 元素,那么這個文檔盡管結構完整,也將是非法的。同樣,如果LEAGUE
在YEAR 之前而不是在其后,或者如果LEAGUE 有YEAR 子元素,或者文檔在其他任何方面不符合DTD,那么文檔就是不合法
的,合法性檢查程序將拒絕這樣的文檔。
可直接將此種技術推廣到DIVISION 元素。每個LEAGUE 有一個LEAGUE_NAME 和三個DIVISION 子元素。例如:
<!ELEMENT LEAGUE (LEAGUE_NAME, DIVISION, DIVISION, DIVISION)>
8.5.5 一個或多個子元素
每個DIVISION 有一個DIVISION_NAME 和四到六個TEAM 子元素。指定DIVISION_NAME 很容易,方法如下:
<!ELEMENT DIVISION (DIVISION_NAME)>
<!ELEMENT DIVISION_NAME (#PCDATA)>
但是,TEAM 子元素就很棘手。指明DIVISION 元素有四個TEAM 子元素很容易,如下所示:
<!ELEMENT DIVISION (DIVISION_NAME, TEAM, TEAM, TEAM, TEAM)>
五個和六個也不難。但是您怎樣說明有四到六個TEAM 子元素呢?實際上,XML 沒有提供實現的簡單方法。但是可以在子元
素清單的元素名后放一個加號(+)來說明有一個或多個子元素,例如:
<!ELEMENT DIVISION (DIVISION_NAME, TEAM+)>
這就是說一個DIVISION 元素必須包含一個DIVISION_NAME 子元素,后接一個或多個TEAM 子元素。
說明DIVISION 元素有四到六個TEAM 元素,而不是三到七個,這就難了。由于非常復雜,實際上很少有人使用。
當讀完本章時,看一看您是否已經想出怎樣做了。
XML 實用大全
第 205 頁
8.5.6 零或多個子元素
每個TEAM 要包含一個TEAM_CITY,一個TEAM_NAME 和不確定數目的PLAYER 元素。實際上,棒球隊至少要九名球員。但是,
本書的很多例子中由于篇幅的原因而沒有列出球員。因而,我們要指明一個TEAM 元素可包含零或多個PLAYER 子元素。在子
元素清單中在元素名上附加一個星號(*)來實現這一目的。例如:
<!ELEMENT TEAM (TEAM_CITY, TEAM_NAME, PLAYER*)>
<!ELEMENT TEAM_CITY (#PCDATA)>
<!ELEMENT TEAM_NAME (#PCDATA)>
8.5.7 零或一個子元素
文檔中出現的最后的元素是PLAYER 子元素。它們全部是只包含文本的簡單元素。下面是它們的聲明:
<!ELEMENT SURNAME (#PCDATA)>
<!ELEMENT GIVEN_NAME (#PCDATA)>
<!ELEMENT POSITION (#PCDATA)>
<!ELEMENT GAMES (#PCDATA)>
<!ELEMENT GAMES_STARTED (#PCDATA)>
<!ELEMENT AT_BATS (#PCDATA)>
<!ELEMENT RUNS (#PCDATA)>
<!ELEMENT HITS (#PCDATA)>
<!ELEMENT DOUBLES (#PCDATA)>
<!ELEMENT TRIPLES (#PCDATA)>
<!ELEMENT HOME_RUNS (#PCDATA)>
<!ELEMENT RBI (#PCDATA)>
<!ELEMENT STEALS (#PCDATA)>
<!ELEMENT CAUGHT_STEALING (#PCDATA)>
<!ELEMENT SACRIFICE_ HITS (#PCDATA)>
<!ELEMENT SACRIFICE_FLIES (#PCDATA)>
XML 實用大全
第 206 頁
<!ELEMENT ERRORS (#PCDATA)>
<!ELEMENT WALKS (#PCDATA)>
<!ELEMENT STRUCK_OUT (#PCDATA)>
<!ELEMENT HIT_BY_PITCH (#PCDATA)>
<!ELEMENT COMPLETE_GAMES (#PCDATA)>
<!ELEMENT SHUT_OUTS (#PCDATA)>
<!ELEMENT ERA (#PCDATA)>
<!ELEMENT INNINGS (#PCDATA)>
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML實用大全(63)