使用 UML 設計 XML 模式

發表于:2007-05-25來源:作者:點擊數: 標簽:業務設計umlxml模式
將業務概念轉換成 XML 詞匯表 補充框架 用構造型擴展 UML 從 UML 模型生成 XML 模式 結束語 參考資料 關于作者 統一建模語言(Unified Modeling Language, UML)是一種業界標準,當以 面向對象 的方法構建軟件系統時,用它來對業務概念建模。就信息和命令的
將業務概念轉換成 XML 詞匯表
補充框架
用構造型擴展 UML
從 UML 模型生成 XML 模式
結束語
參考資料
關于作者
統一建模語言(Unified Modeling Language, UML)是一種業界標準,當以面向對象的方法構建軟件系統時,用它來對業務概念建模。就信息和命令的傳輸方面而言,近來 XML 已經愈發成為實現這些系統的關鍵因素。XML 模式用于定義和限制被交換 XML 的本質,因此它成為了人們注意的焦點。本文討論了 UML 在設計 XML 模式方面的用法,并為使用 UML 框架創建 XML 詞匯表提供了一種實用的方法。

在將 UML 框架用于構造 XML 模式時,必須考慮三個問題:

  • UML 和 XML 模式之間的互補性
  • 如何擴展 UML 以捕獲模式提供的全部功能
  • 根據 UML 圖設計 XML 模式的能力

為了有助于在本文中討論這兩種框架,我將使用一家虛擬公司:BALTIC Shipping 作為示例。

BALTIC Shipping 是一家國際性的運輸公司,專門從事美國到東歐的貨運業務。該公司希望創建一種機制,用于跟蹤從其紐約總部到各分公司(如位于愛沙尼亞塔林(Tallinn)的一個分公司)的裝運物情況(請參閱圖 1)。當產品起運時,總部通過電子方式以 XML 形式發送關于本次裝運物的信息。一旦貨物抵達目的地,分公司將以電子方式把確認信息發回給總部。

所有訂單和確認數據都以 XML 文檔形式交換,必須設計模式來概括文檔的結構。用于對裝運訂單建模的業務構造也用來與庫存跟蹤系統(Inventory Tracking System)交換信息,庫存跟蹤系統隨時都知道公司現有哪些包裝箱要交運。本文討論了構造 XML 模式時使用 UML 的功效,這些 XML 模式定義了這些以 XML 格式進行數據傳輸的業務構造。

圖 1. BALTIC Shipping 工作流

補充框架

UML 及其面向對象的建??梢詾闃嫿?XML 模式提供補充。您可以方便地用 UML 中的圖形符號來表示業務概念,并開始設計您的 XML 模式。

建模的價值
有關 UML 在創建 XML 模式時的優點的討論假定了面向對象建模的價值是已知的。在我上一篇文章“Create flexible and extensible XML schemas”中,我討論了使用面向對象方法構建 XML 模式的重要性和價值。使用 UML 設計面向對象系統除了具有技術優勢之外,UML 還提供了一個公共媒介,業務團隊和技術團隊可以通過該媒介方便地交流看法。業務分析人員是軟件系統(尤其是一個包含特定于領域信息的系統)中的關鍵協作者。由于業務分析人員參與設計 XML 文檔的過程,因此軟件架構設計師和業務分析人員之間默契的合作對于項目的成功變得非常重要。UML 的圖形符號使得技術人員和非技術人員很容易就諸如 Shipping Order 的定義之類的業務概念達成一致,因此也就加速并促進了項目的完成。

互補
設想一下,BALTIC Shipping 的業務經理找到您,請您對一個 XML 模式建模,該模式將對在公司內不同系統之間傳輸的信息進行形式化。他與您坐下來,一起討論該領域的業務概念。您可以在紙上繪制一些草圖,但 UML 使用圖和符號對這些概念建模提供了一種更好的正式方法。

圖 2. UML 圖

