UML 到 XSD 的转换

目录

概述

该转换接受 UML 包作为其源并通过将包中的相应类转换为模式元素生成 XML 模式。 生成的模式存储在名为 schema 的文件夹中(该文件夹在指定为转换目标的项目中)。 包含模式的文件具有与包相同的名称并且扩展名为 .xsd

例如,假定调用了名为 PurchaseOrder 的 UML 包(它包含名为 Address 的类)。 当使用此包作为其源运行此转换时,它会生成以下 XML 模式。

如果选择 UML 模型(它至少有一个包)作为源,则此转换为会具有构造型 <<XSDProfile::schema>> 或关键字 schema 的模型中的每个包生成一个 XML 模式。 如果将转换属性处理未标记的包的值设置为 true,则此转换会为每个包生成一个 XML 模式。

目录

浏览示例模型

软件捆绑了一组可用作 UML 到 XSD 转换的源的示例 UML 模型。在安装 UML 到 XSD 转换后,需要将示例从安装目录复制到工作区。 例如,如果在 RSA/eclipse 中安装了软件,则示例将在文件夹 RSA/eclipse/plugins/com.ibm.xtools.transform.samples.uml2.xsd/examples 中。 请执行以下操作将示例复制到工作区:

  1. 创建简单项目:文件 > 新建 > 项目...,选择简单 > 项目,然后单击下一步
  2. 为该项目命名(比如 uml2xsd.examples),然后单击完成
  3. 复制目录 <install-dir>/rsa/eclipse/plugins/com.ibm.xtools.transform.uml2.xsd/examples,其中 <install-dir> 是安装 Rational Software Development Platform 的位置。
  4. 打开一个或多个模型。双击模型和包会打开相关的图,这些图显示模型、生成的模式以及各种用于生成模式的构造型属性和转换属性。

:打开示例模型时,您可能会看到一个对话框,它提示您该模型正在使用旧版本的 XSDProfile 并询问您是否要迁移至新的概要文件。 您应该单击以迁移至新版本的概要文件。

目录

运行转换

要运行转换:

  1. 在工作区中,创建包含一个或多个包的 UML 模型。 在每个包中创建一些 UML 类。
  2. (可选)执行以下操作:

    如果要创建相当重要的 XML 模式的 UML 模型,则这些步骤是必要的。有关用 UML 对 XML 模式建模的更多信息,请参阅用 UML 对 XML 模式建模:好的做法这一节。

  3. 如果尚未在“建模”透视图中,则请切换至“建模”透视图。
  4. 右键单击模型或包;然后单击转换 > 运行转换 > UML 到 XSD
  5. 在“运行转换”窗口的目标页面上,指定要写入输出 XSD 模式文件的项目。
  6. 单击运行

转换生成 XSD 模式并将它们放在指定项目中名为 schema 的文件夹中。使用“导航器”视图检查生成的模式。

目录

使用 XSD 模板模型

您还可使用 XSD 模板模型创建 UML 模型。其优点是已导入所需的模型库(XSDDataTypes),并且 XSD 概要文件已应用于包。

  1. 创建 UML 模型。
    1. 文件 > 新建 > 项目 >UML 项目
    2. UML 建模项目对话框中,输入项目名称,然后单击下一步
    3. 在结果对话框中,选择 XSD 模型并为模型指定相应的名称。 (在您这个版本的 RSA/RSM 中,可能会在“模板”窗格中看到 XSD 模型的两个实例。 这是已知缺陷,已在较新版本的 RSA/RSM 中解决。选择两个“XSD 模型”项中的一个即可。)
    4. 单击完成
  2. 新建的 UML 模型基于模型模板并且将导入必需的模型库。 现在需要创建一个或多个包。 要完成此操作:
    1. 打开包 XSD 模型构建块
    2. 按住 Control 键的同时拖动包 ${schema.name} 并将它放到根模型上。 这将使用已应用于包的 XSD 转换概要文件创建包。
    3. 使用查找/替换将包的名称从 ${schema.name} 更改为更合适的名称。
    4. 用必需的 UML 类填充这些包。
  3. 如果尚未在“建模”透视图中,则请切换至“建模”透视图。
    1. 右键单击模型或包;然后单击转换 > 运行转换 > UML 到 XSD
    2. 在“运行转换”窗口的目标页面上,指定要写入输出 XSD 模式文件的项目。
    3. 单击运行

转换生成 XSD 模式并将它们放在指定项目中名为 schema 的文件夹中。使用“导航器”视图检查生成的模式。

目录

转换详细信息

转换源

该转换接受至少包含一个包的 UML 模型或一个或多个 UML 包作为源。

转换目标

该转换接受项目作为其目标。

目录

转换属性

该转换定义以下转换属性:

