2016-11-10 30 views
0

我嘗試自定義到XSD PSM的轉換。其中一個定製包含XSDAttributes用於源屬性的用法。這工作得很好,但我有一個關於枚舉的固定問題。 我的PIM包含一些UML枚舉和XSDSimpleTypes,它們被正確轉換爲PSM。但是當我的PIM包含一個具有屬性類型枚舉類型的類屬性時,轉換似乎可以正常工作,但它看起來像PSM中的屬性類型沒有連接到生成的枚舉。這會導致後續的XSD模式生成警告「警告沒有找到'Color'的XSD類型,默認爲:xs:string」。如果我手動在PSM中手動選擇枚舉「顏色」,則架構生成會通過,不會有任何警告。隨着simpleTypes我沒有問題,並運作良好。屬性轉化企業架構師:MDA轉換爲XSD打破枚舉屬性

的可能相關的部分是一類變換

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

你有沒有想過從腳本創建XSD?我不止一次這樣做,並且感覺比使用Sparx中這些尷尬的專有腳本材料更舒服。 –

回答

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% 
} 
+0

太棒了!這解決了我的問題。謝謝 – Stefan