我如何获得 "xmi:type" 值
How do I get "xmi:type" value
我正在尝试生成 java 程序以使用 Acceleo 从 UML 模型实现状态机。
在我的模型中,我有如下条目:--
<subvertex xmi:type="uml:State" xmi:id="{BB1999-E740-4e7d-A1BE-F099BEXYD970}" name="WaitingApproval">
我想检查 "xmi:type" 的值,但我不知道如何从 Acceleo 访问它。 (我已经尝试了我能想到的所有获取组合,如果我转储整个顶点,该类型只会作为较长字符串的一部分出现。)
如果您处于 subvertex
关系,则您必须处于 Region
。 xmi:type
是 XMI 处理多态引用的方式。由于 subvertex
被定义为 Vertex [*]
,XMI 必须指定集合中每个元素的类型。要检查此字段,您只需测试元素的类型(使用 oclIsTypeOf
或 oclIsKindOf
)
所以,从 Region
:
[template public test(r : Region)]
[r.subvertex->filter(State)/] --> filter all States from the subvertex collection
which is equ. to
[r.subvertex->select(oclIsKindOf(State))/]
and if you want only the State elements (no subclasses)
[r.subvertex->select(oclIsTypeOf(State))/]
[/template]
此外,您可以通过添加模板保护在不同的模板中处理它们:
[template public test(r : Region)]
[r.subvertex.test2()/]
[/template]
[template public test2(s : Vertex) ? (oclIsKindOf(State))]
[s/] is a state for sure
[/template]
你也可以通过重写上面的模板来避免守卫:
[template public test(r : Region)]
[r.subvertex.test2()/]
[/template]
[template public test2(v : Vertex)/]
[template public test2(s : State)]
[s/] is a state for sure
[/template]
编辑
如果你绝对想要字符串格式的类型值,你必须去检查元素元类并询问它的名称:
...
[s.eClass().name/] -> result as String, s.eClass() gets the EClass
...
我正在尝试生成 java 程序以使用 Acceleo 从 UML 模型实现状态机。
在我的模型中,我有如下条目:--
<subvertex xmi:type="uml:State" xmi:id="{BB1999-E740-4e7d-A1BE-F099BEXYD970}" name="WaitingApproval">
我想检查 "xmi:type" 的值,但我不知道如何从 Acceleo 访问它。 (我已经尝试了我能想到的所有获取组合,如果我转储整个顶点,该类型只会作为较长字符串的一部分出现。)
如果您处于 subvertex
关系,则您必须处于 Region
。 xmi:type
是 XMI 处理多态引用的方式。由于 subvertex
被定义为 Vertex [*]
,XMI 必须指定集合中每个元素的类型。要检查此字段,您只需测试元素的类型(使用 oclIsTypeOf
或 oclIsKindOf
)
所以,从 Region
:
[template public test(r : Region)]
[r.subvertex->filter(State)/] --> filter all States from the subvertex collection
which is equ. to
[r.subvertex->select(oclIsKindOf(State))/]
and if you want only the State elements (no subclasses)
[r.subvertex->select(oclIsTypeOf(State))/]
[/template]
此外,您可以通过添加模板保护在不同的模板中处理它们:
[template public test(r : Region)]
[r.subvertex.test2()/]
[/template]
[template public test2(s : Vertex) ? (oclIsKindOf(State))]
[s/] is a state for sure
[/template]
你也可以通过重写上面的模板来避免守卫:
[template public test(r : Region)]
[r.subvertex.test2()/]
[/template]
[template public test2(v : Vertex)/]
[template public test2(s : State)]
[s/] is a state for sure
[/template]
编辑
如果你绝对想要字符串格式的类型值,你必须去检查元素元类并询问它的名称:
...
[s.eClass().name/] -> result as String, s.eClass() gets the EClass
...