Загрузите и проанализируйте файл 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.

Поэтому я попробовал еще два варианта:

  1. попробуйте конвертировать UML.xmi в UML.xsd с помощью Enterprise Architect и Altova XMLspy, и проделайте то же самое, что и выше, Failed. Лично я думаю, что это преобразование может потерять некоторую информацию.
  2. Я нашел похожий вопрос здесь,

Вы можете найти 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-плагин в качестве зависимости, это должно работать.

Другие вопросы по тегам