曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
(3) 復合類型定義
這些是XML 模式里重要的結構。沒有它們,將不能組成重要的元素內容模型。< t y p e >元素包
含在一個復合的類型定義里。嵌套在里面,我們聲明了元素和屬性,或者對模型組的引用。例如:
程序清單7 - 1 5
復合類型定義可能變得非常棘手。在學習了怎樣去聲明屬性和元素之前,這些非常難以理
解。在我們向前走時你把注意力放在看到的< t y p e >元素上,然后你將會明白我的意思。
(4) 屬性與屬性組
屬性聲明由< a t t r i b u t e >元素組成,而< a t t r i b u t e >元素至少包含一個n a m e屬性。< a t t r i b u t e >元素也有
可選的c a r d i n a l i t y屬性:m i n O c c u r s和m a x O c c u r s,它可用來指出屬性是否顯示,以及如果是,經常怎
樣顯示。一個t y p e屬性指明了屬性的數據類型,比如說字符串或整型。一個屬性聲明可能是d e f a u l t和
f i x e d屬性。這些更像D T D里的關鍵字I M P L I E D和F I X E D。f i x e d屬性的值是必須經常有的值。d e f a u l t
屬性的值是假如屬性沒有明確地在X M L文檔元素里出現時的值。這里有屬性聲明的幾個例子:
我們經常遇到一組相關的屬性,它們在一個模式里應用于多元素聲明。XML 模式結構為這
些提供屬性組的想法。這是一個命名的屬性聲明的集合:
程序清單7 - 1 6
212使用XML 高級編程
下載
這里我們聲明了t r o o p P a r a m e t e r s屬性組,然后在o ff i c e r P a r m s類型定義里使用了它。
(5) 內容模型
我們不想在沒有內容模型時進展得太遠,并且
XML 模式提供了比D T D更準確的描述內容模型的機
制。它們使用復合類型定義和一個新的結構,
< g r o u p >元素,去建立元素聲明的內部內容。
我們現在需要類型元素的另一個屬性—c o n t e n t
屬性(參見表7 - 1)。c o n t e n t屬性告訴我們哪種元素能
被包含(盡管它沒指出有關許可的屬性的任何內容):
例如:
程序清單7 - 1 7
當我們接觸到只含有元素的內容時,事情變得更加有趣。現在需要一些內容操作者—模
式草圖里術語稱為排序,去演示怎樣排列內容。這些排序是< g r o u p >元素o r d e r屬性的值。這個新
元素給了我們一種方法去提供聲明里有序的元素實體。排序顯示在表7 - 2中。
表7 - 2
排序關鍵字含義D T D等價物
s e q 元素必須按準確的順序排序,(逗號)
c h o i c e 模型元素之一準確地出現|(管道符號)
(6) 元素聲明
這里我們能立即看到X M L怎樣用來在X M L應用里生成模式語法,在那里我們必須使用
< ! E L E M E N T語法去在一個D T D里聲明一個< B o o k >元素,現在將元素聲明放在X M L元素里,于
是我們使用:
這里< e l e m e n t / >元素用來聲明一個元素(這個元素描述它的內容為了保持與自我描述數據的
一致性)。n a m e屬性簡單擁有一個我們正在生成的元素的值。
簡單元素由數據類型和一系列屬性聲明的引用或一個屬性組的引用組成。這與D T D的這種
第7章命名空間和模式使用213 下載
表7 - 1
內容屬性值含義
u n c o n s t r a i n e d 任何類型的內容
e m p t y 空元素
m i x e d 元素和字符數據
聲明類似:除了內容被賦了類型,元素只包含P C D ATA。比如:
這些將符合:
當然,這里將沒有D T D那里的字符串和浮點數值類型的概念。當我們想要用結構定義一個
元素,用一個內容模型替代這個數據類型引用。讓我們將這個放在一旁,然后看怎樣通過在其
他聲明添加引用來建立一個元素聲明。為這個簡單的X M L片段說明一下模式:
程序清單7 - 1 8
這里是需要的元素聲明:
程序清單7 - 1 9
這些已經足夠簡單了。F i r s t,M I和L a s t是字符串。注意,我已經將M I字符串轉化成了合適
的長中間大寫字母,比如像O ' M或A . G。現在我們將要把它們包裹在一起成復合元素< N a m e >。
例子通常是學習的最好方法,這里有一些例子以及它們的D T D等價物:
程序清單7 - 2 0
214使用XML 高級編程
下載
現在,我們希望能夠描述元素內容的多發性問題。為了做到這個,我們使用元素引用上的
m i n O c c u r s和m a x O c c u r s屬性。當接觸了模型組一段時間之后,將看到我們能同樣在那里應用這
些屬性,以建立更多復雜的內容模型。
(7) 模型組
一些其他的模式結構允許建立定義塊和聲明塊。正如我們已經看到的,可以在特殊的類型
里擁有一個下面我們能夠給它命名的模型組。這個結構使我們能夠建立復雜內容模型,與此同
時,我們能夠引用命名模型組去建立元素內容模型一些部分,以通過將一個名字放入模型組再
利用類型和元素聲明,而且允許我們在別的地方引用它。這里是一些例子:
程序清單7 - 2 1
在這個模型里,每一個文檔將以A B序列開始。這至少出現一次,或許兩次,我們能選擇C
或D,并做三至七次這種選擇。最后,我們將所有元素以任意的順序恢復過來。下面將是一個合
法的與這個內容模型一致的文檔片段。
也可以將組套入組成復合內容模型,例如:
程序清單7 - 2 2
第7章命名空間和模式使用215 下載
相應地對于一些元素< f o o >的D T D內容模型是:
現在考慮如果我們能通過名稱查閱內容模型組,怎樣能使用它們:
程序清單7 - 2 3
在下面的例子里,定義了一個內容模型,然后將它合并到一個元素聲明里。連接這些結構
使模式設計者靈活、有效地重用和指定詞匯表規范。
程序清單7 - 2 4
這是第一個例子的變體。我沒有在< e l e m e n t >里建立屬性聲明,而是創建了一個包含聲明的
屬性組,然后利用元素組和屬性組的規范創建元素聲明。這是使用屬性組的另一個方法。
程序清單7 - 2 5
216使用XML 高級編程
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(78)