Как отключить создание корня документа - PullRequest
2 голосов
/ 08 марта 2012

Я использую ЭДС с созданным XSD ecore. Теперь у меня есть проблема, что сгенерированный файл недействителен. Есть 2 причины:

  1. Вставлен элемент DocumentRoot
  2. Атрибуты имеют неправильную прописную букву.

Дело в том, что это не проблема модели, это проблема процесса сохранения (поскольку в сгенерированном 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, но я не могу найти ссылку, где установлена ​​эта опция.

1 Ответ

2 голосов
/ 22 мая 2012

Используйте XMLResource вместо XMIResource и установите OPTION_EXTENDED_META_DATA в true.

XMLResource resource = new XMLResourceImpl();
resource.setEncoding("UTF-8");
resource.getContents().add(modelRoot);
Map<Object, Object> options = new HashMap<>();
options.put(XMLResource.OPTION_EXTENDED_META_DATA, true);
resource.save(System.out, options);
...