求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code
会员   
订购 | 案例 | 建模扩展语言 | 模型框架 | 学习资源 | 培训&咨询 | 解决方案 | 用户组 | 客户专区 | 联系我们
 
学习视频
在线讲座
文章
白皮书
教程
EA手册库
sysml指南
Archimate
解决方案
学习中心库
市场活动
Code模型
 

工具 > Enterprise Architect > 技术文档

XML模式生成

XSD生成工具将UML类模型转换为W3C XML模式(XSD)。这允许Data Modeler开始在UML中的概念级别工作,将XSD创建的繁琐方面留给EA。然后,如果需要,可以通过使用提供的“UML Profile for XML”来定制模式生成,如稍后所述。

XML模式对应于UML包。因此,XSD生成是EA中的包级操作。为了演示模式生成器的用法,我们从示例模型开始。


入门


要使用模式生成工具,您将需要以下内容:

  • EA专业版或企业版
  • XSDDataTypes包:此包包含表示XSD原始数据类型的类。该软件包可用作XMI文件。要将文件作为UML包导入,请使用EA的XMI导入工具,该工具可从菜单项:Project |获得 进口/出口| 从XMI导入包。
  • XML的UML配置文件:此资源文件包含允许自定义架构生成的构造型类。可以使用资源视图将 XML的UML配置文件导入到模型中(有关将UML配置文件导入EA的详细信息,请参阅导入配置文件)。


生成XSD的步骤:
  1. 通过右键单击项目浏览器中的包,选择要转换为XSD的包。
  2. 选择Project | 从主菜单生成XML Schema。
  3. 使用“文件名”字段设置所需的输出文件。
  4. 使用“编码”字段设置所需的xml编码。
  5. 单击Generate按钮生成架构。
  6. 架构生成器的进度将显示在“进度”编辑框中。

示例


以下类图为简单的“员工详细信息”系统建模,旨在存储公司的员工联系信息。显示的类形成“EmployeeDetails”包。类的UML属性直接映射到XML元素或属性。请注意,类没有方法,因为类方法和XSD构造之间没有有意义的对应关系。


下图显示了默认情况下为Employee Details包生成的架构。注意每个UML类如何对应于模式中的complexType定义。类属性生成为定义中“序列”模型组中包含的模式元素。枚举类在这里是例外 - 它直接映射到包含在simpleType定义中的XSD枚举。

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="Status">
<xs:restriction base="xs:string">
<xs:enumeration value="Full-Time"/>
<xs:enumeration value="Part-Time"/>
<xs:enumeration value="Casual"/>
<xs:enumeration value="Contract"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="Person" type="Person"/>
<xs:complexType name="Person">
<xs:sequence>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="surName" type="xs:string"/>
<xs:element name="birthDate" type="xs:string"/>
<xs:element name="gender" type="xs:string"/>
<xs:element name="contactDetails" type="ContactInfo"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Employee" type="Employee"/>
<xs:complexType name="Employee">
<xs:complexContent>
<xs:extension base="Person">
<xs:sequence>
<xs:element name="status" type="Status"/>
<xs:element name="jobTitle" type="xs:string"/>
<xs:element name="startDate" type="xs:date"/>
<xs:element name="department" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="EmployeeRecords" type="EmployeeRecords"/>
<xs:complexType name="EmployeeRecords">
<xs:sequence>
<xs:element name="Employee" type="Employee" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ContactInfo" type="ContactInfo"/>
<xs:complexType name="ContactInfo">
<xs:sequence>
<xs:element name="homePhone" type="xs:string"/>
<xs:element name="mobilePhone" type="xs:string"/>
<xs:element name="officePhone" type="xs:string"/>
<xs:element name="email" type="xs:string"/>
<xs:element name="streetAddress" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>


下表描述了UML构造到XSD构造的默认映射。下一节将介绍XML的UML配置文件,它允许更改此默认映射以满足个人需求。使用该配置文件,我们将改变我们的示例类模型,以定制XML模式的生成。


UML构造 默认XSD生产规则
架构元件为目标包生成。如果目标包包含来自另一个包的类,其中设置了标记值“targetNamespace”和“targetNamespacePrefix”,则这些包作为schema元素的属性包含在内。

