EMFモデルインスタンスの部分木だけ直列化する

EMF2.3からXMLResource.OPTION_ROOT_OBJECTSが新たに導入され、EMFモデルインスタンスの部分木だけを直列化することが可能になりました。

以下、サンプルコードです。

Resource resource = resourceSet.createResource(URI.createURI("http:///My.lib"));

Library library = LibFactory.eINSTANCE.createLibrary();
library.setName("EMF Library");
resource.getContents().add(library);
	
Book book = LibFactory.eINSTANCE.createBook();
book.setTitle("EMF Book");
book.setSummary("EMF is great!");
library.getBooks().add(book);
				
Map<Object, Object> options = new HashMap<Object, Object>();
options.put(XMLResource.OPTION_ROOT_OBJECTS, Collections.singletonList(book));
				
Writer writer = new StringWriter();
((XMLResource)resource).save(writer, options);
System.out.println(writer.toString());

上記コードを実行するとコンソールに以下のような出力を得ます。

<?xml version="1.0" encoding="ASCII"?>
<lib:Book xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:lib="http://www.example.org/lib" title="EMF Book" summary="EMF is great!"/>

上記のように、bookオブジェクトの親としてlibraryオブジェクトが存在するにも関わらず、bookオブジェクトのみが直列化されています。