Я использую ЭДС с созданным XSD ecore. Теперь у меня есть проблема, что сгенерированный файл недействителен.
Есть 2 причины:
- Вставлен элемент DocumentRoot
- Атрибуты имеют неправильную прописную букву.
Дело в том, что это не проблема модели, это проблема процесса сохранения (поскольку в сгенерированном EMF редакторе вывод верен.
Сначала правильный результат:
<?xml version="1.0" encoding="UTF-8"?>
<model:widgetspecification xmlns:model="http://test.com/model" Description="DESC" Name="NAME">
<model:Property Name="PROP1"/>
<model:Property Name="PROP2/>
</model:widgetspecification>
Фактический результат:
<?xml version="1.0" encoding="ASCII"?>
<model:DocumentRoot xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:model="http://test.com/model">
<widgetspecification description="DESC" name="NAME">
<property name="PROP1"/>
<property name="PROP2"/>
</widgetspecification>
</model:DocumentRoot>
И, наконец, процедура сохранения (просто вывод в sysout)
Resource resource = new XMIResourceImpl();
resource.getContents().add(modelRoot);
resource.save(System.out, Collections.EMPTY_MAP);
К сожалению, я не смог найти каких-либо существенных отличий в процедурах сохранения (хотя, конечно, код, сгенерированный в EMF, намного сложнее) - наверное, я пропустил ст. но я до сих пор ничего не нашел).
Также интересен тот факт, что созданный EMF-файл имеет формат UTF-8, но я не могу найти ссылку, где установлена эта опция.