我尝试自定义转换到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"
[...]
}
你能告诉我在哪里搞砸了我的转变吗?
此致 斯蒂芬
答案 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%
}