2016-11-10 8 views
0

Я пытаюсь настроить преобразование в XSD PSM. Одна из настроек содержит использование атрибутов XSDA для атрибутов источника. Это работает отлично, но у меня есть одна настойчивая проблема с перечислениями. My PIM содержит некоторые UML-перечисления и XSDSimpleTypes, которые правильно преобразуются в PSM. Но когда мой PIM содержит атрибут класса с таким перечислением, как тип атрибута, преобразование, похоже, работает нормально, но похоже, что тип атрибута в PSM не связан с генерируемым перечислением. Это заставляет следующее поколение схемы XSD выдавать предупреждение «Warning no XSD type found for:« Color ». По умолчанию: 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

У меня была аналогичная проблема. Я думаю, что основной шаблон XDD 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

 Смежные вопросы

  • Нет связанных вопросов^_^