此外,还为每个引用的包创建了import或include元素。(如果外部包与目标包共享相同的targetNamespace标记值,则使用include元素。在targetNamespaces不同的地方使用import元素。)
生成 根级元素声明和complexType定义。元素名称类型与类名相同。生成XSD序列模型组以包含作为元素生成的UML属性。
属性 为每个类属性声明 一个元素元素名称设置为UML属性名称的名称。这前面是类名,以使元素唯一。的minOccursmaxOccurs的属性设置,以反映属性重要。(注意:如果未指定,minOccurs和maxOccurs默认为1.)如果属性引用另一个类,则元素声明遵循complexType定义,该定义包含对相应complexType的引用。
协会 为类拥有的每个关联声明 一个元素元素名称设置为关联角色的名称。的minOccursmaxOccurs的体现协会的基数。注意:如果未指定关联的方向,则假定所有者为源。
泛化(继承) 对于单个继承,将生成扩展元素,并将基本属性设置为基类名称。然后,子类的UML属性将附加到扩展元素中所有模型组。
<<枚举>>(刻板印象) 为枚举类声明 一个simpleType元素,并将name属性设置为类名。限制元件与生成基础设置为字符串每个类属性作为XSD 枚举元素附加到限制元素,其值设置为UML属性名称。架构生成器将忽略UML属性的任何类型规范。


XML

UML配置文件XML的UML配置文件指定了一组可以应用于UML模型的构造型,标记值和约束,以便更改结果模式的特定方面。例如,我们可能希望将某些UML类属性转换为XSD属性,或者我们可能需要使用与默认“序列”不同的模型组。

构造型明确告诉生成器UML构造映射到哪个XSD结构。标记值进一步定义映射的各个方面,例如元素是否应该被限定。约束定义了要应用构造型必须满足的任何条件。

要演示XML的配置文件如何影响模式生成,请参阅以下类图 - 以前的示例的改编。请注意相应模式中的更改。



<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ContactInfo" type="ContactInfo"/>
<xs:complexType name="ContactInfo">
<xs:all>
<xs:element name="ContactInfo.homePhone" type="xs:string" maxOccurs="1"/>
<xs:element name="ContactInfo.email" type="xs:string" maxOccurs="3"/>
<xs:element name="ContactInfo.streetAddress" type="xs:string"/>
<xs:choice>
<xs:element name="ContactInfo.mobilePhone" type="xs:string"/>
<xs:element name="ContactInfo.officePhone" type="xs:string"/>
</xs:choice>
</xs:all>
</xs:complexType>
<xs:simpleType name="Gender">
<xs:restriction base="xs:string">
<xs:pattern value="male|female"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="Employee" type="Employee"/>
<xs:complexType name="Employee">
<xs:complexContent>
<xs:extension base="Person">
<xs:sequence>
<xs:element name="status" type="Status"/>
<xs:element name="jobTitle" type="xs:string"/>
<xs:element name="startDate" type="xs:date"/>
<xs:element name="department" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="Person" type="Person"/>
<xs:complexType name="Person">
<xs:sequence>
<xs:element name="surName" type="xs:string" maxOccurs="1"/>
<xs:element name="firstName" type="xs:string" maxOccurs="1"/>
<xs:element name="birthDate" type="xs:string" maxOccurs="1"/>
<xs:element name="contactDetails" type="ContactInfo"/>
</xs:sequence>
<xs:attribute name="gender" use="optional" type="Gender"/>
</xs:complexType>
<xs:element name="EmployeeRecords" type="EmployeeRecords"/>
<xs:complexType name="EmployeeRecords">
<xs:all>
<xs:element name="Employee" type="Employee" minOccurs="0" maxOccurs="unbounded"/>
</xs:all>
</xs:complexType>
<xs:simpleType name="Status">
<xs:restriction base="xs:string">
<xs:enumeration value="Full-Time"/>
<xs:enumeration value="Part-Time"/>
<xs:enumeration value="Casual"/>
<xs:enumeration value="Contract"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>


