统一建模语言(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 图

清单 1. ShippingOrder.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、Destination 和 Order 组成。要说明的一点是,我将 Origin 类型连同其它一些通用类型一起放在了 DataTypes 模式中(请参阅清单 2)。DataTypes 库便于存储诸如 Address 定义之类的可重用类型,整个公司不同项目的 XML 文档中都使用了这些可重用类型。 在 UML 图中(请参阅图 2),Address 是一种抽象类型,单词“Address”用斜体书写以表示它是抽象类型。类型 Origin 和 Destination 从 Address 继承了特征 Name、Street、City 和 Country.为可重用类型创建蓝图被认为是一种好的面向对象设计。在 XML 模式中(请参阅清单 2),我已经通过使用关键字 abstract="true" 将类型 Address 指定为抽象类型。类型 Origin 和 Destination 模仿了我最初在 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>
[1] [2] [3] [4] [5] [6] 下一页
 【责编:Lili】 |