圖 2 中的 UML 圖里勾畫出了 Shipping Order 的業務定義。BALTIC Shipping 將 Shipping Order 定義為包含 ShippingId、Origin、DestinationOrder。無論何時交換有關 Shipping Order 的任何數據,它都考慮這些必需的信息。此外,UML 圖也用來表示組成 Origin 或 Order 的內容。所顯示的 Origin 和 Destination 的類型與類型 Address 相同,BALTIC Shipping 將具有下列特征的 Address:Name、Street、City 和 Country 存儲在其數據庫中。這些都是業務概念,數據庫模型、軟件程序以及供經理和業務伙伴們閱讀的文檔中都用到了它們。這些概念還包括基數(Order 可以包含許多 Item)、繼承(Origin 繼承 Address 的全部特征)以及依賴關系(Order 依賴于其 Item 的詳細信息);UML 圖捕獲了所有這些關系。由于您希望您的 XML 文檔攜帶 Shipping Order 信息,因此下一步就是設計符合草擬的 UML 圖的 XML 模式。下面的模式表示 UML 圖(參閱圖 2)到 XML 模式的映射。

清單 1. ShippingOrder.xsd
clearcase/" target="_blank" >cccccc" border="1">

            <?xml version="1.0" encoding="UTF-8"?>
            <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified">
            <xs:include schemaLocation="DataTypes.xsd"/>
            <xs:element name="shippingOrder">
            <xs:complexType>
            <xs:sequence>
            <xs:element name="shippingId"type="int"/>
            <xs:element name="origin" type="Origin"/>
            <xs:element name="destination" type="Destination"/>
            <xs:element name="order" type="Order"/>
            </xs:sequence>
            </xs:complexType>
            </xs:element>
            </xs:schema>
            

正如您在清單 1 中可看到的那樣,UML 中的 Shipping Order 類由模式中的復雜類型 shippingOrder 表示。正如業務推薦的那樣,Shipping Order 由 shippingId、Origin、DestinationOrder 組成。要說明的一點是,我將 Origin 類型連同其它一些通用類型一起放在了 DataTypes 模式中(請參閱清單 2)。DataTypes 庫便于存儲諸如 Address 定義之類的可重用類型,整個公司不同項目的 XML 文檔中都使用了這些可重用類型。

在 UML 圖中(請參閱圖 2),Address 是一種抽象類型,單詞“Address”用斜體書寫以表示它是抽象類型。類型 OriginDestinationAddress 繼承了特征 Name、Street、City 和 Country。為可重用類型創建藍圖被認為是一種好的面向對象設計。在 XML 模式中(請參閱清單 2),我已經通過使用關鍵字 abstract="true" 將類型 Address 指定為抽象類型。類型 OriginDestination 模仿了我最初在 UML 圖中所勾畫的設計,這里我使用 extension base="Address" 來表明它們繼承了 Address 的特征。此外,我還捕獲了這樣一個業務模型:通過用代碼 type="Item" maxOccurs="unbounded",Order 可以包含許多 Item。

清單 2. DataTypes.xsd

            <?xml version="1.0" encoding="UTF-8"?>
            <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified">
            <xs:complexType name="Address" abstract="true">
            <xs:sequence>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="street" type="xs:string"/>
            <xs:element name="city" type="xs:string"/>
            <xs:element name="country" type="xs:string"/>
            </xs:sequence>
            </xs:complexType>
            <xs:complexType name="Origin">
            <xs:complexContent>
            <xs:extension base="Address"/>
            </xs:complexContent>
            </xs:complexType>
            <xs:complexType name="Destination">
            <xs:complexContent>
            <xs:extension base="Address"/>
            </xs:complexContent>
            </xs:complexType>
            <xs:complexType name="Order">
            <xs:sequence>
            <xs:element name="item" type="Item" maxOccurs="unbounded"/>
            </xs:sequence>
            </xs:complexType>
            <xs:complexType name="Item">
            <xs:sequence>
            <xs:element name="description" type="xs:string"/>
            <xs:element name="weight" type="xs:double"/>
            <xs:element name="tax" type="xs:double"/>
            </xs:sequence>
            </xs:complexType>
            </xs:schema>
            

如果您是從頭開始設計 XML 模式的,那么將很難只使用 XML 寫下對象類型。此外,要想向不熟悉 XML 模式術語的業務經理解釋它們也幾乎是不可能的。根據 UML 圖,您可以有效地轉換公司的業務概念,然后使用您面前的這一可視化表示創建 XML 模式。以下是運用您創建的模式為一批從紐約運往塔林的草莓醬生成的實例文檔。