特别是:

  • 我们已将Person和ContactInfo类的构造型显式设置为XSDcomplexType。EmployeeRecords使用modelGroup标记值来使用“all”结构而不是默认的“sequence”。ContactInfo类还使用memberNames标记来允许属性的元素名称以类名作为前缀。
  • 对于Person类的gender属性,XSDattribute构造型导致生成XSD属性(而不是默认元素)。
  • 为了将gender属性的可能值限制为“male”或“female”,我们创建了Gender类。“Gender”类是原型XSDsimpleType,并使用模式标记值来限制其可能的值。我们也可以通过这种方式使用正则表达式来限制“birthDate”,“email”和电话号码属性的值。
  • 使用XSDchoice构造型允许我们在XSD选择模型组中生成“mobilePhone”和“officePhone”属性作为选项。请注意此modelGroup包含的属性的memberNames如何通过其包含的complexType类来确定。(这发生在modelGroup的每个所有者身上,其中包含多个关联的类。)
  • 图中不太明显的是Person类的属性排序。注意“firstName”和“surName”属性如何在模式中交换它们的位置。这是因为位置标记值已用于修改示例中Person类的属性。


下表详细介绍了UML Profile for XML的功能。标记的值名称以粗体显示,后跟允许的值。如果EA的架构生成器使用了默认值,则会加下划线。

<< XSDschema >>

UML构造
描述   包中的所有类都在一个模式中定义。此构造型可用于指定架构范围的设置。
标记值 anonymousRole :(
true | false)
指定角色名称是否包含在UML属性的元素声明中。
anonymousType :(
true | false)
指定类类型对于属性是否是匿名的。
attributeFormDefault :(
限定|不合格)
确定属性实例是否必须限定。
DefaultNamespace的: 此架构中使用的默认命名空间。此值用于在schema元素中指定默认命名空间属性 (xmlns =)
elementDerivation :(
true | false)
确定是使用XSD扩展还是向下复制继承生成继承。
elementFormDefault :(
合格|不合格)
确定元素实例是否必须限定。
memberNames :(
合格|不合格)
确定从Class属性生成的元素是否具有由相应类名限定的名称。
modelGroup :(
所有|序列|选择)
指定用于生成 complexType 定义的默认XSD模型组
的schemaLocation: 标识架构位置的URI。此值用于导入和包含元素。
目标名称: 唯一标识此架构名称空间的URI。
targetNamespacePrefix: 缩写 targetNamespace 的前缀
版: 此架构的版本。
约束 没有。


<< XSDgroup >>

UML构造
描述 一个XSDgroup与此刻板印象类生成。
标记值 modelGroup :(
序列|选择|全部)
覆盖用于生成此组定义的默认XSD模型。
约束 组类只能将自己与其他组类关联。
组类可以由另一个组类或complexType类关联
该关联应该通过关联链接。 无法继承/聚合组类。


<< XSDtopLevelElement >>

UML构造
描述   创建一个<xs:element>构造,该构造充当XSDcomplexTypeXSDsimpleType类的容器
标记值 没有。
约束 一个XSDtopLevelElement类可以包含一个XSDsimpleTypeXSDcomplexType作为它的子类。当这样的类作为其子类存在时,其所有继承都将被忽略。这个类不能被继承。


<< XSDtopLevelAttribute >>

UML构造
描述 创建一个<xs:attributr>构造,它充当XSDsimpleType类的容器
标记值 使用:(
可选|必需|禁止)
请参阅W3C XML Schema建议。
约束 一个XSDtopLevelAttribute类只能包含一个XSDsimpleType类作为其子类。当这样的类作为其子类存在时,其所有继承都将被忽略。此类只能从一个XSDsimpleType类继承


<< XSDunion >>

UML构造
描述 创建一个<xs:union>构造,它可以充当XSDsimpleType类的容器。
标记值 没有。
约束 一个XSDunion类只能包含XSDsimpleType作为它的子类,可以从其他概括XSDsimpleType只有类。此类概括的所有类都成为属性memberTypes的成员。此类不能具有任何属性或关联。


<< XSDattributeGroup >>

UML构造
描述 创建一个<xsattributeGroup>构造,该构造可以充当构造型XSDattribute的一组元素的容器
标记值 没有。
约束 一个XSDattributeGroup类可以包含铅板的仅元件XSDattribute,只能与其它相关联XSDattributeGroup类。只有XSDcomplexType类可以与此类关联。这个类不能被继承。


