曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
日歷)。
在DTD 中聲明記號,并且用記號屬性描述嵌入XML 文檔中的非XML 數據的格式。接著再研究日期的例子,清單11-1 定義兩
種日期記號:ISO 8601 和美國慣用格式。然后將NOTATION 類型必需的FORMAT 屬性添加到每一個DATE 元素中,用來描述特
定元素的結構。
清單11-1:ISO 8601 和美國慣用格式DATE 元素
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE SCHEDULE [
<!NOTATION ISODATE SYSTEM
"http://www.iso.ch/cate/d15903.html">
<!NOTATION USDATE SYSTEM
"http://es.rice.edu/ES/humsoc/Galileo/Things/gregorian_calendar
.html">
<!ELEMENT SCHEDULE (APPOINTMENT*)>
<!ELEMENT APPOINTMENT (NOTE, DATE, TIME?)>
<!ELEMENT NOTE (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT TIME (#PCDATA)>
<!ATTLIST DATE FORMAT NOTATION (ISODATE | USDATE) #IMPLIED>
]>
<SCHEDULE>
<APPOINTMENT>
<NOTE>Deliver presents</NOTE>
<DATE FORMAT="ISDATE">12-25-1999</DATE>
</APPOINTMENT>
<APPOINTMENT>
XML 實用大全
第 324 頁
<NOTE>Party like it s 1999</NOTE>
<DATE FORMAT="ISODATE">19991231</DATE>
</APPOINTMENT>
</SCHEDULE>
記號不能強制作者使用記號描述的格式。因此需要提供除XML 基本方法以外的幾種語言方案——但是在相信作者能正確描述
日期的簡單應用場合,記號方法是有效的。
XML 實用大全
第 325 頁
11.2 不可析外部實體
對所有的數據,特別是非文本數據,XML 格式都不是理想的格式。例如,可以按下面所示的方式,把位圖圖像的每一個像素
存為一個XML 元素:
<PIXEL X="32"Y="28" COLOR="FF5E32"/>
可是,這肯定不是一個好主意。任何微小的錯誤都會導致氣球圖像文件的比例嚴重失衡。XML 現在和將來都永遠不可能讓XML
文檔具有訪問數據的能力,因此無法把所有數據按XML 編碼。
一個典型的Web 頁面可以引用GIF 和JPEG 圖像、JAVA 小程序、ActiveX 控件、各種類型的聲音等等。在XML 中,因為XML
處理器不會去嘗試理解非XML 格式的數據塊,所以把這些數據塊稱為不可析實體。至多XML 處理器通知應用程序存在這樣的
實體,并且為應用程序提供實體名和實體可能包含的內容(可是這并不是必須執行的動作)。
HTML 頁面通過各種定制的標記嵌入非HTML 實體。圖片由具有SRC 屬性的<IMG>標記引用,SRC 屬性提供圖像文件的URL;JAVA
程序由具有CLASS 和CODEBASE 屬性的<APPLET>標記包括,CLASS 和CODEBASE 屬性指向JAVA 程序保存的文件和目錄;<OBJECT>
標記來嵌入CODEBASE 屬性引用,可從中找到目標數據的URI。每一種情況下,特定的預定義標記表示一種特定的內容。預
定義屬性包含其內容的URL。
XML 應用程序可以但不是必須這樣運作,實際上,除了特意為保持與落后的HTML 之間的兼容性之外,大部分XML 應用程序
都不這樣做。相反,XML 應用程序使用不可析外部實體引用這些內容。不可析外部實體提供與非XML 數據的實際位置的鏈接。
接著文檔中特定的元素利用其ENTITY 屬性與實體相連。
11.2.1 聲明不可析實體
回憶第9 章的內容,外部實體的聲明看起來如下面的形式:
<!ENTITY SIG SYSTEM "http://metalab.unc.edu/xml/signature.xml">
可是,僅在URL 指明的外部實體恰好為完整的XML 文檔的時候,才能接受這種格式。如果外部實體不是XML,則不得不使用
NDATA 關鍵字指定實體類型。例如,為了用LOGO 名字連接GIF 格式文件logo.gif,就需在DTD 中放置如下的ENTITY 聲明:
<!ENTITY LOGO SYSTEM "logo.gif" NDATA GIF>
聲明中的最終名字必須是DTD 中聲明的記號名,如本例中的GIF。記號將GIF 類的名稱與某種類型的外部標識符聯系起來,
外部標識符標識某種格式。如MIME 類型、ISO 標準式或者是格式規格的URL。例如,GIF 的記號類似下面的形式:
<!NOTATION GIF SYSTEM "image/gif">
通常,作為習慣的表示方法,可以使用絕對或相對的URL 指向外部實體。例如:
<!ENTITY LOGO SYSTEM "http://metalab.unc.edu/xml/logo.gif"
NDATA GIF>
<!ENTITY LOGO SYSTEM "/xml/logo.gif" NDATA GIF>
XML 實用大全
第 326 頁
<!ENTITY LOGO SYSTEM "../logo.gif" NDATA GIF>
11.2.2 嵌入不可析實體
不能與用通用實體引用嵌入可析實體一樣,在文檔中的任意位置簡單地嵌入不可析實體。例如,清單11-2 就是一個不合法
的是XML 文檔,因為LOGO 是不可析實體。如果這里的LOGO 是可析實體,本例就為有效的XML 文檔。
清單11-2:試圖用通用實體引用嵌入不可析實體的無效XML 文檔
<?xml version="1.0" standalone="no"?>
<!DOCTYPE DOCUMENT [
<!ELEMENT DOCUMENT ANY>
<!ENTITY LOGO SYSTEM "http://metalab.unc.edu/xml/logo.gif"
NDATA GIF>
<!NOTATION GIF SYSTEM "image/gif"
]>
<DOCUMENT>
&LOGO;
</DOCUMENT>
為了嵌入不可析實體,不采用如&LOGO;通用實體引用的方法;而是聲明一個元素,把該元素作為不可析實體的占位符(例
如IMAGE)。然后聲明IMAGE 元素屬性SOURCE 為ENTITY 類型,SOURCE 屬性僅提供不可析實體名。如清單11-3 所示。
清單11-3:正確嵌入不可析實體的合法的XML 文檔
<?xml version="1.0" standalone="no"?>
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML實用大全(94)