在RS中同一URI可以createResource多个Resource,List方式存放。还存在另外一种Map存放方式, getResource(URI,boolean loadOnDemand)就是通过这种方式存取,如果不存在的话创建。这两个方法看起来有些冲突。似乎用于不同场合。
再来看看怎样通过URL存取EObject:
RS整个相当于一个DataBase, Resource相当于表,存放的是EObject, 每个EObject可以看成对象或者XML。
表用URI来区分,URI中的Segment用来定位EObject。URI的例子参见探索(1)
getEObject(URL, boolean loadOnDemand)很简单,getResource找到对应的Resource,在里面根据Segment查找,就是那个#///@xxx.n格式的东西,注意,还有ID方式。
getPackageRegistry()用来返回RS的URL->Package注册表,它也是个本地的注册表,代理了全局的EPackage.Registry.INSTANCE。这个注册表用于取得EPackage(类型信息)和EFactory(创建实例)
Resource就不说了,主要load,save, 一些具体子类,比如XmlResourceImpl可以直接使用,指定Encoding之类。
看看ResourceSet对EMF了解了很多~