清單 3. ShippingOrder.xml

            <?xml version="1.0" encoding="UTF-8"?>
            <shippingOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:noNamespaceSchemaLocation="C:\\schemas\\ShippingOrder.xsd">
            <shippingId>09887</shippingId>
            <origin>
            <name>Ayesha Malik</name>
            <street>100 Wall Street</street>
            <city>New York</city>
            <country>USA</country>
            </origin>
            <destination>
            <name>Mai Madar</name>
            <street>Liivalaia 33</street>
            <city>Tallinn</city>
            <country>Estonia</country>
            </destination>
            <order>
            <item>
            <description>Ten Strawberry Jam bottles</description>
            <weight>3.141</weight>
            <tax>7.60</tax>
            </item>
            </order>
            </shippingOrder>
            

基礎知識
雖然在這個示例中很容易看出使用 UML 的好處,但 BALTIC Shipping 示例確實是 UML 和 XML 模式之間的互補性的典型表現嗎?我已經指出:XML 模式可以捕獲 UML 圖中所表示的信息。但是,現在讓我們反過來分析,問一問 UML 圖是否能夠捕獲 XML 模式提供的所有功能。XML 模式極大地豐富了對 XML 文檔的形式化,而且初步分析表明 XML 模式的大多數基本功能都可以由 UML 圖表示。請考慮 XML 模式的一些重要原則:

1. 類型
XML 模式既有內置數據類型(如 intdouble),也有通過構造得到的類型(如表示 Address 組件的復雜類型)。類型的生成是面向對象設計的一個重要方面,也是模塊化、靈活性和封裝性所必需的。UML 中,提供了內置的數據類型,而新類型則可以使用類的結構來構建。

XML 模式還具有用戶定義的類型,用 W3C 的話說,這種類型“允許創建用戶定義的數據類型,如派生自現有數據類型的數據類型,并且它可以對它的某些特性(例如,范圍、精度、長度以及格式)加以限制。”對于特殊的或用戶定義的類型,UML 允許對其基本概要文件加以擴展,這類擴展被稱為構造型。用構造型擴展 UML 這一部分對構造型進行了詳細討論。

2. 屬性
XML 模式中的屬性對兩件事情有用:

  • 捕獲關聯。例如,Order 可以包含許多 Item。在 XML 模式中這被寫為 maxOccurs="unbounded"。在 UML 中,關聯與模型中的兩個或多個類有關,關聯由帶數字的單箭頭表示,數字意味著該關聯的多重性。
  • 顯示可能內在地鏈接到某個元素的附加信息。XML 模式中有這樣一個元素和屬性配對的示例:帶有 currency 屬性的 tax 元素。清單 4 中顯示了向元素 tax 添加屬性的示例。
清單 4. 添加屬性

            <xs:element name="tax">
            <xs:complexType>
            <xs:simpleContent>
            <xs:extension base="xs:double">
            <xs:attribute name="currency" type="xs:string" use="required"/>
            </xs:extension>
            </xs:simpleContent>
            </xs:complexType>
            </xs:element>
            

可以在 UML 圖中捕獲屬性來作為類的屬性。然而,必須創建一種機制,通過該機制在 UML 類圖中區分元素和屬性。這一點可以通過在 UML 圖中創建稱為 attribute 的特殊原型來實現。

3. 名稱空間
名稱空間是 XML 模式中一個非常重要的概念。它們表示將業務概念隔離到桶中。在 UML 圖中,可以通過將 UML 模塊保存在不同的包中來表示名稱空間。

4. 多重性
我已經指出,UML 圖中可以顯示一些關聯,如 OrderItem 之間的關聯(一個 Order 可以包含幾個 Item)。在 XML 模式中,maxOccursminOccurs 關鍵字用于表示一個元素的多重性關聯,或者一個關聯的多重性關聯。

5. 派生類型
XML 模式允許通過擴展或限制來派生類型。通過擴展來進行繼承是一種常見的面向對象設計,很容易通過在 UML 中顯示抽象類來表達這種繼承。抽象類是用斜體表示的(請參閱圖 2)。然而,UML 中沒有構造可以表示通過限制所進行的派生。