属性 描述
目标名称空间 通过转换生成的模式的目标名称空间。 该属性的值是字符串,例如 http://www.ibm.com/SampleXSDTransformation
目标名称空间前缀 由转换生成的模式的目标名称空间前缀。 该属性的值是字符串,例如 sxt
处理没有构造型或关键字的 UML 类

该属性确定如果 UML 类没有与其相关的构造型或关键字,则转换是否处理该类。

该属性的值可以为 truefalse。缺省情况下,其值设置为 true 并且转换会处理顶级包中的所有类。 (目前,转换不处理嵌套包。)

如果不需要将转换应用于包中的所有类,则需要将其值设置为 false 并且将 XSDProfile 中的相应构造型或关键字应用于想要转换的类。

处理没有构造型或关键字的 UML 包

该属性确定如果 UML 包没有与其相关的构造型或关键字,则转换是否处理该包。

该属性的值可以为 truefalse。缺省情况下,其值设置为 true 并且转换会处理所有顶级包。 (目前,转换不处理嵌套包。)

如果不需要将转换应用于模型中的所有顶级包,则需要将其值设置为 false 并且将 XSDProfile 中的相应构造型 <<schema>> 或关键字 schema 应用于想要转换的包。

将嵌套类隐式转换为匿名类型

该属性确定当嵌入类和嵌套类之间没有显式关联时,转换是否将该嵌套类转换为匿名类型。

该属性的值可以为 truefalse。缺省情况下,其值设置为 false,并且仅当嵌套类与嵌入类有关联时,转换会将该嵌套类转换为匿名类型。 如果其值设置为 true,则所有嵌套类都会转换为匿名类型,XSD 类型对应于包含元素(其类型为这些匿名类型)的嵌套类。

通过将该属性的值设置为 true 来隐式生成匿名类型会有若干限制,因此建议使用它时要非常谨慎。

目录

XSD 概要文件

用 UML 对相当重要的 XML 模式进行建模(UML 到 XSD 转换支持此操作)将使用很小的 UML 构造子集表示 XML 模式元素。 该子集包含以下 UML 元素:属性泛化关系关联依赖关系。要使用此子集表示 XML 模式元素(例如,简单类型复杂类型属性以及元素可复用组等),您需要对源 UML 模型应用 XSD 概要文件并使用此概要文件中的构造型标出该模型,并将构造型的属性设置为适当的值。

以下类图显示了 XSD 概要文件的 UML 模型。

下表描述了构造型及其属性。

构造型 元类扩展 属性 注释
annotation 注释 kind
language
source

注释转换为应用程序信息或文档注释。

属性 kind 确定了注释的类型:documentation appinfo。属性 languagesource 分别指定文档的自然语言和进一步文档的源。

attribute (类的)属性 form
use

如果 UML 属性的类型是简单类型并且其多重性为 [0..1],则该属性转换为复杂类型中或属性组中的属性。

构造型属性 form 确定属性名称在实例文档中是否必须为限定的。其值可以为 qualifiedunqualifieddefault 中的一个。如果为 default,则值缺省为 schemaattributeFormDefault(缺省为 unqualified)。

属性 use 确定属性是 optional 还是 required。其值可以是以下值中的某一个:optionalprohibitedrequired。缺省情况下,其值为 optional。值 prohibited 在当前实施中忽略。

attributeGroup
类转换为属性组。
complexType anonymous
block
final
modelGroup
maxOccurs
minOccurs
mixed

类转换为复杂类型。

属性 anonymous 确定是否在模式中创建顶级复杂类型声明。其值可以为 truefalse。如果为 true,则不会生成类型声明并且该类的任何引用都会转换为属性或元素声明,且属性或元素的类型为匿名类型。 缺省情况下,其值为 false

属性 block 确定是否要阻止类型替换。它可具有以下某个值:#allextensionrestriction 或空格分隔的一列 extensionrestriction。值 #all 防止任何派生类型替代该类型,extension 防止此类型的任何扩展替代该类型,restriction 防止此类型的任何限制替代该类型。列表“extension restriction”具有与 #all 相同的效果。如果没有指定 block 属性,则该值缺省为 schemablockDefault  属性。

属性 final 确定是否能从该类型派生出其他类型。其值可以为 #all 或(extensionrestriction)列表。如果其值为 #all,则不允许派生任何类型。 对于其他特定控制,该值可设置为以空格分隔、包含任意数量关键字( restrictionextension )的列表。它缺省为 schemafinalDefault

属性 modelGroup 确定类型的内容模型。modelGroup 的值可以为 allchoicesequence。缺省值为 sequence

约束如果 modelGroup 的值为 all,则 anonymous 的值必须设置为 false。否则,将会发生约束违例。

