Загрузите и проанализируйте файл XMI с EMF
Мне нужно загрузить и проанализировать файл xmi (версия: OMG XMI 2.4.1) по EMF, но теперь застряли.
В OMG XMI Spec 2.4.1 есть схема XMI XMI.xsd и XMI-model.xmi. Так вот, например, мне нужно загрузить и проанализировать XMI-model.xmi по EMF.
Что я сделал следующим образом:
- Новый EMF-проект в Eclipse
- Импортируйте схему xmi: XMI.xsd и получите файл xmi.genmodel
- Используйте xmi.genmodel для генерации всего кода в eclipse, он сгенерирует код модели
Создайте новый тестовый пример Junit4 и попробуйте загрузить файл XMI-model.xmi с помощью теста подключаемого модуля Junit, но не удалось. Ниже приведен мой код.
@Test public void test() throws IOException { URI uri = URI .createFileURI("/home/pzhengshuai/Desktop/15Feb-19Feb/XMI-model.xmi"); _20110701ResourceFactoryImpl factory = new _20110701ResourceFactoryImpl(); Resource resource = factory.createResource(uri); Map<String, Boolean> options = new HashMap<String, Boolean>(); options.put(XMLResource.OPTION_KEEP_DEFAULT_CONTENT, Boolean.TRUE); resource.load(options); EObject model = (EObject) resource.getContents().get(0); Assert.assertNotNull(model); }
Исключение составляет:
org.eclipse.emf.ecore.resource.Resource$IOWrappedException: Feature 'XMIType' not found. (file:/home/pzhengshuai/Desktop/15Feb-19Feb/XMI-model.xmi, 2, 164)
Хорошо, тогда я попытался прочитать файл xsd и файл xmi, я обнаружил, что есть пространство имен xmlns:uml="http://www.omg.org/spec/UML/20110701"
внутри XMI-model.xmi, поэтому я пошел по ссылке на пространство uml и попытался найти схему UML. К сожалению, по этой ссылке все файлы об UML имеют формат XMI.
Поэтому я попробовал еще два варианта:
- попробуйте конвертировать UML.xmi в UML.xsd с помощью Enterprise Architect и Altova XMLspy, и проделайте то же самое, что и выше, Failed. Лично я думаю, что это преобразование может потерять некоторую информацию.
- Я нашел похожий вопрос здесь,
Вы можете найти XMI XSD на веб-сайте OMG XMI XSD 2.1.1, но вам также понадобятся схема UML и схема MOF. Лучший способ чтения и записи файлов UML XMI - использовать реализацию Eclipse UML. Его можно легко использовать вне Eclipse в простой Java-программе: см.
Я последовал за ответом и прочитал документацию по реализации Eclipse UML, но подумал, что это не то, чего я хочу.
Поэтому я надеюсь, что кто-нибудь может дать мне несколько советов. Заранее спасибо за помощь!
1 ответ
Из вашего описания я не могу сказать ваш точный контекст, но XMI обычно используется в качестве формата сериализации (то есть "физической схемы") для экземпляра метамодели (которая является чем-то вроде "логической схемы").
Но вы пытаетесь использовать XMI в качестве метамодели и использовать XML (со схемой XSD) в качестве формата сериализации. Это, вероятно, не то, что вы хотите.
Чтобы загрузить экземпляр метамодели UML, сериализованной с использованием XMI, просто создайте набор ресурсов и загрузите .uml
использование файла resourceSet.getResource(uri, true)
, Пока classpath вашего плагина Eclipse содержит UML-плагин в качестве зависимости, это должно работать.