Я создал метамодель .ecore и .genmodel из файла .xsd. Я пытаюсь создать экземпляр модели из файла .xml, соответствующего файлу .xsd (и, как следствие, метамодели .ecore). Как я могу достичь этой цели?
EMF — преобразование модели XML в XMI
Ответы (2)
Только вам нужно загрузить свой файл XML в ресурс EMF, установив для параметра загрузки XMLResource.OPTION_SUPPRESS_DOCUMENT_ROOT
значение true. После этого вам нужно создать выходной ресурс, установив URI в качестве вашего файла .xmi
. Наконец, вы получаете свой корневой элемент из ресурса модели XML и вставляете его в свой ресурс модели XMI, после чего сохраняете свою выходную модель, и все готово.
Resource loadResource = new ResourceImpl(sourceURI); //We create a resource with XML file uri as parameter, to load de XML model.
// Set option to load configuration file
Map options = new HashMap();
// The option below deleted Document root in output file
options.put(XMLResource.OPTION_SUPPRESS_DOCUMENT_ROOT, true);
loadResource.load(options); // Now we have load the XML model
// Create an output resource where copy element from input resource
Resource resourceOut = new Resource(targetURI); //We create a resource to XMI file
// Copying elements from input resource to output resource
EList<EObject> listObj = loadResource.getContents();
EObject obj = listObj.get(0);
resourceOut.getContents().add(obj);
resourceOut.save() //We serialize the resource to the XMI file
person
victormpav
schedule
02.06.2014
Я реализовал ваше решение, но получаю то же содержимое моего XML. Разница заключается в расширении сгенерированного XMI. Я создал простой парсер на Java, но не думаю, что это лучшее решение. У тебя есть идеи?
- person lmove; 07.06.2014
В конце мне просто нужно изменить имя корневого узла. Для достижения этой цели вам просто нужно выполнить следующие шаги:
- На диаграмме ecore щелкните правой кнопкой мыши свой корневой узел (эквивалент вашего корневого узла в вашем XML-файле).
- Нажмите «Создать динамический экземпляр».
- Сделать тестовую модель. Эта модель является экземпляром XMI.
- В конце вам просто нужно изменить информацию о вашем узле на новую (сгенерированную в модели XMI).
В моем случае я заменил
/* At XML file */
<featureModel>
//Here you find the model nodes
...
</ featureModel>
С участием
/* XML file converted to XMI file. This file conforms to XSD and ecore model. */
<ide:FeatureModelType [here you will find some attributes]>
//Here you find the model nodes just as they where defined earlier
...
</ide:FeatureModelType>
Конечно, это можно сделать программно.
person
lmove
schedule
29.07.2014