minOccursmaxOccurs 的值确定 sequencechoice 组可在复杂类型中出现的最小和最大次数。对于 all 模型组,maxOccurs 必须为 1minOccurs 只能为 01

boolean 属性 mixed 指定复杂类型是否允许混合内容。缺省情况下,其值为 false

element (类的)属性 block
final
form
nillable

属性转换为元素。

属性 final 只应用于全局元素而不应用于局部元素。 它确定是否能从该类型派生出其他类型。 其值可以为 #all 或(extension | restriction)的列表。如果其值为 #all,则不允许派生任何类型。 对于其他特定控制,该值可设置为以空格分隔、包含任意数量关键字( restrictionextension )的列表。它缺省为 schemafinalDefault

构造型属性 form 确定元素名称在实例文档中是否必须为限定的。其值可以为 qualifiedunqualifieddefault 中的一个。如果它是 default,则值缺省为 schemaelementFormDefault(缺省为 unqualified)。

boolean 属性 nillable 确定 xsi:nil 是否能用在该元素的实例中。缺省情况下,其值为 false

enumeration anonymous

如果类与表示简单类型的其他类有泛化关系,则该类转换为 XSD 枚举。

属性 anonymous 确定是否在模式中创建具有枚举面的顶级简单类型声明。其值可以为 truefalse。如果为 true,则不会生成类型声明并且该类的任何引用都会转换为属性或元素声明,且属性或元素的类型为匿名类型。 缺省情况下,其值为 false

global

具有该构造型的类转换为顶级元素或属性声明。 该类只能有一个属性。 如果属性具有 <<attribute>> 构造型或关键字,则该类转换为顶级属性。 否则,它会成为顶级元素。

该元素或属性的名称与该特性的名称相同,并且类型是该特性的类型。

listOf 依赖关系
依赖关系的客户端转换为项类型为依赖关系供应端的 XSD 列表。 两个类之间只能有一个这样的依赖关系,每个类表示一个简单类型。
modelGroup anonymous
modelGroup

类转换为具有 sequence 内容模型的可复用命名模型组。

属性 anonymous 确定是否在模式中创建顶级组声明。其值可以为 truefalse。如果为 true,则不会生成组声明。 且该类的任何引用都会转换为嵌套模型组。 如果值为 false,则该类的引用转换为模型组引用。 缺省情况下,其值为 false

属性 modelGroup 确定组的内容模型。modelGroup 的值可以为 allchoicesequence。缺省值为 sequence

约束 如果 modelGroup 的值是 all,则 anonymous 的值必须设置为 false。否则,将会发生约束违例。

schema attributeFormDefault
blockDefault
elementFormDefault
finalDefault
targetNamespace
targetNamespacePrefix

包及其内容转换为 XSD 模式。 包的名称成为模式(文件)的名称。

属性 attributeFormDefault 指定局部属性声明是否应该使用限定名。其值可以为 qualifiedunqualified。缺省值为 unqualified

属性 blockDefault 设置复杂类型和元素声明中使用的 block 属性的缺省值。block 属性确定是否阻塞元素替代或类型替代。它可具有以下值:#all 或空格分隔的一个或多个(extensionrestriction substitution)。

属性 elementFormDefault 指定局部元素声明是否应该使用限定名。 其值可以为 qualifiedunqualified。缺省值为 unqualified

属性 finalDefault 设置复杂类型、简单类型和元素声明中使用的 final 属性的缺省值。final 属性确定是否不允许类型派生。它可具有以下值:#all 或空格分隔的一个或多个(extensionrestrictionsubstitutionlistunion)。

如果设置 targetNamespacetargetNamespacePrefix 的值,则这些值将会分别覆盖为相应转换属性目标名称空间目标名称空间前缀)设置的那些值。

simpleType anonymous
final
fractionDigits
length
maxExclusive
maxInclusive
maxLength
minExclusive
minInclusive
minLength
pattern
totalDigits
whiteSpace

如果类与 XSD 内置数据类型、其他简单类型或 XSD 枚举类型有泛化关系,则类转换为简单类型。

属性 anonymous 的值可以是 truefalse。如果为 true,则类看作匿名类型并且不会生成顶级类型声明。

属性 final 确定是否能从该类型派生出其他类型。其值可以为 #all 或(extensionrestrictionlistunion)的列表。如果其值为 #all,则不允许派生任何类型。 对于更特定的控制,该值可设置为空格分隔的一列任意关键字(restrictionextensionlistunion)。

其余属性表示 XSD 模式定义的面。 使用这些面,可以指定值的有效范围,约束值的长度和精度,指定有效值必须匹配的正则表达式或指定从内置 XSD 类型通过限制派生出的简单类型的空格处理。 有关更多详细信息,请参阅表面的含义