差距分析
很顯然,UML 無法捕獲 XML 模式中的所有豐富內容。這意味著,即便已經在 UML 中對 XML 模式進行了建模,您還是應該對這些模式進行手工掃描和調整。您應該解決的問題有:

  • 排序:在 XML 模式中,排序至關重要,而排序在 UML 的傳統領域卻沒有任何用處。
  • 屬性:如同前面在基礎知識中所討論的那樣,在 UML 圖中屬性和子元素之間并沒有清晰的界線。
  • 通過限制進行的派生:雖然 UML 可以顯示抽象類及其實現,但傳統 UML 圖卻沒有正式的符號用來顯示屬于 XML 模式泛化技術的限制。
  • 鍵:鍵用來在 XML 模式中將文檔鏈接在一起,但 UML 符號中卻沒有鍵表示。

差距分析針對的是 UML 符號在捕獲 XML 模式所提供的全部功能時所顯出的不足。UML 概要文件提供了一種通用的擴展機制,用于構建特殊領域中的 UML 模型。在 XML 模式設計領域中,UML 概要文件得到了擴展,以彌補基本 UML 模型中的差距。Dave Carlson 在他的著作 Modeling XML Applications with UML 中已經創建了這樣一個 XSD 概要文件。

用構造型擴展 UML

差距分析列出了一些方面,在這些方面中 UML 不能清晰地捕獲您想在 XML 模式中獲得的內容,并且還決定擴展 UML 概要文件以彌補差距。UML 概要文件有三個關鍵項:構造型、標記值(特性)和約束。構造型允許您為 UML 基礎類(如 Class)附加新的意義,構造型在 UML 圖上表示為一個由雙尖括號(<< >>)括起來的名稱。

假定您有這樣一種業務需求:稅金還必須帶有有關其貨幣種類的信息。換句話說,XML 看起來象下面這樣:


            <tax currency=USD>7.60</tax>
            

在 XML 模式中,tax 元素帶有屬性 currency 以表示這一需求(請參閱清單 4)。為了在 UML 中創建相應的圖,我們創建了兩個新的構造型:用于表示 XML 模式屬性的 <<XSDattribute>> 和用來表示雙精度類型的 <<XSDsimpleType>>。我使用了 Dave Carlson 創建的對 UML 概要文件的 XSD 擴展。表示屬性的擴展如下所示:


            <<XSDattribute>> on a UML attribute or association end
            use (prohibited | optional | required | fixed)
            

complexType Tax 基于 simpleType double,并且包含屬性 currency。通過創建構造型,您現在已經在 UML 圖中準確地捕獲了新的業務需求,而且可以再次使用 UML 圖來創建 XML 模式。正如我為元素 tax 設置了 currency 屬性那樣,我可以使用我的 <<XSDattribute>> 構造型來為 UML 圖中的元素 weight 創建屬性 unit。同樣,需要為眾多的 XML 模式構造創建 UML 擴展,以便在這兩種框架之間提供完整的雙向映射。

圖 3. 帶有構造型的 UML 圖

相應的模式如下:

清單 5. ShippingOrder.xsd

            <?xml version="1.0" encoding="UTF-8"?>
            <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified">
            <xs:include schemaLocation="DataTypes2.xsd"/>
            <xs:element name="shippingOrder">
            <xs:complexType>
            <xs:sequence>
            <xs:element name="shippingId"/>
            <xs:element name="origin" type="Origin"/>
            <xs:element name="destination" type="Destination"/>
            <xs:element name="order" type="Order"/>
            </xs:sequence>
            </xs:complexType>
            </xs:element>
            </xs:schema>
            
