gpt4 book ai didi

java - Xtext:将模型导出为 XMI/XML

转载 作者:行者123 更新时间:2023-12-02 03:51:29 26 4
gpt4 key购买 nike

我已经用 Xtext 定义了 DSL。假设它看起来像这样:

Model:
components+=Component*
;

Component:
House | Car
;

House:
'House' name=ID
('height' hubRadius=DOUBLE)? &
('width' hubRadius=DOUBLE)?
'end' 'House'
;

Car:
'Car' name=ID
('maxSpeed' hubRadius=INT)? &
('brand' hubRadius=STRING)?
'end' 'Car'
;

在生成的基于 DSL 的 Eclipse IDE 中,我实现了一个模型。假设它如下所示:

House MyHouse
height 102.5
width 30.56
end House

Car MyCar
maxSpeed 190
brand "mercedes"
end Car

我现在想将该模型导出为 XMI 或 XML 文件。

我想要这样做的原因是,我有另一个工作流程,它允许我使用 XMI/XML 文件动态更改模型参数。因此,我无需重新定义模型,只需将 XML/XMI 文件传递​​到工作流程,工作流程会自动执行此操作。

简短示例:DSL 允许定义组件 HouseCarHouse 允许使用参数 widthheightCar 允许使用参数 maxSpeed品牌(参见上面的语法)。

所以在我所说的工作流程中,参数将使用不同的值进行更改。例如,我正在寻找的生成的 XML 如下所示:

<model>
<component name='House'>
<param name='height'>102.5</param>
<param name='width'>30.56</param>
</component>
<component name='Car'>
<param name='maxSpeed'>190</param>
<param name='brand'>mercedes</param>
</component>
</model>

如何将模型导出为 XMI/XML?

最佳答案

终于找到解决办法了。以下代码按照我的开篇文章中的要求导出一个 *.xmi 文件:

private void exportXMI(String absuloteTargetFolderPath) {
// change MyLanguage with your language name
Injector injector = new MyLanguageStandaloneSetup()
.createInjectorAndDoEMFRegistration();
XtextResourceSet resourceSet = injector
.getInstance(XtextResourceSet.class);

// .ext ist the extension of the model file
String inputURI = "file:///" + absuloteTargetFolderPath + "/MyFile.ext";
String outputURI = "file:///" + absuloteTargetFolderPath + "/MyFile.xmi";
URI uri = URI.createURI(inputURI);
Resource xtextResource = resourceSet.getResource(uri, true);

EcoreUtil.resolveAll(xtextResource);

Resource xmiResource = resourceSet
.createResource(URI.createURI(outputURI));
xmiResource.getContents().add(xtextResource.getContents().get(0));
try {
xmiResource.save(null);
} catch (IOException e) {
e.printStackTrace();
}
}

关于java - Xtext:将模型导出为 XMI/XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35839786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com