在RS中同一URI可以createResource多個(gè)Resource,List方式存放。還存在另外一種Map存放方式, getResource(URI,boolean loadOnDemand)就是通過這種方式存取,如果不存在的話創(chuàng)建。這兩個(gè)方法看起來有些沖突。似乎用于不同場合。

再來看看怎樣通過URL存取EObject:
RS整個(gè)相當(dāng)于一個(gè)DataBase, Resource相當(dāng)于表,存放的是EObject, 每個(gè)EObject可以看成對(duì)象或者XML。
表用URI來區(qū)分,URI中的Segment用來定位EObject。URI的例子參見探索(1)
getEObject(URL, boolean loadOnDemand)很簡單,getResource找到對(duì)應(yīng)的Resource,在里面根據(jù)Segment查找,就是那個(gè)#///@xxx.n格式的東西,注意,還有ID方式。

getPackageRegistry()用來返回RS的URL->Package注冊(cè)表,它也是個(gè)本地的注冊(cè)表,代理了全局的EPackage.Registry.INSTANCE。這個(gè)注冊(cè)表用于取得EPackage(類型信息)和EFactory(創(chuàng)建實(shí)例)


Resource就不說了,主要load,save, 一些具體子類,比如XmlResourceImpl可以直接使用,指定Encoding之類。

看看ResourceSet對(duì)EMF了解了很多~