曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
圖書列表。
目錄元素不包含任何屬性。它在文檔中只有一個,因此沒有必要提供標識符。我們將對目
錄的討論分散到它所包含的其他對象中。
(2) 出版社
現在,讓我們來看看P u b l i s h e r(出版商)元素的定義:
上述定義對應于我們在前面看到的示意圖。P u b l i s h e r元素包含一個公司名稱,一個或多個地
址,若干印記,以及零個或多個作者。有些出版社為了簡單起見有時寧愿不要作者,但是在我
們的目錄中,無作者代表該書是匿名作者編寫的,或者作者過多,例如:會議的專題文集。
有一點需要特別注意, I m p r i n t s沒有設定元組數。這并不是疏忽。其他屬性都是在同一級列
出的,對于I m p r i n t s,我希望改變一下風格,通過元素集合來說明。P u b l i s h e r元素將包含由
I m p r i n t元素集構成的子元素。這種方式并不會影響元素的含義,它有利于應用程序的程序員理
解D T D。如果你希望忽略該元素,只需直接跳至下一元素。如果你對該元素感興趣,你可以利
用解析器檢查屬于I m p r i n t s元素的子元素的數量,由此得到印記數。
另外,P u b l i s h e r元素還有一個屬性i s b n:
P u b l i s h e r元素需要一個唯一的指示符,而公司名稱不能作為指示符。圖書的I S B N包含分配
給出版商的唯一數字。例如,Wr o x出版社的所有書的I S B N都包含序號1 8 6 1。我希望文檔的創作
者將整個I S B N中的這個片斷作為該屬性的值。
下面我們來介紹構成P u b l i s h e r元素的子元素:
程序清單3 - 1 7
以上代碼應該與你想象的差不多。大多數元素都是# P C D ATA類型的。
本節最后給出了圖書目錄DTD的完整代碼。
I m p r i n t s元素是由一個或多個I m p r i n t元素構成的,如前所述, I m p r i n t元素是# P C D ATA類型
的。A u t h o r元素看上去略微混亂一些,但是在分析其內容模型之前,我們還要進一步說明一下
第3章文檔類型定義使用73 下載
A d d r e s s和I m p r i n t元素的屬性:
由于出版社可能有多處辦公地點,因此要將總部和分公司區分開。在此,我使用簡單的枚
舉類型,而且該屬性是可選的。關鍵字# I M P L I E D表示文檔的作者可以忽略該屬性,同時不會影
響文檔的有效性。如果元素包含該屬性,它的值必須是y e s或n o。
現在讓我們來研究I m p r i n t元素的屬性列表。由于該元素的內容為# P C D ATA,因此I m p r i n t的
名稱的長度不受限制。我需要將圖書與印記相關聯,所以我希望有個較短的關鍵字。這就是
s h o r t I m p r i n t N a m e屬性的作用。此后, Our Incredibly Wonderful Children's Book Division可以縮
寫為I n c r e d C h i l d。我們同樣沒有限制該屬性的長度。實際上, D T D語法并未提供控制字符串長
度的設置。
與字符串長度問題相比,如何使用I D類型的屬性更加重要。如果文檔中出現該屬性,它就
作為唯一的關鍵字,可以被文檔中的其他元素引用。在我們的例子中,我們知道該屬性將被
B o o k元素引用,但是D T D并不提供顯式的聲明機制。
讓我們回到A u t h o r元素,以下是A u t h o r及其子元素的聲明:
程序清單3 - 1 8
A u t h o r的子元素相對來說比較通俗,它包含的文本信息你可想而知。我們提供了名稱和個人
簡歷信息。該元素的關鍵在于它的屬性。A u t h o r元素的a u t h o r C i t e I D屬性是元素的簡短引用,它
的作用與I m p r i n t元素的s h o r t I m p r i n t N a m e屬性類似。它是一個I D類型的屬性,用于將作者與一本
或多本書相關聯。
P o r t r a i t元素用于將作者的照片與作者的文字信息相關聯。由于X M L標記中不能包含二進制
數據,因此需要借助鏈接機制。我們不能使用實體取代鏈接,因為在一份很長的目錄清單中,
會出現許多作者和相應的圖像文件,當創建文檔時它們大多數都是動態命名的。X M L委員會針
對鏈接提出了許多方法,但是都未形成正式的建議規范,而且幾乎未得到解析器廠商的支持。
為了簡單起見,我們還是暫時不提X L i n k或X P o i n t e r的語法為好,我將圖像文件的U R L作為
p i c L i n k屬性的值。然而,我們的應用程序無論如何都需要支持某種鏈接機制。如果讀取目錄文
檔的應用程序使用瀏覽器,我們可以為瀏覽器生成包含I M G標記的H T M L文件。在這類應用程序
中,p i c L i n k的值將成為I M G標記的S R C屬性的值。如果使用文檔的應用程序不具備可視化的界
面,它只需忽略該屬性。
74使用XML 高級編程
下載
你是否曾經考慮過使用表示法?由于我不希望限制應用程序使用D T D的行為,因此放棄
了這種方法。如果沒有提供針對特殊類型的處理程序,表示法只是給數據類型定義了一
個名稱。如果我指定了處理程序,就必須保證任何使用目錄文檔的應用程序有特定的行
為,例如:顯示鏈接。而我的設計目標是無論應用程序是否有可視化的界面, D T D都應
該發揮同樣的作用。
(3) 線索
我們已經完整而詳細地分析了P u b l i s h e r元素的內容。在C a t a l o g內容模型中,下一個對象是
T h r e a d。以下是該元素的聲明:
元素的內容是用于描述線索的文本。它可能是關鍵字列表(例如:對于Wr o x出版社來說,
元素的內容可能是A S P、D a t a b a s e、X M L、S c r i p t i n g等),或者更長的描述。屬性t h r e a d I D用于在
圖書與線索之間建立關聯。
(4) 圖書
下面我們將討論最后一個元素—B o o k。它是D T D的核心。我們介紹問題模型時曾經給出
了圖書對象的示意圖,元素的聲明完全是按照該圖產生的:
Ti t l e元素和A b s t r a c t元素是# P C D ATA類型的。R e c S u b j C a t e g o r i e s元素的聲明如下:
C a t e g o r y是# P C D ATA類型的。我們曾經說過,每本書都有三個推薦的主題域。實際上,每
本書有且僅有三個主題域。最簡單的表示方法是利用D T D提供的元組工具,將內容模型說明為
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(31)