清單 6. DataTypes2.xsd

            <?xml version="1.0" encoding="UTF-8"?>
            <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified">
            <xs:complexType name="Order">
            <xs:sequence>
            <xs:element name="item" type="Item" maxOccurs="unbounded"/>
            </xs:sequence>
            </xs:complexType>
            <xs:complexType name="Item">
            <xs:sequence>
            <xs:element name="description" type="xs:string"/>
            <xs:element name="weight" type="Weight"/>
            <xs:element name="tax" type="Tax"/>
            </xs:sequence>
            </xs:complexType>
            <xs:complexType name="Address" abstract="true">
            <xs:sequence>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="street" type="xs:string"/>
            <xs:element name="city" type="xs:string"/>
            <xs:element name="country" type="xs:string"/>
            </xs:sequence>
            </xs:complexType>
            <xs:complexType name="Origin">
            <xs:complexContent>
            <xs:extension base="Address"/>
            </xs:complexContent>
            </xs:complexType>
            <xs:complexType name="Destination">
            <xs:complexContent>
            <xs:extension base="Address"/>
            </xs:complexContent>
            </xs:complexType>
            <xs:complexType name="Tax">
            <xs:simpleContent>
            <xs:extension base="xs:double">
            <xs:attribute name="currency" type="xs:string" use="required"/>
            </xs:extension>
            </xs:simpleContent>
            </xs:complexType>
            <xs:complexType name="Weight">
            <xs:simpleContent>
            <xs:extension base="xs:double">
            <xs:attribute name="unit" type="xs:double" use="required"/>
            </xs:extension>
            </xs:simpleContent>
            </xs:complexType>
            </xs:schema>
            

現在,XML 實例文檔每次交換有關某一項的稅費信息時都包含貨幣類型。

清單 7. ShippingOrder2.xml

            <?xml version="1.0" encoding="UTF-8"?>
            <shippingOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:noNamespaceSchemaLocation="C:\\schemas\\ShippingOrder.xsd">
            <shippingId>09887</shippingId>
            <origin>
            <name>Ayesha Malik</name>
            <street>100 Wall Street</street>
            <city>New York</city>
            <country>USA</country>
            </origin>
            <destination>
            <name>Mai Madar</name>
            <street>Liivalaia 33</street>
            <city>Tallinn</city>
            <country>Estonia</country>
            </destination>
            <order>
            <item>
            <description>Ten Strawberry Jam bottles</description>
            <weight unit="kg">3.14</weight>
            <tax currency="US">7.16</tax>
            </item>
            </order>
            </shippingOrder>
            

從 UML 模型生成 XML 模式

討論了 UML 和 XML 模式之后,自然就要問:有沒有一種將 UML 映射到 XML 模式的標準方法呢?如果有的話,那么就可能從 UML 圖自動生成模式,供應商和開放源碼工具可以提供這種功能。最好是,某個工具獲取 UML 元模型并將它轉換成 XML 模式。XML 元數據交換(XML Metadata Interchange, XMI)旨在能夠在建模工具之間方便地交換元數據,而且可以進一步用來根據一組轉換規則從 UML 圖生成 XML DTD。

使用 XMI(XML 元數據交換)
XMI 是由與供應商無關的對象管理組織(Object Management Group, OMG)贊助的,它有三個主要標準:

  • XML:可擴展標記語言(eXtensible Markup Language),一種 W3C 標準
  • UML:統一建模語言(Unified Modeling Language),一種 OMG 建模標準
  • MOF:元對象工具(Meta Object Facility),一種 OMG 建模及元數據資源庫標準

XMI 結合了這三種標準,因而代表了將元數據從一個庫傳送到另一個庫的一種新方法。

我在文章中包含了一小段 XMI,目的是為了闡明當工具自動用 XML 生成元信息并隨后將其轉換成 XML 模式時后端所發生的事情。在清單 8 中,Foundation Core Model Element 是 ShippingOrder,您可以看到該 XMI(它十分冗長)編寫了 UML 模型中所出現的每一片葉子。

清單 8. 由 hyperModel 為圖 2 UML 模型(使用 ArgoUML 創建的)所生成的部分 XMI

            <Foundation.Core.ModelElement.name>ShippingOrder</Foundation.Core.ModelElement.name>
            <Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
            <Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
            

包括 TogetherJ、Rational Rose 和 ArgoUML 在內的大多數模型都可以創建 XMI 文件。我使用了 ArgoUML(它是開放源碼的)來創建圖 2 中的 UML 圖。ArgoUML 創建了一個包含 XMI 文件的項目文件。當將它導入 hyperModel(由 Dave Carlson 開發,他最早討論了如何使用 UML 對 XML 模式進行建模,并就該主題撰寫了一本書)時,它生成了適當的模式構造。我下載了 hyperModel 的 30 天評估模型,不過您也可以選擇其它工具。只要確保 XML 和 UML 模型的編碼是正確的;例如,hyperModel 可以與 UML Model 1.3 一起使用。此外,任何時候都要檢查生成的 XML 模式,以驗證轉換是準確的,尤其是在使用了新類型時更要如此。

