技術分享 UML類圖轉化成XML文檔模式方法揭秘
一種將UML類圖轉化成XML文檔模式的方法
UML是用面向對象技術描述一個系統的有效方法,XML是一種描述數據和交換數據標準,W3CXMLSchema是用來描述XML文檔的模式。通過討論UML類圖中類之間的關系,給出一種將一個用UML類圖轉化成一個XML文檔模式。
1.引言
UML是UnifiedModelingLanguage(統一建模語言)的縮寫,它定義了一個用于簡化系統模型的標準語言和圖形符號。UML是分析、設計軟件系統時廣泛采用的標準。XML是eXtensibleMarkupLanguage(可擴展置標語言)的縮寫,它定義了一種描述數據、交換數據的標準,也可以作為原語言定義其它的標準。W3CXMLSchema是2001年5月通過的用于描述XML文檔結構的模式語言。它具有豐富的數據類型和強大的數據結構定義及約束功能、用標準XML格式表示.支持命名空間、具有廣泛的應用前景等優點。
現有的系統有很大一部分是基于RUP建模技術建立的模型,都是通過UML圖來描述整個系統的。為了方便與其他系統的數據的交換,需要將數據轉化成用XML描述的。通過對類與類之間的關系的研究,給出了一種將UML類圖轉化成XMLSchema的方法。
2.UML和XMLSchema
2.1UML
UML是一種定義良好、易于表達、功能強大且普遍適用的建模語言。它溶入了軟件工程領域的新思想、新方法和新技術。它的作用域不限于支持面向對象的分析與設計,還支持從需求分析開始的軟件開發的全過程。作為一種建模語言,UML的定義包括UML語義和UML表示法兩個部分:
◆UML語義 描述基于UML的精確元模型定義。元模型為UML的所有元素在語法和語義上提供了簡單、一致、通用的定義性說明,使開發者能在語義上取得一致,消除了因人而異的最佳表達方法所造成的影響。此外UML還支持對元模型的擴展定義。
◆UML表示法 定義UML符號的表示法,為開發者或開發工具使用這些圖形符號和文本語法為系統建模提供了標準。這些圖形符號和文字所表達的是應用級的模型,在語義上它是UML元模型的實例。
2.2XMLSchema
XMLSchema是用一套預先規定的XML元素和屬性創建的,這些元素和屬性定義了文檔的結構和內容模式。相應的一套精巧的規則指定了每個Schema元素或者屬性的合法用途。如果違反這些規則解析器就會拒絕解析你的Schema以及任何同它相聯系的文檔。
XMLSchema通過元素以及元素的屬性和類型來描述對象。元素的類型可以使簡單類型,也可以是復雜類型。元素之間的約束描述了元素之間的關聯重數。元素的類型是復雜類型,復雜類型的元素的類型又是復雜類型,這樣就構成了一個樹狀的分層的結構。這樣一個樹狀層級結構描述了類和類之間的層級關系。#p#
3.UML類圖和XMLSchema之間的映射
UML類圖中主要描述了三類語義:繼承,聚合/組合和關聯。繼承通過一個帶三角箭頭的直線表示類A是類B的基類。聚合通過一個帶菱形的直線表示類A是類B的組成部分。關聯時通過一條兩邊都有約束的直線表示類A和類B之間有滿足約束關系的聯系。下面通過對這三種情況的分別討論,給出了UML類圖和XMLSchema之間的對應關系,并給出了相應的用來描述UML類的XML文件的描述。
3.1繼承關系到XMLSchema的映射
繼承在面向對象技術中是一個很基本,也是很關鍵的概念。人們將具有共同特性的事物抽象成類,并通過增加其內涵而進一步分類。繼承(Generalization)定義了一般事物和特殊事物之間的分類關系。用W3CXMLSchema中復雜類型的擴展機制很容易表示類的繼承關系
XMLSchema中通過定義一個復雜類型,這個復雜類型可以作為另外一個復雜類型的基類型來表示繼承關系。復雜類型A中所有的元素將繼承到它的子類型當中去,同時可以在子類型當中增加基類型當中所沒有的元素,實現對基類型的擴展。
3.2聚合/組合關系到XMLSchema的映射
UML類圖中聚合和組合是兩種特殊的關聯關系。聚合是整體——部分關系的一種,它描述了“hasa”關系,即聚合是有許多部分組成,它是一種較弱的整體與部分之間的關系。組合是聚合關系的一種變體,組合與聚合的區別是:組合是一種較強的擁有關系,在組合中部分脫離整體就不能獨立存在,而且整體與部分的生命周期是一致的。在UML中表示類A中組合或者聚合類B的關系的時候,也就是在類A的屬性中增加一個類型為B的屬性。在XMLSchema中表示組合或者聚合關系的時候,相當于在A對應的元素的下一個層級關系中包含一個B的元素。
3.3關聯關系到XMLSchema的映射
UML類圖中關聯關系一般用名稱、角色和多重性描述。
(1)名稱:用以描述關聯的性質,為了消除名稱含義上的歧義,可提供一個指引讀者名稱方向的三角形,給名稱一個方向。
(2)角色:當一個類處于關聯的一端時,該類就在這個關系中扮演了一個特定的角色;角色是關聯中靠近它的一端的類對另一端的的類呈現的職責。
(3)多重性:多重性說明了在一個關聯的實例中一個對象有多少個可以連接的對象,多重性是對關聯的一種約束,可以精確地表示多重性為1(1),0或1(0...1),很多(0...),一個或很多(1...),甚至可以精確地指明多重性為一個數值。
對于一對多的關聯和多對一的關聯關系,我們都可以用兩種方式來進行描述。第一種是借用XMLSchema中的ID和IDREF來實現一對多和多對一的關聯關系,第二種是我們可以通過XPath一個元素里邊包含另一個元素XPath來實現一對多和多對一的關聯關系.下邊分別介紹兩種方法來實現關聯關系。多對一的關聯關系我們采用ID和IDREF的方式來實現關聯關系。一對多的關聯關系我們采用XPath方式來實現。
3.3.1多對一的關聯關系到XMLSchema的映射
ID類型唯一的確認文檔中的元素。類型ID的屬性值必須是一個有效的XML名稱。IDREF類型允許一個屬性值是一個在文檔中可以找到的元素。IDERF屬性值必須是文檔中某個元素的ID,也就是說,IDREF屬性值必須等于另一個元素中ID屬性值。
3.3.2一對多的關聯關系到XMLSchema的映射
XPath遵循文檔對象模型(DOM)的路徑格式,由于每個XML文檔都可以看成是一棵擁有許多結點的樹,如果需要定位一個節點,就可以用這個樹上邊的一系列節電組成的路徑來表示這個節電在這棵樹上邊的位置。對于一個A對應多個B的情況,可以在A的下一層級結構當中保存一個列表,這個列表記錄了所有關聯到這個A上邊的B的XPath,這個B可能是DOM樹狀結構上邊的另外一個節點。這同時也解決了UML模型描述的是個圖,如何將它轉化成一個DOM模型的樹狀結構的問題。
3.3.3多對多的關聯關系到XMLSchema的映射
通過上邊的討論可以看出,對于多對多的關系,可以采用上邊兩種方法中的任何一種方法來進行描述。不同的地方在于,一個A對應多個B,一個B對應于多個A的情況,也就是多對多的情況,需要在A和B兩邊分別保存一個ID/IDREF序列或者XPath序列。則對于一個A,它有一個它所對應的所有的B的ID/IDREF或者XPath序列。對于一個B,它有一個它所對應的所有A的ID/IDREF或者XPath序列。從而實現了A和B之間的多對多的關系。
4.小結
通過對UML類圖中類之間的繼承,組合/聚合和關聯關系的研究,給出了一個將UML類圖轉化成XMLSchema的方法。并且XMLSchema忠實的反應了UML類圖中類之間的關系。對于用UML類圖描述的系統,通過這種方法將UML類圖轉化成XMLSchema,根據該XMLSchema生成的XML文件同樣可以忠實的反應UML類圖所描述的系統的模型。
【編輯推薦】