请注意:不是所有这些面都适用于所有简单类型。例如,对于从 stringnormalizedStringtoken 派生出的简单类型,适用面为 lengthminLengthmaxLengthpatternwhitespace。有关更多详细信息,请参阅表简单类型和适用面

unionOf 依赖关系
依赖关系的客户端转换为 XSD 联合,依赖关系的供应端作为其某个成员。 表示简单类型的类可有多个这种对不同(简单类型)类的依赖关系。
wildcard (类的)属性 processContents
namespace

UML 属性转换为元素通配符。如果该属性除了有 wildcard,还有关键字 attribute 或构造型 <<attribute>>,则它转换为属性通配符。

属性 processContents 确定如何严格验证替换属性或元素。如果为 skip,则模式处理器不会执行验证。如果为 lax,则模式处理器会验证它可找到声明的属性或元素,并在属性或元素无效时报错。 如果为 strict,则模式处理器会尝试查找与名称空间相关的模式文档并验证所有的属性或元素。 缺省情况下,该值被设置为 strict

属性 namespace 指定替换属性或元素中可能在哪些名称空间中。允许的值为(##any##otherlist of anyURI##targetNamespace##local)中的一个。如果为 ##any,则替换元素或属性可在任何名称空间中,也可不在名称空间中。如果为 ##other,则替换元素或属性可在除文档的目标名称空间外的任何名称空间中,但是它们必须在某个名称空间中。 如果模式文档没有目标名称空间,则替换元素或属性可在任何名称空间中,但是它们必须在一个名称空间中。 否则,它可为空格分隔的一列值,这些值可为以下任一值或所有值:##targetNamespace#local 或特定名称空间。##targetNamespace 指示替换元素或属性可能在模式文档的目标名称空间中,而 ##local 指示替换元素或属性可能不在任何名称空间中。

目录

关键字

如果正在建模的模式不需要用少量详细信息指定其元素,则您可能希望使用关键字代替构造型。 以下表描述了 UML 到 XSD 转换支持的关键字。

关键字 可用于 UML 元素 注释
annotation 注释 注释转换为“appinfo”或“documentation”注释。
attribute 的)属性 如果属性的多重性为 [0..1],则该属性转换为复杂类型的属性。
attributeGroup 类转换为属性组。
complexType 类转换为复杂类型。
element 属性 该属性转换为复杂类型的元素。
enumeration 如果类与表示简单类型的其他类有泛化关系,则该类转换为 XSD 枚举。
global

具有该关键字的类转换为顶级元素或属性声明。 该类只能有一个属性。 如果属性具有 <<attribute>> 构造型或关键字 attribute,则类转换为顶级属性。 否则,它会成为顶级元素。

元素或属性的名称派生自属性的名称,且类型派生自属性的类型。

listOf 表示两个简单类型的两个类之间的依赖关系 依赖关系的客户端转换为项类型为依赖关系供应端的 XSD 列表。 两个类之间只能有一个这样的依赖关系,每个类表示一个简单类型。
modelGroup 类转换为具有 sequence 内容模型的可复用命名模型组。
schema

包及其内容转换为 XSD 模式。 包的名称成为模式(文件)的名称。

如果使用关键字 schema,则需要通过将转换属性目标名称空间目标名称空间前缀)分别设置为相应的值来指定目标名称空间和目标名称空间前缀。

simpleType 如果类与 XSD 内置数据类型或其他简单类型有泛化关系,则类转换为简单类型。
unionOf 表示两个简单类型的两个类之间的依赖关系 依赖关系的客户端转换为 XSD 联合,依赖关系的供应端作为其某个成员。 表示简单类型的类可有多个这种对不同(简单类型)类的依赖关系。
wildcard 属性

UML 属性转换为元素通配符。如果该属性除了有关键字 wildcard,还有关键字 attribute,则它转换为属性通配符。

目录

模型库:XSD 内置数据类型

XML 模式建议中构建了四十四个简单类型。 这些简单类型表示常用数据类型(例如字符串、数字、日期和时间值),并且在 XML 1.0 中还包含了属性类型的过去类型。 XSD 还提供十二个约束,可用于指定简单类型的值的有效范围,约束值的长度和精度,枚举一列有效值或指定有效值必须匹配的正则表达式。

您可从内置类型或其他简单类型通过限制派生新的简单类型,方法是将面设置为相应的值。 如果执行此操作,则有必要表示 UML 模型中可用的内置类型。

内置简单类型建模为类并且在称为 XSDDataTypes 的模型库中提供。 您需要在模型中导入 XSDDataTypes 库以访问这些类型。 要导入 XSDDataTypes 模型库,请在模型浏览器中右键单击模型的根(模型自身),选择导入模型库...,然后从下拉列表选择 XSDDataTypes

