曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
</TEAM>
</DIVISION>
<DIVISION NAME=" West" >
<TEAM CITY=" Oakland" NAME=" Athletics" >
</TEAM>
</DIVISION>
XML 實用大全
第 312 頁
</LEAGUE>
</SEASON>
為了此文檔的合法性和結構的完整性,就需要提供DTD。該DTD 中必須聲明清單10-4 中使用的所有元素和屬性。元素的聲
明與舊版類似,只是由于大部分信息被轉移到屬性中的緣故,顯得更為簡短:
<!ELEMENT SEASON (LEAGUE, LEAGUE)>
<!ELEMENT LEAGUE (DIVISION, DIVISION, DIVISION)>
<!ELEMENT DIVISION (TEAM+)>
<!ELEMENT TEAM (PLAYER*)>
<!ELEMENT PLAYER EMPTY>
10.7.1 在DTD 中聲明SEASON 的屬性
SEASON 擁有單一的屬性YEAR。盡管有些語義上的限定,規定什么是,而什么不是一個年份(1998 是年份,March 31 就不是);
DTD 不進行這種限定。因此,最好的方法就是聲明YEAR 屬性具有最通用的屬性類型CDATA;另外,希望每個賽季都具有年份
值(year),就可使YEAR 屬性為REQUIRED 類型。
<!ATTLIST SEASON YEAR CDATA #REQUIRED>
盡管確實無法限制作者輸入YEAR 屬性文本的格式,但是至少可以提供一個記號,表明可以接受何種格式的文本。例如,規
定年份(year)需要四位數的格式就不失為一個好主意。
<!ATTLIST SEASON YEAR CDATA #REQUIRED> <!--e.g. 1998 -->
<!--DO NOT USE TWO DIGIT YEARS like 98, 99, 00!! -->
10.7.2 在DTD 中聲明DIVISION 和LEAGUE 屬性
接下來考慮DIVISION 和LEAGUE 元素。它們都具有單一的NAME 屬性。此外自然具有CDATA 和REQUIRED 屬性類型。因為兩個
不同的元素具有兩個相互獨立的NAME 屬性,所以需要兩個獨立的<!ATTLIST>聲明。
<!ATTLIST LEAGUE NAME CDATA #REQUIRED>
<!ATTLIST DIVISION NAME CDATA #REQUIRED>
在這里添加注釋可以有助于表明作者期望的格式;例如是否包括單詞League 和Division 作為名字的一部分。
<!ATTLIST LEAGUE NAME CDATA #REQUIRED>
<!--e.g. "Nation l League" -->
<!ATTLIST DIVISION NAME CDATA #REQUIRED>
XML 實用大全
第 313 頁
<!--e.g. "East" -->
10.7.3 在DTD 中聲明TEAM 屬性
TEAM 元素具有NAME 和CITY 屬性,兩個屬性均為CDATA 和REQUIRED 類型。
<!ATTLIST TEAM NAME CDATA #REQUIRED>
<!ATTLIST TEAM CITY CDATA #REQUIRED>
添加注釋有助于建立某些并不明顯的東西,例如,在一些情況下,CITY 屬性實際上可以是某個州名:
<!ATTLIST TEAM CITY CDATA #REQUIRED>
<!--e.g. "San Diego" as in "San Diego Padres"
or "Texas" as in "Texas Rangers" -->
換一種方式,可以在一個簡單的<!ATTLIST>中聲明這兩個屬性。
<!ATTLIST TEAM NAME CDATA #REQUIRED
CITY CDATA #REQUIRED>
10.7.4 在DTD 中聲明PLAYER 的屬性
PLAYER 元素可以說是包含了大部分屬性類型。首先是GIVEN_NAME 和SURNAME 兩個屬性,均為簡單的CDATA、REQUIRED 類型。
<!ATTLIST PLAYER GIVEN_NAME CDATA #REQUIRED>
<!ATTLIST PLAYER SURNAME CDATA #REQUIRED>
下一個PLAYER 屬性是POSITION。因為棒球場上球員的位置是一個相當基本的數據,在這里可使用枚舉屬性類型。可是“First
Base”、“Second Base”、“Third Base”、“Starting Pitcher”和“Relief Pitcher”都包含有空格,因此它們都不
是有效的XML 名稱字。因此僅能使用CDATA 屬性類型。實際情況下沒有任何理由為POSITION 選定缺省值,所以該屬性應為
REQUIRED 類型。
<!ATTLIST PLAYER POSITION CDATA #REQUIRED>
接下來的是各種各樣的統計數據:GAMES、GAMES_STARTED、AT_BAT、RUNS、HITS、WINS、LOSSES、SAVES、SHUTOUTS 等等。
上述每一個屬性本應為數字類型,但是因為XML 不提供數字類型機制,所以把它們簡單地聲明為CDATA 類型。因為不是每一
個球員都具有如上的每一個統計數據值,所以把上述各屬性聲明為IMPLIED 類型,而不是REQUIRED 類型。
<!ATTLIST PLAYER GAMES CDATA #IMPLIED>
<!ATTLIST PLAYER GAMES_STARTED CDATA #IMPLIED>
<!-Batting Statistics ->
XML 實用大全
第 314 頁
<!ATTLIST PLAYER AT_BATS CDATA #IMPLIED>
<!ATTLIST PLAYER RUNS CDATA #IMPLIED>
<!ATTLIST PLAYER HITS CDATA #IMPLIED>
<!ATTLIST PLAYER DOUBLES CDATA #IMPLIED>
<!ATTLIST PLAYER TRIPLES CDATA #IMPLIED>
<!ATTLIST PLAYER HOME_RUNS CDATA #IMPLIED>
<!ATTLIST PLAYER RBI CDATA #IMPLIED>
<!ATTLIST PLAYER STEALS CDATA #IMPLIED>
<!ATTLIST PLAYER CAUGHT_STEALING CDATA #IMPLIED>
<!ATTLIST PLAYER SACRIFICE_HITS CDATA #IMPLIED>
<!ATTLIST PLAYER SACRIFICE_FLIES CDATA #IMPLIED>
<!ATTLIST PLAYER ERRORS CDATA #IMPLIED>
<!ATTLIST PLAYER WALKS CDATA #IMPLIED>
<!ATTLIST PLAYER STRUCK_OUT CDATA #IMPLIED>
<!ATTLIST PLAYER HIT_BY_PITCH CDATA #IMPLIED>
<!-Pitching Statistics ->
<!ATTLIST PLAYER WINS CDATA #IMPLIED>
<!ATTLIST PLAYER LOSSES CDATA #IMPLIED>
<!ATTLIST PLAYER SAVES CDATA #IMPLIED>
<!ATTLIST PLAYER COMPLETE_GAMES CDATA #IMPLIED>
<!ATTLIST PLAYER SHUTOUTS CDATA #IMPLIED>
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML實用大全(91)