2016-11-10 4 views
0

XSD PSMへの変換をカスタマイズしようとしました。カスタマイズの1つに、ソース属性のXSDAttributesの使用法が含まれています。これは非常にうまくいくが、私は列挙に関する単一の執拗な問題がある。 私のPIMには、PSMに正しく変換されたいくつかのUML列挙とXSDSimpleTypesが含まれています。しかし、私のPIMが属性タイプのような列挙型を持つクラス属性を含んでいる場合、変換はうまくいくようですが、PSMの属性タイプが生成されたenumに接続されていないように見えます。これにより、次のXSDスキーマ生成時に警告が表示されます。「XSD型が見つかりません: 'Color'。デフォルトはxs:string」です。 PSMで手動で列挙型 "色"を手動で選択すると、スキーマの生成は警告なしで行われます。 simpleTypesでは問題はなく、うまく動作します。Enterprise Architect: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を作成する方法について考えたことはありますか?私はこれを2回以上行い、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

関連する問題