要定义新的简单类型(用户定义的简单类型),需要从 XSDDataTypes 模型的相应类特殊化并且使用 <<simpleType>> 构造型的属性约束定义类型的值。 例如:

您可以将 Quantity 的最大值设置为100(比如说),方法是将 <<simpleType>>maxInclusive 属性设置为 100

目录

UML 到 XSD 映射规则

用 UML 对 XML 模式建模的目的是创建 XML 模式的可视表示法,然后使用 UML 到 XSD 转换生成模式。 分析表明 XML 模式的多数基本功能可由 UML 模型元素表示。 下表说明 UML 中出现的概念和 XML 模式定义(XSD)中相应概念之间的映射子集。

UML 概念 XML 模式概念
带有前缀的单个名称空间
类型和可复用组
  • 复杂类型和匹配元素声明
  • 简单类型
  • 属性组、命名模型组和替换组
枚举 将具有枚举面的 XSD 字符串简单类型限制为等同于 UML 枚举字面值。请注意:这与发生在已应用 <<enumeration>> 构造型(来自于 XSD 概要文件)的 UML 类上的情况不同。使用构造的 UML 类允许较多的常规 XSD 枚举。
类的属性 复杂类型的元素和属性
关联(聚集) 包含元素(复杂类型)的子元素
泛化关系 类型派生
  • 通过复杂类型扩展进行的派生
  • 通过复杂类型限制进行的派生
  • 通过简单类型限制进行的派生
对象标识 用户指定的关键字段或显式标识机制(尚未实施)。

映射规则:包 -> XSD 模式

UML 元素 XSD 元素 注释
具有构造型 <<schema>> 的包 具有目标名称空间和目标名称空间前缀的模式 包中的内容在 .xsd 文件中生成模式。模式文件名与该包的名称相同。

<<schema>> 构造型的属性(attributeFormDefault 和 elementFormDefault)可用于指定所生成模式上的 attributeFormDefault 和 elementFormDefault 属性。

如果使用关键字 schema 而不是使用构造型,您应该通过将转换属性的值分别设置为 Target NamespaceTarget Namespace Prefix 来提供目标名称空间及其前缀

映射规则:类 -> 复杂类型,属性 -> 元素和属性 -> 属性

UML 元素 XSD 元素 注释
具有构造型 <<complexType>> 的类 复杂类型 如果构造型属性 modelGroup 未设置为某个可能的值(allchoicesequence),则会生成具有 sequence 模型组的复杂类型。
具有关键字 complexType 的类 复杂类型 生成具有 sequence 模型组的复杂类型。
没有关键字或构造型的类 复杂类型 仅当转换属性 Process unmarked class 的值设置为 true 时,才生成复杂类型。否则,忽略该类。如果生成了复杂类型,则其模型组设置为 sequence
属性 复杂类型的元素
具有 <<attribute>> 构造型或关键字 attribute 的属性。 复杂类型的属性

仅当属性类型为简单类型并且具有多重性 [0..1] 时,属性转换为属性。 否则,它会转换为元素。

如果提供缺省值,则属性转换为具有缺省值的可选属性。 如果把属性设为只读并且提供缺省值,则它会转换为其值固定为缺省值的属性。 在这两种情况下,您都需要将属性的多重性设置为 [0..1]。

您可使用 <<attribute>> 构造型的属性 use 来把属性设为 optional 或 required。 如果将 use 的值设置为 required,提供缺省值并且把属性设为只读,则将会忽略缺省值和只读规范。

映射规则:具有 <<global>> 的类 -> 全局元素或属性

UML 元素 XSD 元素 注释
包含一个属性、具有构造型 <<global>> 或关键字“global”的类。 全局(顶级)元素或属性。

该类只能有一个属性。 如果属性具有 <<attribute>> 构造型或关键字 attribute,则类转换为顶级属性。 否则,它会成为顶级元素。

元素或属性的名称派生自属性的名称,且类型派生自属性的类型。


映射规则: <<global>> 类 -> 替代组之间的泛化关系

UML 元素 XSD 元素 注释
已应用构造型 <<global>> 的类之间的泛化关系。 全局元素组成的替代组,这些全局元素由具有 <<global>> 构造型的类来表示。 要构成全局元素的替代组,这些全局元素的类型(类)本身必须处于同等的泛化关系中。

在下面的示例中,全局元素 dress 是替代组的头,而全局元素 shirt 和 trouser 是成员。请注意:这些元素的类型所处的泛化关系与全局元素之间的泛化关系是同等的。


映射规则:类 -> 简单类型

UML 元素 XSD 元素 注释
具有构造型 <<simpleType>> 或关键字 simpleType 的类

