Если вы находитесь на 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]
EDIT
Если вы абсолютно хотите получить значение типа в строковый формат, вы должны пойти проверить элемент метакласса и попросить его имя:
...
[s.eClass().name/] -> result as String, s.eClass() gets the EClass
...
https://stackoverflow.com/ вопросы/48024563/how-to-get-xmiid-from-xmi-files-in-acceleo – kincki