|
|
|
工具 > 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的步骤:
- 通过右键单击项目浏览器中的包,选择要转换为XSD的包。
- 选择Project | 从主菜单生成XML Schema。
- 使用“文件名”字段设置所需的输出文件。
- 使用“编码”字段设置所需的xml编码。
- 单击Generate按钮生成架构。
- 架构生成器的进度将显示在“进度”编辑框中。
示例
以下类图为简单的“员工详细信息”系统建模,旨在存储公司的员工联系信息。显示的类形成“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属性名称的名称。这前面是类名,以使元素唯一。的的minOccurs和maxOccurs的属性设置,以反映属性重要。(注意:如果未指定,minOccurs和maxOccurs默认为1.)如果属性引用另一个类,则元素声明遵循complexType定义,该定义包含对相应complexType的引用。
|
协会 |
为类拥有的每个关联声明
一个元素。元素名称设置为关联角色的名称。的的minOccurs和maxOccurs的体现协会的基数。注意:如果未指定关联的方向,则假定所有者为源。
|
泛化(继承) |
对于单个继承,将生成扩展元素,并将基本属性设置为基类名称。然后,子类的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>构造,该构造充当XSDcomplexType和XSDsimpleType类的容器。
|
标记值
|
|
没有。
|
约束
|
|
一个XSDtopLevelElement类可以包含一个XSDsimpleType或XSDcomplexType作为它的子类。当这样的类作为其子类存在时,其所有继承都将被忽略。这个类不能被继承。
|
<< 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构造
|
|
类
|
描述
|
|
模式生成器创建序列模型组作为此类拥有的属性和关联的容器。模型组又被添加到该类的各自所有者的模型组中。
注意:此类所有者指定的标记值将持久保存到此模型组的子元素。因此,如果memberNames对complexType不合格,则在添加到该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提供此功能。
|
|
|
|