用户定义的简单类型。

内置简单类型或其他用户定义的简单类型的限制

必须与内置简单类型、其他用户定义的简单类型或 XSD 枚举类型具有泛化关系。

映射规则:类 -> XSD 枚举

UML 元素 XSD 元素 注释
具有构造型 <<enumeration>> 或关键字 enumeration 的类 XSD 枚举
指定了枚举面的简单类型
必须与内置简单类型或其他用户定义的简单类型有泛化关系。

映射规则:UML 枚举 -> XSD 枚举

UML 元素 XSD 元素 注释
UML 枚举 XSD 枚举,它是具有限制基类型 xsd:string 并指定了枚举面的简单类型 不需要与任何其他简单类型有任何泛化关系。

映射规则:类 -> 可复用组:模型组和属性组

UML 元素 XSD 元素 注释
具有构造型 <<modelGroup>> 的类 命名模型组 如果构造型属性 modelGroup 未设置为某个可能的值(allchoicesequence),则会生成具有 sequence 模型组的模型组。
具有关键字 modelGroup 的类 命名模型组 生成具有 sequence 模型组的命名模型组。
具有构造型 <<attributeGroup>> 或关键字 attributeGroup 的类 属性组 类的每个属性转换为属性组的成员,前提条件为它是能转换为简单类型的类型并且具有多重性 [0..1]。 否则,忽略该属性。

由于属性只能转换为 XSD 属性,因此严格来说没有必要将构造型 <<attribute>> 应用于属性。 但是,如果想要指定属性的其他属性(例如 required、form 等),则需要应用 <<attribute>> 构造型并且将构造型的属性设置为相应值。

映射规则:类派生

UML 元素 XSD 元素 注释
类 A 派生自另一类 B。

复杂类型 B,它是复杂类型 A 的复杂内容扩展。

类 A 或类 B 可具有构造型 <<complexType>> 或关键字 complexType

类 A 或类 B 都不能具有“all”模型组或内容模型。 尝试扩展具有“all”模型组的类会导致约束违例。

类 B 不能具有构造型 <<modelGroup>><<attributeGroup>>,也不能具有关键字 modelGroupattributeGroup。换句话说,复杂类型不能扩展模型组或属性组。

类 A 派生自另一个具有 <<simpleType>> 构造型或关键字 simpleType 的类 B。

复杂类型 B,它是简单类型的简单内容扩展。类 B 的任何属性都成为简单内容扩展的属性。

从简单类型派生的唯一目的是添加属性。 因此,类 B 的属性的类型必须是简单类型,并且其多重性必须是 [0..1]。否则,该模型将违反约束。

映射规则:关联 -> 复杂类型元素

UML 元素 XSD 元素 注释
类 A -> 类 B 的关联(直接或组装关系) 类型为复杂类型 B 的复杂类型 A 中的元素 元素名称由关联关系端的角色名称决定。

映射规则:属性 -> 复杂类型元素

UML 元素 XSD 元素 注释
类 A 包含一个或多个类型为类 B 的属性 类型为复杂类型 B 的复杂类型 A 中的元素 元素名称由属性的名称决定。

映射规则:关联 -> 模型组引用和属性组引用

UML 元素 XSD 元素 注释

从类 A 到具有 <<modelGroup>> 构造型的类 B 的关联(直接关联或组装关系)。

类 A -> 具有 <<attributeGroup>> 构造型的类 C。

复杂类型 A 中的模型组引用。

复杂类型 A 中的属性组引用。


从具有 <<modelGroup>> 构造型的类 A 到同样具有 <<modelGroup>> 构造型的类 B 的关联(直接关联和组装关系) 模型组中由类 A 表示的模型组引用
从具有 <<attributeGroup>> 构造型的类 A 到同样具有 <<attributeGroup>> 构造型的类 B 的关联(直接关联或组装关系) 属性组中由类 A 表示的属性组引用



映射规则:依赖关系 -> 列表和联合类型

UML 元素 XSD 元素 注释
两个简单类型之间构造型 <<listOf>> 或关键字 listOf 的依赖关系

列表类型。

依赖关系的客户端转换为简单类型(它是依赖关系供应端的列表)

依赖关系的客户端和供应端都必须为简单类型并且在它们之间只能有一个 <<listOf>> 依赖关系。 这两个类之间不应该有任何其他关系。

客户端简单类型和一个或多个供应端之间构造型 <<unionOf>> 或关键字 unionOf 的依赖关系 联合类型。

依赖关系的客户端转换为简单类型(它是依赖关系供应端的联合)。

依赖关系的客户端和供应端都必须为简单类型并且在它们之间可有一个或多个 <<unionOf>> 依赖关系。 这些类之间不应该有任何其他关系。

