Enterprise Architect:MDA转换为XSD会破坏枚举属性

时间:2016-11-10 15:03:16

标签: transformation enterprise-architect

我尝试自定义转换到XSD PSM。其中一个自定义包含源属性的XSDAttributes用法。这工作得很好,但我对枚举有一个坚持不懈的问题。 我的PIM包含一些UML枚举和XSDSimpleTypes,它们可以正确转换为PSM。但是当我的PIM包含一个带有枚举属性类型的类属性时,转换似乎工作正常,但看起来PSM中的属性类型没有连接到生成的枚举。这会导致后续生成的XSD架构抛出警告"警告没有找到XSD类型:'颜色'。默认值为:xs:string"。如果我手动选择枚举"颜色"在PSM中手动生成模式生成而没有任何警告。使用simpleTypes我没有问题并且运行良好。

属性转换的可能相关部分是

Attribute {
  [...]
  name=%qt%$attName%qt%
  scope="Public"
  type=%qt%%attType%%qt%
  stereotype="XSDattribute"

类转换的可能相关部分是

%if elemType == "Class"%
  Class
%else%
  Enumeration
%endIf%
  {
    name=%qt%%className%%qt%

中介文件的相关部分是:

Class
{
  name="Apple"
  stereotype="XSDcomplexType"
  [...]
Attribute
{
  [...]
  name="color"
  scope="Public"
  type="Color"
  stereotype="XSDattribute"
  [...]
}
}

Enumeration
{
  [...]
  name="Color"
  stereotype="enumeration"
  [...]
}

你能告诉我在哪里搞砸了我的转变吗?

此致   斯蒂芬

1 个答案:

答案 0 :(得分:0)

我有类似的问题。我认为基本的XSD MDA模板已被破坏,因为它们将枚举作为元类型引入,不再是元类型类的构造型。

我在这里做了什么来解决它:
班级模板:

%if elemType != "Class" and elemType != "Enumeration" and elemType != "DataType"%
%endTemplate%


Class
{
  name=%qt%%className%%qt%
    %if classStereotype=="enumeration" or elemType == "Enumeration"%
      stereotype="enumeration"
    %elseIf elemType == "DataType"%
      stereotype="XSDsimpleType" 
    %else%
      stereotype="XSDcomplexType"
    %endIf%
  notes=%qt%%qt%
  %TRANSFORM_CURRENT("name","stereotype","notes")%
  %TRANSFORM_REFERENCE("XSDClass")%
%list="Attribute" @separator="\n" @indent="  "%
}

%list="Connector" @separator="\n" @indent="  "%

属性模板:

Attribute
{
  %TRANSFORM_REFERENCE()%
  %TRANSFORM_CURRENT("scope","type","notes")%
  scope="Public"
  type=%qt%%attType%%qt%
  notes=%qt%%qt%
%if attLowerBound!=""%
  Tag
  {
    name="minOccurs"
    value=%qt%%attLowerBound=="*" ? "unbounded" : value%%qt%
  }
%endIf%
%if attUpperBound!=""%
  Tag
  {
    name="maxOccurs"
    value=%qt%%attUpperBound=="*" ? "unbounded" : value%%qt%
  }
%endIf%
}