級別: 高級
Steve Speicher , 高級軟件工程師, IBM
Kevin E. Kelly , 高級軟件工程師, IBM
2005 年 10 月 27 日
從核心規范模式建立復合 XML Schema 配置文件。本系列包括兩部分,第 1 部分 探討了 XML Schema 的幾種擴展能力,比較了建立復合文檔格式(CDF)配置文件的不同方法。本文根據第 1 部分的分析,定義了使用 XML Schema 開(kāi)發(fā)混合名稱(chēng)空間配置文件的一種范型(pattern)。
在桌面和移動(dòng)設備平臺上,用戶(hù)對豐富 Web 應用程序內容的要求不斷增加。開(kāi)放的、基于標準的、支持豐富內容的功能性 XML 模式有助于保證這類(lèi)內容(以及生產(chǎn)這種內容的技術(shù))的普遍性、易用性和低成本。模式還有助于保證這種技術(shù)不會(huì )變成一家或少數幾家供應商的私有技術(shù),從而受制于特定的編程框架或者特殊的呈現器和瀏覽器技術(shù)。
基于 XML 的聲明性功能模式,如 XHTML、XForms、XML Events、可縮放向量圖形(SVG)、SMIL、VoiceXML 和 XHTML Mobile Profile,這些模式都為創(chuàng )建豐富內容提供了特定的功能性。
每種功能模式適用于特定的功能領(lǐng)域。比如,SVG 處理圖形,XForms 處理表單輸入收集和提交,XML Events 處理事件和監聽(tīng)程序的創(chuàng )建,等等。但是,更豐富的 Web 應用程序需要在一個(gè)文檔中結合使用兩種或更多的功能模式。模式組合很容易引起問(wèn)題,因為并非所有模式都能嵌入到其他模式中。也不是所有模式都允許其他模式嵌入自己內部。事實(shí)上,多數功能模式都假設自己是一個(gè)文檔的根模式,只有一個(gè)功能名稱(chēng)空間,如果需要另一個(gè)功能名稱(chēng)空間的豐富內容,可引用具有自己的根模式的單獨文檔。比如,XHTML 文檔可以引用單獨文檔中的 SVG 圖形,運行時(shí)呈現該圖形。
有些模式是專(zhuān)門(mén)用于嵌入的,如 XForms(永遠不會(huì )作為文檔中的根模式)。有些模式通過(guò)使用更新的模式結合已有的功能模式(如 XHTML 和 VoiceXML 的 X+V 配置文件),為內嵌進(jìn)行了調整。XForms 規范包含裝入模式的指南,但是沒(méi)有真正的組合驅動(dòng)模式。而在 X+V 中則創(chuàng )建了單獨的驅動(dòng)模式,它復制了 VoiceXML 模式并使用 XHTML 模式元素代替了專(zhuān)用的元素。
對于用戶(hù)代理開(kāi)發(fā)人員和內容創(chuàng )造者,關(guān)于哪些 XHTML 標記中允許來(lái)自 XForms 的標記,以及哪些 XForms 標記中允許什么 XHTML 標記,并沒(méi)有明確的說(shuō)明。

![]() |
|
該范型的一個(gè)關(guān)鍵是使用了這樣一個(gè)配置文件模式,它提供支持復合 XML 文檔的創(chuàng )建、修改和驗證的重定義。利用這種方法,可以將驗證跨名稱(chēng)空間元素的目標組合劃分出來(lái),而不破壞核心功能模式的完整性。作為一個(gè)例子,第 1 部分 給出了一個(gè)簡(jiǎn)單的復合,支持把 XForms 元素放入 XHTML 文檔,同樣也可以將 XHTML 元素放入 XForms 元素中,如圖 2 所示。

