
Shiep shiep = ModelFactory.eINSTANCE.createShiep();
Depart electric = ModelFactory.eINSTANCE.createDepart();
electric.setName("electric");
shiep.getDeparts().add(electric);
Teacher andy = ModelFactory.eINSTANCE.createTeacher();
andy.setName("andy");
electric.getTeachers().add(andy);
Resource shiepRes = resourceSet.createResource(URI
.createURI("file:///home/winters/emftest/shiep.xml"));
shiepRes.getContents().add(shiep);
Documents root = ModelFactory.eINSTANCE.createDocuments();
Document d1 = ModelFactory.eINSTANCE.createDocument();
d1.setOwner(andy); //这个andy对象就是跨文件保存的对象
d1.setContent("He is a very good teacher.");
root.getChildren().add(d1);
Resource documentsRes = resourceSet.createResource(URI
.createURI("file:///home/winters/emftest/documents.xml"));
documentsRes.getContents().add(root);
shiepRes.save(null);
documentsRes.save(null);
<?xml version="1.0" encoding="ASCII"?>
<org.shiep.edu.model:Shiep xmlns:org.shiep.edu.model="http:///org/shiep/edu/model.ecore">
<departs name="electric">
<teachers name="andy"/>
</departs>
</org.shiep.edu.model:Shiep>
<?xml version="1.0" encoding="ASCII"?>
<org.shiep.edu.model:Documents xmlns:org.shiep.edu.model="http:///org/shiep/edu/model.ecore">
<children content="He is a very good teacher.">
<owner href="shiep.xml#//@departs.0/@teachers.0"/>
</children>
</org.shiep.edu.model:Documents>
Resource docRes = resourceSet.getResource(URI.createURI("file:///home/winters/emftest/documents.xml"), true);
Resource shiepRes = resourceSet.getResource(URI.createURI("file:///home/winters/emftest/shiep.xml"), true);
Documents root = (Documents) docRes.getContents().get(0);
Teacher andyFromDoc = ((Document)root.getChildren().get(0)).getOwner();
Shiep shiep = (Shiep) shiepRes.getContents().get(0);
Teacher andyFromShiep = (Teacher) ((Depart) shiep.getDeparts().get(0)).getTeachers().get(0);
assertEquals(andyFromDoc, andyFromShiep); //true
<!ELEMENT shiep (department*)>
<!ELEMENT department (teacher*)>
<!ATTLIST department name CDATA #IMPLIED>
<!ELEMENT teacher EMPTY>
<!ATTLIST teacher name CDATA #IMPLIED>
<!ELEMENT documents (document*)>
<!ELEMENT document (owner, content)>
<!ELEMENT owner (#PCDATA)>
<!ELEMENT content (#PCDATA)>
/**
* @model transient="true" volatile="true"
*/
String getOwnerName();
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE shiep PUBLIC "public id" "dtds/shiep.dtd">
<shiep>
<department name="electric">
<teacher name="andy"/>
<teacher name="Jacky"/>
<teacher name="richard"/>
</department>
</shiep>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE documents PUBLIC "public id" "dtds/documents.dtd">
<documents>
<document>
<owner>andy</owner>
<content>He is a very good teacher.</content>
</document>
<document>
<owner>Jacky</owner>
<content>He like playing basketball.</content>
</document>
<document>
<owner>richard</owner>
<content>He like coffee.</content>
</document>
</documents>
Shiep shiep = (Shiep) shiepRes.getContents().get(0);
Depart depart = (Depart) shiep.getDeparts().get(0);
EList teachers = depart.getTeachers();
Resource docRes = docResourceSet.getResource(URI
.createURI("file:///home/winters/emftest2/documents.doc.xml"),
true);
Documents root = (Documents) docRes.getContents().get(0);
EList documents = root.getChildren();
for (Iterator it = teachers.iterator(); it.hasNext();) {
Teacher teacher = (Teacher) it.next();
for (Iterator docIt = documents.iterator(); docIt.hasNext();) {
Document doc = (Document) docIt.next();
if (doc.getOwnerName().equals(teacher.getName())) {
doc.setOwner(teacher);
break;
}
}
}
for (Iterator iter = documents.iterator(); iter.hasNext();) {
Document element = (Document) iter.next();
System.out.println(element.getOwner() + " : "
+ element.getContent());
}