目录

映射规则:类 -> 匿名复杂类型

UML 元素 XSD 元素 注释

具有构造型 <<complexType>> 和构造型属性 anonymous = true 的类 A,且它由表示复杂类型的另一个类 B 引用。

类 A 转换为匿名复杂类型。

引用转换为复杂类型(由类 B 表示)中的属性或元素。 元素或属性的类型由该匿名类型定义。

元素或属性名称由关联关系端的角色名称或属性名称决定。

由于类 A 指定为匿名,因此没有为该类生成顶级复杂类型声明。

映射规则:类 -> 匿名简单类型

UML 元素 XSD 元素 注释
具有构造型 <<simpleType>> 并且构造型属性 anonymous = true 的类 A,它由表示复杂类型的另一类 B 引用

类 A 转换为匿名简单类型。

引用转换为复杂类型(由类 B 表示)中的属性或元素。 元素或属性的类型由该匿名类型定义。

元素或属性名称由关联关系端的角色名称或属性名称决定。

由于类 A 指定为匿名,因此没有为该类生成顶级简单类型声明。

映射规则:类 -> 匿名枚举

UML 元素 XSD 元素 注释
具有构造型 <<enumeration>> 并且构造型属性 anonymous = true 的类 A,它由表示复杂类型的另一类 B 引用

类 A 转换为匿名枚举。

引用转换为复杂类型(由类 B 表示)中的属性或元素。 元素或属性的类型由该匿名类型定义。

元素或属性名称由关联关系端的角色名称或属性名称决定。

由于类 A 指定为匿名,因此没有为该类生成具有枚举面的顶级简单类型声明。

映射规则:匿名模型组的引用 -> sequence 和 choice 组的嵌套

UML 元素 XSD 元素 注释

具有构造型 <<modelGroup>> 且属性值 anonymous = true 的类 A 和类 B 之间的关联(定向或组装关系)。

表示类 A 的复杂类型(包含类 B 表示的命名模型组的模型组)。

仅当 A 和 B 都没有内容模型 all 时,该映射有效。
具有构造型 <<modelGroup>> 的类 A 和具有构造型 <<modelGroup>> 的类 B(且属性值 anonymous = true)之间的关联(定向或组装关系)。 表示类 A 的命名模型组(包含类 B 表示的命名模型组的模型组)。 仅当 A 和 B 都没有内容模型 all 时,该映射有效。

还可使用类属性对以上模型组的引用建模。

UML 元素 XSD 元素 注释
包含类型为类 B(具有构造型 <<modelGroup>> 且属性值 anonymous = true)的属性的类 A。 表示类 A 的复杂类型(包含类 B 表示的命名模型组的模型组)。 仅当 A 和 B 都没有内容模型 all 时,该映射有效。
包含类型为类 B(具有构造型 <<modelGroup>> 且属性值 anonymous = true)的属性的类 A(具有构造型 <<modelGroup>> )。 表示类 A 的命名模型组(包含类 B 表示的命名模型组的模型组)。 仅当 A 和 B 都没有内容模型 all 时,该映射有效。

映射规则:嵌套类 -> 匿名复杂类型

UML 元素 XSD 元素 注释
包含嵌套类 B 的类 A,且 A 和 B 之间有关联。 为匿名类型 B 的复杂类型 A 中的元素。

在嵌套类和被嵌套类之间必须存在关联。

如果类 A 包含类型 B 的属性而不是关联,则得到相同的模式组件。



映射规则:嵌套类 -> 匿名简单类型

UML 元素 XSD 元素 注释
包含嵌套类 B(具有构造型 <<simpleType>> 或关键字 simpleType)的类 A,且 A 和 B 之间有关联。 为匿名简单类型 B 的复杂类型 A 中的元素。

在嵌套类和被嵌套类之间必须存在关联。

如果类 A 包含类型 B 的属性而不是关联,则得到相同的模式组件。

映射规则:UML 注释(Comment) -> 注释(Annotation)

UML 元素 XSD 元素 注释
注释 注释 UML 元素中的注释转换为 XSD 文档注释。
具有 <<annotation>> 构造型的注释 注释 注释的类型 documentationappinfo 取决于 <<annotation>> 构造型的 kind 属性的值。如果 kind 的值为 documentation,则创建 documentation 元素。如果该值为 applicationInfo,则创建 appinfo 元素。kind 的缺省值是 documentation




映射规则:属性 -> 元素通配符

UML 元素 XSD 元素 注释
具有构造型 <<wildcard>> 或关键字 wildcard 的属性。 在封装复杂类型或模型组中的元素通配符。 替换元素可能位于的名称空间,而如何严格地验证替换是由 <<wildcard>> 构造型的属性 namespaceprocessContents 确定的。