第 1 部分中提到,使用 XML Schema 重定義提供了擴展核心模式所需要的靈活性。
每種名稱(chēng)空間組合至少需要一個(gè)配置文件模式。但是,有時(shí)候可以創(chuàng )建一個(gè)配置文件模式來(lái)重定義一個(gè)模式,同時(shí)引入多個(gè)外部名稱(chēng)空間。我們建議使用模塊化的方法,將這些重定義分開(kāi),因為可能需要獨立使用或者與其他組合共同使用。
要記住,可以重用這些配置文件模式來(lái)創(chuàng )建雙向組合或者與其他名稱(chēng)空間的組合。
![]() |
|
下面的小節中,我們強烈建議使用重定義開(kāi)發(fā)核心模式。這些建議使您的核心模式不需要修改就很容易被重定義,或者至少將需要的修改減至最少。
不能對匿名的簡(jiǎn)單或復雜類(lèi)型聲明(在真正的元素/屬性聲明上下文中)使用 XML Schema 重定義。相反,應該通過(guò)定義元素的內容來(lái)公開(kāi)這些類(lèi)型,然后讓元素聲明引用這些類(lèi)型。
這種方法還有助于內部組件化和抽象:可以定義抽象的、可重用的父類(lèi)型,也可以進(jìn)行新的擴展或限制。
使用重定義時(shí)(一般來(lái)說(shuō)是為了得到更好的模式設計),根據全局分組定義來(lái)定義內容模型通常是合理的。使用組來(lái)定義元素和屬性?xún)热?,很容易擴展已有的組定義來(lái)包括新的項。
在類(lèi)型聲明或組的上下文之外聲明元素必須小心,因為其作用域是全局。這一步還可以讓該元素成為實(shí)例文檔中合法的根元素。這樣可能誤導生成工具,使創(chuàng )建的文檔以不希望的元素作為根元素,至少從模式創(chuàng )建者的觀(guān)點(diǎn)來(lái)看是這樣的。但是,使用該模式的模式驗證工具不會(huì )報告錯誤。因此使用全局元素聲明必須謹慎。
但是,當在復雜內容定義中引用不同名稱(chēng)空間的元素時(shí),全局元素很有用。第 1 部分中的那個(gè)例子就是這種情況,添加全局 XHTML p 元素,以便擴展 XForms select 元素的復雜類(lèi)型定義。即便如此,理想的解決方案仍然是從包括 p 元素聲明的 XHTML 模式中引用組聲明。
所有編程語(yǔ)言類(lèi)型中都有命名約定,以便讓讀者快速理解關(guān)于語(yǔ)言結構的附加元數據。如果沒(méi)有這些約定,讀者可能必須搜索語(yǔ)言結構或者依賴(lài)提供可視化標志的工具。這些約定對于幫助用戶(hù)理解不同的核心模式結構很有用。建議采用 XHTML 模塊化規范中使用的約定。(請參閱 參考資料。)
雖然不是該范型中的主要方面,但是模塊化能夠為模式的重用、理解、可擴展性和維護帶來(lái)很多好處。對于復合文檔,模塊化提供了包含和導入適當模塊的驅動(dòng)模式,簡(jiǎn)化了新模式的構造??梢允褂帽疚暮偷?1 部分中介紹的技術(shù)來(lái)修改或重定義該驅動(dòng)模式。
![]() |
|
第 1 部分中提到,本系列文章的目的是探索建立健壯、可重用的模式的高層應用場(chǎng)景和設計范型,從而為復合文檔內容提供堅實(shí)的驗證框架。驗證內容和語(yǔ)義的細節由 W3C 的 XHTML 2.0、XForms 和 CDF 工作組共同開(kāi)發(fā)。(請參閱 參考資料。)
![]() |
|
按照本文定義的范型,標準設計人員和業(yè)務(wù)數據建模人員都能從更具有可重用性的文檔和數據模型中受益。也可以從嵌入其他數據模型(模式)或者被其他數據模型嵌入的技術(shù)(范型)中受益。設計人員常常認為自己的根元素總會(huì )是根,但后來(lái)認識到很多場(chǎng)合下它們的模型需要存在于其他模型之中。
![]() |
|
![]() |
|
![]() | |
Steve Speicher 是從事軟件標準的一位 IBM 高級軟件工程師。Steve 目前主要從事利用工具和模型驅動(dòng)的開(kāi)發(fā)改進(jìn)創(chuàng )立標準的過(guò)程。Steve 以前曾經(jīng)在 Rational 部門(mén)開(kāi)發(fā)軟件開(kāi)發(fā)工具和 IBM 內部工具。Steve 從肯特州立大學(xué)獲得了計算機科學(xué)和應用數學(xué)碩士學(xué)位。通過(guò) sspeiche@us.ibm.com 與 Steve 聯(lián)系。 | |
![]() | |
Kevin E. Kelly 是從事軟件標準的 IBM 高級軟件工程師。Kevin 是 W3C XForms Working Group 的成員,和 W3C Compound Document Format Working Group 的主席。主要研究客戶(hù)機技術(shù)和基于開(kāi)放標準的演化技術(shù),通過(guò)基于 XML 和模型驅動(dòng)的方法促進(jìn)更快、更有效的標準采用。加入 IBM 之前,Kevin 在 Rational software 工作了八年,從事 UML 建模和 Java 技術(shù)。Kevin 擁有 Mercer 大學(xué)的碩士學(xué)位和 Montana 大學(xué)的博士學(xué)位。通過(guò) kekelly@us.ibm.com 與 Kevin 聯(lián)系。 | |
聯(lián)系客服