<< XSDcomplexType >>

UML构造  
描述 为通用UML类创建complexType定义。这种构造型有助于定制complexType定义 的生成
标记值 memberNames :(
合格|不合格)
确定从UML类属性和关联生成的元素是否具有由此complexType定义的相应类名限定的名称
  混合:(
真|假)
确定此元素是否可能包含混合元素和字符内容。请参阅W3C XML Schema建议。
  modelGroup :(
所有|序列|选择)
覆盖用于生成此complexType定义的默认XSD模型
约束   没有。


<< XSDsimpleType >>

UML构造  
描述   为具有此构造型的类生成XSD simpleType
标记值 推导:(
限制|列表)
指定simpleType的派生。请参阅W3C XML Schema建议。
  长度: 请参阅W3C XML Schema建议。
  的minLength: 请参阅W3C XML Schema建议。
  最长长度: 请参阅W3C XML Schema建议。
  minInclusive: 请参阅W3C XML Schema建议。
  minExclusive: 请参阅W3C XML Schema建议。
  maxInclusive,便会: 请参阅W3C XML Schema建议。
  maxExclusive: 请参阅W3C XML Schema建议。
  totalDigits: 请参阅W3C XML Schema建议。
  参数fractionDigits: 请参阅W3C XML Schema建议。
  空白: 请参阅W3C XML Schema建议。
  图案: 请参阅W3C XML Schema建议。
约束   此类只能与另一个simpleType参与继承关系。它不能具有任何属性或拥有任何关联。如果存在,它们将被忽略。


<< XSDsequence >>

UML构造  
描述   模式生成器创建序列模型组作为此类拥有的属性和关联的容器。模型组又被添加到该类的各自所有者的模型组中。

注意:此类所有者指定的标记值将持久保存到此模型组的子元素。因此,如果memberNamescomplexType不合格,则在添加到该complexType时此模型组的子项也是如此

标记值   没有。
约束   此类必须是单向关联的目标。如果不是,则忽略此类及其连接器,可能使其他模型组类无效。此类忽略继承关系。


<< XSDchoice >>

UML构造  
描述   创建XSD选择元素。有关更多详细信息,请参阅XSDsequence
标记值   没有。
约束   至于XSD序列


<< XSDelement >>

UML构造   属性; AssociationEnd
描述   通过将此构造型应用于UML类属性或AssociationEnd,相应的UML实体将作为父complexType中的元素生成,而不是作为XSD属性生成。
标记值 形式:(
合格|不合格)
覆盖架构的elementFormDefault值。
  位置: 使元素在包含complexType的序列模型组中排序。忽略重复和无效的位置标记值,并导致UML属性的未定义排序。缺少位置值会导致定义的位置按指定分配,其余元素以未定义的顺序填充缺失的位置。
  anonymousRole :(
true | false)
指定角色名称是否包含在UML属性的元素声明中
  anonymousType :(
true | false)
指定类类型对于属性是否是匿名的。
约束   没有。


<< XSDattribute >>

UML构造   属性; AssociationEnd
描述   通过将此构造型应用于UML类属性或AssociationEnd,相应的UML实体将作为父complexType中的XSD属性生成,而不是作为XSD元素生成。
标记值 形式:(
合格|不合格)
覆盖架构的attributeFormDefault值。
  使用:(
禁止|可选|必填)
请参阅W3C XML Schema建议。
  默认: 请参阅W3C XML Schema建议。
  固定: 请参阅W3C XML Schema建议。
约束   属性数据类型不应引用类规范,否则将被忽略。


<< XSDany >>

UML构造   类; 属性
描述   如果应用于UML属性,则会生成XSD anyAttribute元素。如果应用于UML类,则生成XSD任何元素。
标记值 命名空间: 请参阅W3C XML Schema建议。
  processContents :(
skip | lax | strict)
请参阅W3C XML Schema建议。
约束   没有。


<< XSDrestriction >>

UML构造   概括
描述   覆盖默认使用XSD扩展继承并将子类生成为带有限制元素的complexType
标记值   没有
约束   仅适用于UML类父子关系。


请注意,EA Professional和EA Corporate提供此功能。