映射规则:属性 -> 属性通配符

UML 元素 XSD 元素 注释
具有构造型 <<attribute>><<wildcard>> 或关键字、属性和通配符的属性。 在封装复杂类型或属性组中的属性通配符 替换属性可能位于的名称空间,而如何严格地验证替换元素是由 <<wildcard>> 构造型的属性 namespaceprocessContents 确定的。



用 UML 对 XML 模式建模:好的做法

用 UML 对 XML 模式建模的目的是创建 XML 模式的可视表示法,然后使用 UML 到 XSD 转换生成模式。 通常,您的模型具有表示 XSD 元素的元素以及与 XSD 无关的元素。 建议构建这样的模型时牢记以下准则:

  1. 将 XSD 相关元素和非 XSD 元素放在不同的包中。
  2. 将属于不同目标名称空间的 XSD 相关元素放在不同的包中。
  3. XSD 概要文件应用于包含 XSD 相关元素的包。或者,也可以将 XSD 概要文件应用于模型自身。
  4. XSD 概要文件中的 <<schema>> 构造型应用于包含 XSD 相关元素的每个包。
  5. 通过设置 <<schema>> 构造型的属性 targetNamespacetargetNamespacePrefix 的相应值,指定目标名称空间及其前缀。
  6. 使用转换属性控制 UML 到 XSD 转换需要处理的这组包和类的内容。

目录

局限

该转换尚未实施生成以下 XSD 元素的规则:

目录

附录 A. 面的含义

含义
fractionDigits 小数数字的数量必须小于等于 x
length 值的长度必须是 x
maxExclusive 值必须小于 x
maxInclusive 值必须小于等于 x
maxLength 值的长度必须小于等于 x
minExclusive 值必须大于 x
minInclusive 值必须大于等于 x
minLength 值的长度必须大于等于 x
pattern x 是值可能匹配的一个正则表达式
totalDigits 有效数字的位数必须小于等于 x
whitespace 模式处理器应该根据 x 来保留、替换和压缩空格

目录

附录 B:简单类型和可用面

下表枚举了内置数据类型和可用面。 请注意:尽管 W3C 建议将 enumeration 指定为面,但是表中未包含 enumeration。我们使用具有构造型 <<enumeration>> 的类或使用 UML 枚举表示 enumeration

数据类型(限制基类型) 可用面
ENTITY、ID 和 IDREF length、maxlength 和 minlength
whitespace 固定为值 collapse
pattern 为 [\i-[:]][\c-[:]]*
IDREFS length、maxlength 和 pattern
minlength 为 1
whitespace 固定为值 collapse
Name length、maxlength 和 minlength
whitespace 为 collapse
pattern 为 \i\c*
NCName length、maxlength 和 minlength
whitespace 为 collapse
pattern 为 [\i-[:]][\c-[:]]*
NMTOKEN length、maxlength 和 minlength
whitespace 固定为值 collapse
pattern 为 \c+
NMTOKENS length 和 maxlength
minlength 为 1
whitespace 固定为值 collapse
NOTATION length、maxlength、minlength 和 pattern
whitespace 固定为值 collapse
QNAME length、maxlength、minlength 和 pattern
whitespace 固定为值 collapse
anyURI、base64Binary 和 hexBinary length、maxlength、minlength 和 pattern
whitespace 固定为值 collapse
language length、maxlength 和 minlength
whitespace 为 collapse
pattern 为 ([a-zA-Z]{2}|[iI]-[a-zA-Z]+|[xX]-[a-zA-Z]{1,8})(-[a-zA-Z]{1,8})*
float 和 double maxExclusive、maxInclusive、minExclusive、minExclusive 和 pattern
whitespace 固定为值 collapse
decimal maxExclusive、maxInclusive、minExclusive、minExclusive、fractionDigits、totalDigits 和 pattern
whitespace 固定为值 collapse
整数数据类型(integer、byte、int、long、negativeInteger、nonNegativeInteger、nonPositiveInteger、positiveInteger、unsignedByte、unsignedInt、unsignedLong 和 unsignedShort)

maxExclusive、maxInclusive、minExclusive、minExclusive、totalDigits、pattern
fractionDigits 固定为值 0
whitespace 固定为值 collapse
日期时间数据类型(date、time、dateTime、gYear、gYearMonth、gMonth、gMonthDay、gDay 和 duration)
maxExclusive、maxInclusive、minExclusive、minExclusive 和 pattern
whitespace 固定为值 collapse
string、normalizedString 和 token length、maxLength、minLength 和 pattern
对于 string,whitespace 为 preserve 。对于 normalizedString,whitespace 为 replace ,对于 token,whitespace 为 collapse


目录