由上面的 ArgoUML 生成并被放入 hyperModel 的 XMI 返回了清單 9 中的 XML 模式構造。通過仔細檢查,可以肯定 hyperModel 捕獲了圖 2 中用 ArgoUML 創建的基本 UML 模型。由于 UML 處于單個包中,因此所生成的 XML 模式位于單個名稱空間中。當在 ShippingOrderType 下進行調用時,諸如 Origin 之類的類型會被引用。

清單 9. 使用 XMI 生成的 ShippingOrder 元素類型

            <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
            elementFormDefault="qualified">
            <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
            <!-- Class: ShippingOrderType  -->
            <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
            <xs:element name="ShippingOrder" type="ShippingOrderType"/>
            <xs:complexType name="ShippingOrderType">
            <xs:sequence>
            <xs:element name="shippingId" type="xs:int"/>
            <xs:element name="origin">
            <xs:complexType>
            <xs:sequence>
            <xs:element ref="Origin"/>
            </xs:sequence>
            </xs:complexType>
            </xs:element>
            <xs:element name="destination">
            <xs:complexType>
            <xs:sequence>
            <xs:element ref="Destination"/>
            </xs:sequence>
            </xs:complexType>
            </xs:element>
            <xs:element name="order">
            <xs:complexType>
            <xs:sequence>
            <xs:element ref="Order"/>
            </xs:sequence>
            </xs:complexType>
            </xs:element>
            </xs:sequence>
            </xs:complexType>
            </xs:schema>
            

結束語

許多大型集團公司 — 如 SWIFT,該公司為遍布全球的 7000 家金融機構提供貿易和結算的電子基礎結構 — 正在使用 UML 到 XML 模式轉換來設計他們的 XML 文檔。UML 代表了對業務概念建模的最簡單方法,尤其是當這些概念特定于某個領域的時候更是如此。人們很自然地想對這一過程進行延伸和自動化,以使轉換顯得整潔和完整。為此,我討論了 XMI 的用法,還討論了一些產品(如 hyperModel)從 XMI(用于描述 UML 元模型)生成 XML 模式的能力。不過,需要提醒讀者的是,始終要細化并核實模型的有效性。盡管從 UML 完全映射到 XML 模式的能力還不是盡善盡美,但 UML 卻是以面向對象方式對 XML 模式進行建模的良好開端。如果為自動生成 XML 模式而創建工具 — 既包括開放源碼的也包括由供應商管理的 — 這一趨勢繼續下去,那么 UML 類圖可能會成為將業務概念合并到 XML 詞匯表的標準方法。

隨著 XML 逐漸成為整個軟件系統(從數據交換到 Web 服務消息到構建腳本描述)不可或缺的一部分,干凈且簡潔的 XML 模式建模方法已變得必不可少。UML 是一種經過試驗和測試的用于面向對象系統的建模工具,作為設計 XML 模式的一種媒介,它對開發人員、業務分析人員和供應商都極具吸引力。我相信,隨著業界和消費者開始使用 XML 開發他們自己的實體和服務,我們將會看到 UML 的使用不斷普及。

參考資料

 

 

關于作者
AyeshaMalik 的照片Ayesha Malik 是 Object Machines 的一名高級軟件顧問,她曾廣泛參與了眾多工業環境中大型 Java、XML 和 Web 服務系統的相關工作。她還在諸如 IBM developerWorks、XML.com 和 XML Developer Journal 等刊物上發表了很多有關軟件開發方面的文章,并曾應邀在 O'Reilly Bioinformatics Conference 和 Web Services Edge Conference 上發表演講。Ayesha 以優異成績從哈佛大學獲得了學士學位,同時她還擁有哥倫比亞大學的碩士學位,在哥倫比亞大學期間她學習了操作研究、應用數學和計算機科學??梢酝ㄟ^ ayesha.malik@objectmachines.com 與 Ayesha 聯系。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97