EMF сериализует модель данных, используя (по умолчанию, наиболее популярный способ) XMIResourceImpl, который строго использует формат XMI, а не собственную структуру XML .
См. http://eclipsedriven.blogspot.com/ для статей об ЭДС и ее случаях использования.
Я согласен с другими ответчиками, что EMF, вероятно, не то, что вы хотите здесь.
Если бы я действительно хотел использовать EMF с пользовательской структурой XML (т.е. не XMI), я бы, вероятно, использовал JAXB для маршалирования / демаршалирования моих объектов EMF (EObjects).
Таким образом, ЭМП - это не то же самое, что JAXB, и у них разные цели и задачи. На самом деле вы, вероятно, можете каким-то образом объединить EMF и JAXB. Я никогда не пробовал, но, похоже, есть действительные варианты использования. (как я уже говорил выше, для маршалинга / демаршалирования объектов EMF в / из XML)
Чтобы понять ЭДС, вам нужно изменить свою парадигму. Для начала удалите часть «XML», отпустите ее из головы. Тогда я предлагаю вам сделать следующее:
- Создать пустой проект EMF.
- Создайте простой файл Ecore (.ecore) или получите его из Интернета. Или импортируйте из любой XML-схемы / UML-файла в модель Ecore.
- Щелкните правой кнопкой мыши на EClass, затем «Создать динамический экземпляр», это создаст файл .xmi.
- Откройте файл .xmi, используя Eclipse, откроется редактор EMF для этой модели. Отредактируйте, как считаете нужным.
- Проверьте содержимое (отредактированного) файла .xmi. Вы увидите, что формат точно соответствует модели Ecore. Вы не сможете изменить / настроить отображение из файла XMI модели <->, поскольку, как следует из названия, XMIResourceImpl только читает / сохраняет файлы XMI (которые реализованы поверх XML), но не читает / сохраняет произвольный формат XML.
EMF поддерживает чтение / запись метамодели XML-схемы (т.е. файлы XSD) с целью преобразования их в метамодель Ecore, но не в файлы XML, соответствующие такой схеме (даже в Ecore) ), если эти файлы не в формате XMI.
Сведения о сохранении моделей EMF в реляционной базе данных см .:
http://eclipsedriven.blogspot.com/2010/12/persisting-emf-objects-to-rdbms-with.html
Я использую Teneo. (и, необязательно, CDO)
Что касается "XML", если вы будете придерживаться XMI и будете довольны им, EMF сделает вашу жизнь на намного проще, так как вам не нужно делать любое отображение ( в отличие от JAXB). Недостатком является то, что наши объекты должны быть объектами EMF.
Объекты EMF - это объекты, которые генерируются EMF и реализуют EObject и прямо или косвенно расширяют EObjectImpl. Вы обычно не хотите кодировать объекты EMF вручную, это будет рутинная работа. С другой стороны, «объекты» JAXB обычно являются чисто объектными объектными объектами POJO и не требуют от JAXB дополнительных требований. Обратите внимание, что в отличие от JAXB, объекты EMF не являются POJO. Это объясняет еще одну другую цель между EMF и JAXB. Их перекрытие меньше, чем вы думаете.
Чтение из XMI (не XML) очень просто:
XMIResource resource = new XMIResourceImpl(URI.create("file:/path/to/mymodel.xmi"));
resource.load(null);
System.out.println( resource.eContents().get(0) );