曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
的元素和#PCDATA 的列表是合法的。其他用法是不合法的。例如,下面的例子就不合法:
<!ELEMENT TEAM (TEAM_CITY, TEAM_NAME, PLAYER*, #PCDATA)>
使用混合內容的最基本的理由是,當將老式的文本數據轉換成XML 的過程中,隨著新標記的增加逐步測試DTD 的合法性,而
不要在完成全部轉換后再試圖去發現錯誤。這是一個很好的技巧,我建議大家都這樣做,畢竟從剛完成的代碼中立即找出錯
誤比幾小時后要容易一些。但是,這僅僅是開發時的一個技巧。最終的用戶是不應該看到這些的。當DTD 完成后不能把子元
素同可析的字符數據混合起來。一般總可以建立一個包括可析的字符數據的新標記。
例如,可以聲明只包含#PCDATA 數據的BLURB 元素并把它增加為TEAM 的最后一個子元素,這樣就在每個TEAM 元素的末尾包
括一個文本塊。下面是該聲明:
<!ELEMENT TEAM (TEAM_CITY, TEAM_NAME, PLAYER*, BLURB)>
<!ELEMENT BLURB (#PCDATA)>
這對文檔的文本改變不大。所有的變化只是向每個TEAM 元素增加了一個或多個帶有開始標記和結束標記的可選元素。但是
這就使文檔更加健全。而且,從XML 程序接收到文檔樹的XML 應用程序就能在更短的時間內處理數據,因為文檔具有非混合
內容所允許的更為結構化的格式。
8.5.12 空元素
前面討論過,定義一個沒有內容的元素有時是有用的。HTML 中的例子包括圖像、水平線和中斷<IMG>、<R>和<BR>。在XML
中,這類空元素是通過以/>結束的空標記來標識的,如<IMG/>、<HR/>和<BR/>。
XML 實用大全
第 223 頁
合法的文檔必須聲明使用的空元素和非空元素。因為按定義,空元素沒有子元素,聲明很容易。可像通常一樣使用包含空元
素名的<!ELEMENT>來聲明,但用關鍵詞EMPTY (像所有XML 標記一樣區分大小寫)代替了子元素的列表。例如:
<!ELEMENT BR EMPTY>
<!ELEMENT IMG EMPTY>
<!ELEMENT HR EMPTY>
清單8-11 是同時使用了空元素和非空元素的合法文檔。
清單8-11:使用了空標記的合法文檔
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE DOCUMENT [
<!ELEMENT DOCUMENT (TITLE,SIGNATURE)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT COPYRIGHT (#PCDATA)>
<!ELEMENT EMAIL (#PCDATA)>
<!ELEMENT BR EMPTY>
<!ELEMENT HR EMPTY>
<!ELEMENT LAST_MODIFIED (#PCDATA)>
<!ELEMENT SIGNATURE (HR, COPYRIGHT, BR, EMAIL,
BR, LAST_MODIFIED)>
]>
<DOCUMENT>
<TITLE>Empty Tags</TITLE>
<SIGNATURE>
<HR/>
<COPYRIGHT>1998 Elliotte Rusty Harold</COPYRIGHT><BR/>
<EMAIL>elharo@metalab.unc.edu</EMAIL><BR/>
XML 實用大全
第 224 頁
<LAST_MODIFIED>Thursday,April 22,1999</LAST_MODIFIED>
</SIGNATURE>
</DOCUMENT>
XML 實用大全
第 225 頁
8.6 DTD 中的注釋
像一份XML 文檔的其他部分一樣,DTD 也可以包含注釋。這些注釋不能在聲明中出現,但可以在聲明外出現。注釋通常用來
組織不同部分的DTD,為一些元素的許可內容提供說明,并對元素作進一步的解釋。例如,YEAR 元素的聲明可以有這樣的注
釋:
<!--A four digit year like 1998, 1999, or 2000 ?-->
<!ELEMENT YEAR (#PCDATA)>
像所有注釋一樣,這只是為了便于人們閱讀源代碼,XML 處理程序會忽略注釋部分。
注釋的一個可能用法是定義標記中用到的縮略語。例如,在本章及前些章中,我極力避免使用棒球術語的縮略語,因為對一
些人來說難以弄清楚。一種可能的途徑是使用縮略語但在DTD 中用注釋加以定義。清單8-12 同以前的棒球例子相似,但使
用了DTD 注釋和縮略標記。
清單8-12:使用縮略標記和DTD 注釋的合法XML 文檔
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE SEASON [
<!ELEMENT YEAR (#PCDATA)>
<!ELEMENT LEAGUE (LEAGUE_NAME, DIVISION, DIVISION, DIVISION)>
<!--American or National ?
<!ELEMENT LEAGUE_NAME (#PCDATA)>
<!--East , West , or Central ?
<!ELEMENT DIVISION_NAME (#PCDATA)>
<!ELEMENT DIVISION (DIVISION_NAME, TEAM+)>
<!ELEMENT SEASON (YEAR, LEAGUE, LEAGUE)>
<!ELEMENT TEAM (TEAM_CITY, TEAM_NAME, PLAYER*)>
<!ELEMENT TEAM_CITY (#PCDATA)>
<!ELEMENT TEAM_NAME (#PCDATA)>
<!ELEMENT PLAYER (GIVEN_NAME, SURNAME, P, G,
GS, AB?, R?, H?, D?, T?, HR?, RBI?, SB?, CS?,
XML 實用大全
第 226 頁
SH?, SF?, E?, BB?, S?, HBP?, CG?, SO?, ERA?, IP?,
HRA?, RA?, ER?, HB?, WP?, B?, WB?, K?)
>
<!--=======================-->
<!--Player Info-->
<!--Player’s last name-->
<!ELEMENT SURNAME (#PCDATA)>
<!--Player’s first name-->
<!ELEMENT GIVEN_NAME (#PCDATA)>
<!—Position-->
<!ELEMENT P (#PCDATA)>
<!--Games Played-->
<!ELEMENT G (#PCDATA)>
<!--Games Started-->
<!ELEMENT GS (#PCDATA)>
<!--=======================-->
<!--Batting Statistics-->
<!--At Bats-->
<!ELEMENT AB (#PCDATA)>
<!--Runs-->
<!ELEMENT R (#PCDATA)>
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML實用大全(68)